@testdriverai/agent 7.8.0-test.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +7 -0
- package/.env.example +4 -0
- package/.prettierignore +4 -0
- package/.prettierrc +1 -0
- package/CHANGELOG.md +953 -0
- package/README.md +81 -0
- package/agent/events.js +135 -0
- package/agent/index.js +2450 -0
- package/agent/interface.js +35 -0
- package/agent/lib/analytics.js +22 -0
- package/agent/lib/censorship.js +75 -0
- package/agent/lib/commander.js +246 -0
- package/agent/lib/commands.js +1684 -0
- package/agent/lib/config.js +60 -0
- package/agent/lib/generator.js +91 -0
- package/agent/lib/http.js +144 -0
- package/agent/lib/logger.js +56 -0
- package/agent/lib/outputs.js +29 -0
- package/agent/lib/parser.js +209 -0
- package/agent/lib/redraw.js +386 -0
- package/agent/lib/resources/cursor-2.png +0 -0
- package/agent/lib/sandbox.js +1104 -0
- package/agent/lib/sdk.js +633 -0
- package/agent/lib/session.js +25 -0
- package/agent/lib/source-mapper.js +342 -0
- package/agent/lib/subimage/index.js +77 -0
- package/agent/lib/subimage/opencv.js +69 -0
- package/agent/lib/system.js +204 -0
- package/agent/lib/theme.js +14 -0
- package/agent/lib/valid-version.js +21 -0
- package/agent/lib/validation.js +169 -0
- package/ai/.claude-plugin/plugin.json +9 -0
- package/ai/agents/testdriver.md +638 -0
- package/ai/skills/testdriver-ai/SKILL.md +204 -0
- package/ai/skills/testdriver-assert/SKILL.md +315 -0
- package/ai/skills/testdriver-aws-setup/SKILL.md +448 -0
- package/ai/skills/testdriver-cache/SKILL.md +221 -0
- package/ai/skills/testdriver-caching/SKILL.md +124 -0
- package/ai/skills/testdriver-captcha/SKILL.md +158 -0
- package/ai/skills/testdriver-ci-cd/SKILL.md +602 -0
- package/ai/skills/testdriver-click/SKILL.md +286 -0
- package/ai/skills/testdriver-client/SKILL.md +477 -0
- package/ai/skills/testdriver-cloud/SKILL.md +119 -0
- package/ai/skills/testdriver-customizing-devices/SKILL.md +319 -0
- package/ai/skills/testdriver-dashcam/SKILL.md +418 -0
- package/ai/skills/testdriver-debugging-with-screenshots/SKILL.md +401 -0
- package/ai/skills/testdriver-device-config/SKILL.md +317 -0
- package/ai/skills/testdriver-double-click/SKILL.md +102 -0
- package/ai/skills/testdriver-elements/SKILL.md +605 -0
- package/ai/skills/testdriver-enterprise/SKILL.md +114 -0
- package/ai/skills/testdriver-errors/SKILL.md +246 -0
- package/ai/skills/testdriver-events/SKILL.md +356 -0
- package/ai/skills/testdriver-examples/SKILL.md +7 -0
- package/ai/skills/testdriver-exec/SKILL.md +317 -0
- package/ai/skills/testdriver-find/SKILL.md +829 -0
- package/ai/skills/testdriver-focus-application/SKILL.md +293 -0
- package/ai/skills/testdriver-generating-tests/SKILL.md +36 -0
- package/ai/skills/testdriver-hover/SKILL.md +278 -0
- package/ai/skills/testdriver-locating-elements/SKILL.md +71 -0
- package/ai/skills/testdriver-making-assertions/SKILL.md +32 -0
- package/ai/skills/testdriver-mcp/SKILL.md +7 -0
- package/ai/skills/testdriver-mcp-workflow/SKILL.md +410 -0
- package/ai/skills/testdriver-mouse-down/SKILL.md +161 -0
- package/ai/skills/testdriver-mouse-up/SKILL.md +164 -0
- package/ai/skills/testdriver-parse/SKILL.md +236 -0
- package/ai/skills/testdriver-performing-actions/SKILL.md +54 -0
- package/ai/skills/testdriver-press-keys/SKILL.md +348 -0
- package/ai/skills/testdriver-provision/SKILL.md +331 -0
- package/ai/skills/testdriver-quickstart/SKILL.md +144 -0
- package/ai/skills/testdriver-redraw/SKILL.md +214 -0
- package/ai/skills/testdriver-reusable-code/SKILL.md +249 -0
- package/ai/skills/testdriver-right-click/SKILL.md +123 -0
- package/ai/skills/testdriver-running-tests/SKILL.md +185 -0
- package/ai/skills/testdriver-screenshot/SKILL.md +248 -0
- package/ai/skills/testdriver-screenshots/SKILL.md +184 -0
- package/ai/skills/testdriver-scroll/SKILL.md +335 -0
- package/ai/skills/testdriver-secrets/SKILL.md +115 -0
- package/ai/skills/testdriver-self-hosted/SKILL.md +65 -0
- package/ai/skills/testdriver-test-writer/SKILL.md +448 -0
- package/ai/skills/testdriver-testdriver/SKILL.md +628 -0
- package/ai/skills/testdriver-testdriver-mechanic/SKILL.md +165 -0
- package/ai/skills/testdriver-type/SKILL.md +357 -0
- package/ai/skills/testdriver-variables/SKILL.md +111 -0
- package/ai/skills/testdriver-wait/SKILL.md +50 -0
- package/ai/skills/testdriver-waiting-for-elements/SKILL.md +90 -0
- package/ai/skills/testdriver-what-is-testdriver/SKILL.md +54 -0
- package/bin/testdriverai.js +22 -0
- package/debugger/bg.png +0 -0
- package/debugger/icon.png +0 -0
- package/debugger/index.html +469 -0
- package/debugger/td.png +0 -0
- package/debugger/tray-buffered.png +0 -0
- package/debugger/tray.png +0 -0
- package/docs/GITHUB_COMMENTS.md +330 -0
- package/docs/GITHUB_COMMENTS_ANNOUNCEMENT.md +167 -0
- package/docs/QUICK-START-GITHUB-COMMENTS.md +84 -0
- package/docs/TEST-GITHUB-COMMENTS.md +129 -0
- package/docs/_data/examples-manifest.json +177 -0
- package/docs/_data/examples-manifest.schema.json +41 -0
- package/docs/_scripts/extract-example-urls.js +165 -0
- package/docs/_scripts/generate-examples.js +560 -0
- package/docs/_scripts/generate-skills.js +154 -0
- package/docs/_scripts/link-replacer.js +164 -0
- package/docs/_scripts/upload-docs-to-openai.js +284 -0
- package/docs/changelog.mdx +161 -0
- package/docs/claude-mcp-plugin.mdx +160 -0
- package/docs/docs.json +442 -0
- package/docs/github-integration-setup.md +266 -0
- package/docs/guide/best-practices-polling.mdx +174 -0
- package/docs/images/content/account/newprojectsettings.png +0 -0
- package/docs/images/content/account/projectpage.png +0 -0
- package/docs/images/content/account/projectreplays.png +0 -0
- package/docs/images/content/account/team-manage.png +0 -0
- package/docs/images/content/account/teampage.png +0 -0
- package/docs/images/content/extension/cursor.svg +1 -0
- package/docs/images/content/extension/vscode.svg +57 -0
- package/docs/images/content/extension/windsurf.svg +3 -0
- package/docs/images/content/parse/output.png +0 -0
- package/docs/images/content/self-hosted/launchtemplateid.png +0 -0
- package/docs/images/content/side-by-side.png +0 -0
- package/docs/images/content/vscode/ide-full.png +0 -0
- package/docs/images/content/vscode/running.png +0 -0
- package/docs/images/content/vscode/v7-chat.png +0 -0
- package/docs/images/content/vscode/v7-choose-agent.png +0 -0
- package/docs/images/content/vscode/v7-full.png +0 -0
- package/docs/images/content/vscode/v7-onboarding.png +0 -0
- package/docs/images/content/vscode/vscode-2-assert.png +0 -0
- package/docs/images/content/vscode/vscode-agent-preview.png +0 -0
- package/docs/images/content/vscode/vscode-copilot-ask.png +0 -0
- package/docs/images/content/vscode/vscode-file-creation.png +0 -0
- package/docs/images/content/vscode/vscode-install.png +0 -0
- package/docs/images/content/vscode/vscode-overview.png +0 -0
- package/docs/images/content/vscode/vscode-setup-walkthrough.png +0 -0
- package/docs/images/content/vscode/vscode-stopchat.png +0 -0
- package/docs/images/content/vscode/vscode-stoptest.png +0 -0
- package/docs/images/content/vscode/vscode-tdservice.png +0 -0
- package/docs/images/content/vscode/vscode-test-output.png +0 -0
- package/docs/images/content/vscode/vscode-testhistory.png +0 -0
- package/docs/images/content/vscode/vscode-testpane-runtests.png +0 -0
- package/docs/images/content/vscode/vscode-testpane.png +0 -0
- package/docs/images/template/dark.png +0 -0
- package/docs/images/template/icon.png +0 -0
- package/docs/images/template/light.png +0 -0
- package/docs/snippets/calendar-link.mdx +4 -0
- package/docs/snippets/gitignore-warning.mdx +7 -0
- package/docs/snippets/lifecycle-warning.mdx +6 -0
- package/docs/snippets/test-prereqs.mdx +12 -0
- package/docs/snippets/tests/assert-replay.mdx +7 -0
- package/docs/snippets/tests/assert-yaml.mdx +8 -0
- package/docs/snippets/tests/exec-js-replay.mdx +7 -0
- package/docs/snippets/tests/exec-js-yaml.mdx +32 -0
- package/docs/snippets/tests/exec-shell-replay.mdx +7 -0
- package/docs/snippets/tests/exec-shell-yaml.mdx +15 -0
- package/docs/snippets/tests/hover-image-replay.mdx +7 -0
- package/docs/snippets/tests/hover-image-yaml.mdx +17 -0
- package/docs/snippets/tests/hover-text-replay.mdx +7 -0
- package/docs/snippets/tests/hover-text-with-description-replay.mdx +7 -0
- package/docs/snippets/tests/hover-text-with-description-yaml.mdx +24 -0
- package/docs/snippets/tests/hover-text-yaml.mdx +14 -0
- package/docs/snippets/tests/match-image-replay.mdx +7 -0
- package/docs/snippets/tests/match-image-yaml.mdx +17 -0
- package/docs/snippets/tests/press-keys-replay.mdx +7 -0
- package/docs/snippets/tests/press-keys-yaml.mdx +36 -0
- package/docs/snippets/tests/remember-replay.mdx +7 -0
- package/docs/snippets/tests/remember-yaml.mdx +28 -0
- package/docs/snippets/tests/scroll-replay.mdx +7 -0
- package/docs/snippets/tests/scroll-until-image-replay.mdx +7 -0
- package/docs/snippets/tests/scroll-until-image-yaml.mdx +14 -0
- package/docs/snippets/tests/scroll-until-text-replay.mdx +7 -0
- package/docs/snippets/tests/scroll-until-text-yaml.mdx +17 -0
- package/docs/snippets/tests/scroll-yaml.mdx +30 -0
- package/docs/snippets/tests/type-repeated-replay.mdx +7 -0
- package/docs/snippets/tests/type-repeated-yaml.mdx +22 -0
- package/docs/snippets/tests/type-replay.mdx +7 -0
- package/docs/snippets/tests/type-yaml.mdx +28 -0
- package/docs/snippets/tests/wait-for-image-replay.mdx +7 -0
- package/docs/snippets/tests/wait-for-image-yaml.mdx +18 -0
- package/docs/snippets/tests/wait-for-text-replay.mdx +7 -0
- package/docs/snippets/tests/wait-for-text-yaml.mdx +18 -0
- package/docs/snippets/tests/wait-replay.mdx +7 -0
- package/docs/snippets/tests/wait-yaml.mdx +13 -0
- package/docs/styles.css +65 -0
- package/docs/v6/account/dashboard.mdx +16 -0
- package/docs/v6/account/enterprise.mdx +110 -0
- package/docs/v6/account/pricing.mdx +33 -0
- package/docs/v6/account/projects.mdx +33 -0
- package/docs/v6/account/team.mdx +35 -0
- package/docs/v6/action/ami.mdx +109 -0
- package/docs/v6/action/performance.mdx +105 -0
- package/docs/v6/action/secrets.mdx +93 -0
- package/docs/v6/apps/chrome-extensions.mdx +48 -0
- package/docs/v6/apps/desktop-apps.mdx +93 -0
- package/docs/v6/apps/mobile-apps.mdx +26 -0
- package/docs/v6/apps/static-websites.mdx +54 -0
- package/docs/v6/apps/tauri-apps.mdx +361 -0
- package/docs/v6/bugs/jira.mdx +232 -0
- package/docs/v6/cli/overview.mdx +66 -0
- package/docs/v6/commands/assert.mdx +45 -0
- package/docs/v6/commands/exec.mdx +276 -0
- package/docs/v6/commands/focus-application.mdx +44 -0
- package/docs/v6/commands/hover-image.mdx +69 -0
- package/docs/v6/commands/hover-text.mdx +47 -0
- package/docs/v6/commands/if.mdx +53 -0
- package/docs/v6/commands/match-image.mdx +67 -0
- package/docs/v6/commands/press-keys.mdx +87 -0
- package/docs/v6/commands/remember.mdx +49 -0
- package/docs/v6/commands/run.mdx +44 -0
- package/docs/v6/commands/scroll-until-image.mdx +66 -0
- package/docs/v6/commands/scroll-until-text.mdx +60 -0
- package/docs/v6/commands/scroll.mdx +69 -0
- package/docs/v6/commands/type.mdx +45 -0
- package/docs/v6/commands/wait-for-image.mdx +54 -0
- package/docs/v6/commands/wait-for-text.mdx +48 -0
- package/docs/v6/commands/wait.mdx +45 -0
- package/docs/v6/exporting/junit.mdx +218 -0
- package/docs/v6/exporting/playwright.mdx +197 -0
- package/docs/v6/features/auto-healing.mdx +144 -0
- package/docs/v6/features/generation.mdx +116 -0
- package/docs/v6/features/parallel-testing.mdx +151 -0
- package/docs/v6/features/reusable-snippets.mdx +131 -0
- package/docs/v6/features/selectorless.mdx +80 -0
- package/docs/v6/features/visual-assertions.mdx +139 -0
- package/docs/v6/getting-started/ci.mdx +146 -0
- package/docs/v6/getting-started/cli.mdx +91 -0
- package/docs/v6/getting-started/editing.mdx +100 -0
- package/docs/v6/getting-started/playwright.mdx +342 -0
- package/docs/v6/getting-started/running.mdx +48 -0
- package/docs/v6/getting-started/self-hosting.mdx +408 -0
- package/docs/v6/getting-started/vscode.mdx +88 -0
- package/docs/v6/guide/assertions.mdx +189 -0
- package/docs/v6/guide/authentication.mdx +136 -0
- package/docs/v6/guide/code.mdx +65 -0
- package/docs/v6/guide/dashcam.mdx +118 -0
- package/docs/v6/guide/environment-variables.mdx +26 -0
- package/docs/v6/guide/lifecycle.mdx +242 -0
- package/docs/v6/guide/locating.mdx +141 -0
- package/docs/v6/guide/protips.mdx +43 -0
- package/docs/v6/guide/variables.mdx +143 -0
- package/docs/v6/guide/waiting.mdx +130 -0
- package/docs/v6/importing/csv.mdx +196 -0
- package/docs/v6/importing/gherkin.mdx +143 -0
- package/docs/v6/importing/jira.mdx +164 -0
- package/docs/v6/importing/testrail.mdx +162 -0
- package/docs/v6/integrations/electron.mdx +146 -0
- package/docs/v6/integrations/netlify.mdx +100 -0
- package/docs/v6/integrations/vercel.mdx +125 -0
- package/docs/v6/interactive/explore.mdx +99 -0
- package/docs/v6/interactive/run.mdx +52 -0
- package/docs/v6/interactive/save.mdx +63 -0
- package/docs/v6/overview/comparison.mdx +101 -0
- package/docs/v6/overview/faq.mdx +162 -0
- package/docs/v6/overview/performance.mdx +52 -0
- package/docs/v6/overview/quickstart.mdx +137 -0
- package/docs/v6/overview/what-is-testdriver.mdx +85 -0
- package/docs/v6/scenarios/ai-chatbot.mdx +28 -0
- package/docs/v6/scenarios/cookie-banner.mdx +32 -0
- package/docs/v6/scenarios/file-upload.mdx +33 -0
- package/docs/v6/scenarios/form-filling.mdx +32 -0
- package/docs/v6/scenarios/log-in.mdx +75 -0
- package/docs/v6/scenarios/pdf-generation.mdx +25 -0
- package/docs/v6/scenarios/spell-check.mdx +22 -0
- package/docs/v6/security/action.mdx +84 -0
- package/docs/v6/security/agent.mdx +73 -0
- package/docs/v6/security/platform.mdx +77 -0
- package/docs/v6/tutorials/advanced-test.mdx +81 -0
- package/docs/v6/tutorials/basic-test.mdx +45 -0
- package/docs/v7/_drafts/agents.mdx +843 -0
- package/docs/v7/_drafts/architecture.mdx +399 -0
- package/docs/v7/_drafts/auto-cache-key.mdx +167 -0
- package/docs/v7/_drafts/awesome-logs-quick-ref.mdx +100 -0
- package/docs/v7/_drafts/best-practices.mdx +486 -0
- package/docs/v7/_drafts/caching-ai.mdx +215 -0
- package/docs/v7/_drafts/caching-selectors.mdx +424 -0
- package/docs/v7/_drafts/caching.mdx +366 -0
- package/docs/v7/_drafts/cli-to-sdk-migration.mdx +425 -0
- package/docs/v7/_drafts/commands/assert.mdx +45 -0
- package/docs/v7/_drafts/commands/exec.mdx +276 -0
- package/docs/v7/_drafts/commands/focus-application.mdx +44 -0
- package/docs/v7/_drafts/commands/hover-image.mdx +69 -0
- package/docs/v7/_drafts/commands/hover-text.mdx +47 -0
- package/docs/v7/_drafts/commands/if.mdx +53 -0
- package/docs/v7/_drafts/commands/match-image.mdx +67 -0
- package/docs/v7/_drafts/commands/press-keys.mdx +87 -0
- package/docs/v7/_drafts/commands/remember.mdx +49 -0
- package/docs/v7/_drafts/commands/run.mdx +44 -0
- package/docs/v7/_drafts/commands/scroll-until-image.mdx +66 -0
- package/docs/v7/_drafts/commands/scroll-until-text.mdx +60 -0
- package/docs/v7/_drafts/commands/scroll.mdx +69 -0
- package/docs/v7/_drafts/commands/type.mdx +45 -0
- package/docs/v7/_drafts/commands/wait-for-image.mdx +54 -0
- package/docs/v7/_drafts/commands/wait-for-text.mdx +48 -0
- package/docs/v7/_drafts/commands/wait.mdx +45 -0
- package/docs/v7/_drafts/configuration.mdx +378 -0
- package/docs/v7/_drafts/contributing.mdx +174 -0
- package/docs/v7/_drafts/core.mdx +458 -0
- package/docs/v7/_drafts/dashcam-title-feature.mdx +89 -0
- package/docs/v7/_drafts/debugging.mdx +349 -0
- package/docs/v7/_drafts/error-handling.mdx +501 -0
- package/docs/v7/_drafts/faq.mdx +393 -0
- package/docs/v7/_drafts/hooks.mdx +360 -0
- package/docs/v7/_drafts/init-command.mdx +95 -0
- package/docs/v7/_drafts/installation.mdx +420 -0
- package/docs/v7/_drafts/migration.mdx +562 -0
- package/docs/v7/_drafts/observable.mdx +604 -0
- package/docs/v7/_drafts/playwright.mdx +342 -0
- package/docs/v7/_drafts/plugin-migration.mdx +220 -0
- package/docs/v7/_drafts/powerful.mdx +419 -0
- package/docs/v7/_drafts/presets.mdx +210 -0
- package/docs/v7/_drafts/progressive-disclosure.mdx +230 -0
- package/docs/v7/_drafts/prompt-cache.mdx +200 -0
- package/docs/v7/_drafts/provision.mdx +390 -0
- package/docs/v7/_drafts/quick-start-test-recording.mdx +214 -0
- package/docs/v7/_drafts/readme.mdx +135 -0
- package/docs/v7/_drafts/reports.mdx +414 -0
- package/docs/v7/_drafts/scalable.mdx +763 -0
- package/docs/v7/_drafts/screenshot.mdx +155 -0
- package/docs/v7/_drafts/sdk-awesome-logs.mdx +468 -0
- package/docs/v7/_drafts/sdk-browser-rendering.mdx +167 -0
- package/docs/v7/_drafts/sdk-migration.mdx +474 -0
- package/docs/v7/_drafts/sdk-v7-complete.mdx +345 -0
- package/docs/v7/_drafts/self-hosting.mdx +369 -0
- package/docs/v7/_drafts/test-recording.mdx +382 -0
- package/docs/v7/_drafts/troubleshooting.mdx +526 -0
- package/docs/v7/_drafts/vitest-plugin.mdx +477 -0
- package/docs/v7/_drafts/vitest.mdx +535 -0
- package/docs/v7/_drafts/writing-tests.mdx +25 -0
- package/docs/v7/ai.mdx +205 -0
- package/docs/v7/assert.mdx +316 -0
- package/docs/v7/aws-setup.mdx +449 -0
- package/docs/v7/cache.mdx +223 -0
- package/docs/v7/caching.mdx +128 -0
- package/docs/v7/captcha.mdx +159 -0
- package/docs/v7/ci-cd.mdx +603 -0
- package/docs/v7/click.mdx +287 -0
- package/docs/v7/client.mdx +478 -0
- package/docs/v7/copilot/auto-healing.mdx +265 -0
- package/docs/v7/copilot/creating-tests.mdx +156 -0
- package/docs/v7/copilot/github.mdx +143 -0
- package/docs/v7/copilot/running-tests.mdx +149 -0
- package/docs/v7/copilot/setup.mdx +143 -0
- package/docs/v7/customizing-devices.mdx +319 -0
- package/docs/v7/dashcam.mdx +419 -0
- package/docs/v7/debugging-with-screenshots.mdx +402 -0
- package/docs/v7/device-config.mdx +317 -0
- package/docs/v7/double-click.mdx +102 -0
- package/docs/v7/elements.mdx +606 -0
- package/docs/v7/enterprise.mdx +9 -0
- package/docs/v7/errors.mdx +248 -0
- package/docs/v7/events.mdx +358 -0
- package/docs/v7/examples/ai.mdx +72 -0
- package/docs/v7/examples/assert.mdx +72 -0
- package/docs/v7/examples/captcha-api.mdx +92 -0
- package/docs/v7/examples/chrome-extension.mdx +132 -0
- package/docs/v7/examples/drag-and-drop.mdx +100 -0
- package/docs/v7/examples/element-not-found.mdx +67 -0
- package/docs/v7/examples/exec-output.mdx +85 -0
- package/docs/v7/examples/exec-pwsh.mdx +83 -0
- package/docs/v7/examples/focus-window.mdx +62 -0
- package/docs/v7/examples/hover-image.mdx +94 -0
- package/docs/v7/examples/hover-text.mdx +69 -0
- package/docs/v7/examples/installer.mdx +91 -0
- package/docs/v7/examples/launch-vscode-linux.mdx +101 -0
- package/docs/v7/examples/match-image.mdx +96 -0
- package/docs/v7/examples/press-keys.mdx +92 -0
- package/docs/v7/examples/scroll-keyboard.mdx +79 -0
- package/docs/v7/examples/scroll-until-image.mdx +81 -0
- package/docs/v7/examples/scroll-until-text.mdx +109 -0
- package/docs/v7/examples/scroll.mdx +81 -0
- package/docs/v7/examples/type.mdx +92 -0
- package/docs/v7/examples/windows-installer.mdx +89 -0
- package/docs/v7/exec.mdx +318 -0
- package/docs/v7/find.mdx +830 -0
- package/docs/v7/focus-application.mdx +294 -0
- package/docs/v7/generating-tests.mdx +36 -0
- package/docs/v7/hosted.mdx +158 -0
- package/docs/v7/hover.mdx +279 -0
- package/docs/v7/locating-elements.mdx +71 -0
- package/docs/v7/making-assertions.mdx +32 -0
- package/docs/v7/mcp.mdx +9 -0
- package/docs/v7/mouse-down.mdx +161 -0
- package/docs/v7/mouse-up.mdx +164 -0
- package/docs/v7/parse.mdx +237 -0
- package/docs/v7/performing-actions.mdx +54 -0
- package/docs/v7/press-keys.mdx +349 -0
- package/docs/v7/provision.mdx +333 -0
- package/docs/v7/quickstart.mdx +173 -0
- package/docs/v7/redraw.mdx +216 -0
- package/docs/v7/reusable-code.mdx +249 -0
- package/docs/v7/right-click.mdx +123 -0
- package/docs/v7/running-tests.mdx +185 -0
- package/docs/v7/screenshot.mdx +249 -0
- package/docs/v7/screenshots.mdx +186 -0
- package/docs/v7/scroll.mdx +336 -0
- package/docs/v7/secrets.mdx +115 -0
- package/docs/v7/self-hosted.mdx +149 -0
- package/docs/v7/type.mdx +358 -0
- package/docs/v7/variables.mdx +111 -0
- package/docs/v7/wait.mdx +52 -0
- package/docs/v7/waiting-for-elements.mdx +90 -0
- package/docs/v7/what-is-testdriver.mdx +54 -0
- package/eslint.config.js +67 -0
- package/examples/ai.test.mjs +31 -0
- package/examples/assert.test.mjs +47 -0
- package/examples/chrome-extension.test.mjs +97 -0
- package/examples/config.mjs +5 -0
- package/examples/element-not-found.test.mjs +27 -0
- package/examples/exec-output.test.mjs +60 -0
- package/examples/exec-pwsh.test.mjs +58 -0
- package/examples/findall-coffee-icons.test.mjs +42 -0
- package/examples/focus-window.test.mjs +37 -0
- package/examples/formatted-logging.test.mjs +27 -0
- package/examples/hover-image.test.mjs +53 -0
- package/examples/hover-text-with-description.test.mjs +57 -0
- package/examples/hover-text.test.mjs +28 -0
- package/examples/installer.test.mjs +50 -0
- package/examples/launch-vscode-linux.test.mjs +55 -0
- package/examples/match-image.test.mjs +55 -0
- package/examples/parse.test.mjs +19 -0
- package/examples/press-keys.test.mjs +44 -0
- package/examples/prompt.test.mjs +34 -0
- package/examples/scroll-keyboard.test.mjs +38 -0
- package/examples/scroll-until-image.test.mjs +40 -0
- package/examples/scroll.test.mjs +42 -0
- package/examples/type.test.mjs +46 -0
- package/examples/windows-installer.test.mjs +54 -0
- package/index.js +2 -0
- package/interfaces/cli/commands/init.js +438 -0
- package/interfaces/cli/commands/setup.js +382 -0
- package/interfaces/cli/lib/base.js +285 -0
- package/interfaces/cli.js +20 -0
- package/interfaces/junit-reporter.js +290 -0
- package/interfaces/logger.js +388 -0
- package/interfaces/readline.js +234 -0
- package/interfaces/shared-test-state.mjs +64 -0
- package/interfaces/vitest-plugin.d.ts +115 -0
- package/interfaces/vitest-plugin.mjs +1698 -0
- package/lib/captcha/solver.js +358 -0
- package/lib/core/Dashcam.js +533 -0
- package/lib/core/index.d.ts +172 -0
- package/lib/core/index.js +12 -0
- package/lib/environments.json +18 -0
- package/lib/github-comment-formatter.js +263 -0
- package/lib/github-comment.mjs +452 -0
- package/lib/init-project.js +575 -0
- package/lib/presets/index.mjs +331 -0
- package/lib/resolve-channel.js +46 -0
- package/lib/sentry.js +417 -0
- package/lib/vitest/hooks.d.ts +57 -0
- package/lib/vitest/hooks.mjs +674 -0
- package/lib/vitest/setup-aws.mjs +247 -0
- package/lib/vitest/setup-self-hosted.mjs +151 -0
- package/lib/vitest/setup.mjs +46 -0
- package/manual/captcha-api.test.mjs +51 -0
- package/manual/drag-and-drop.test.mjs +59 -0
- package/manual/flake-diffthreshold-001.test.mjs +9 -0
- package/manual/flake-diffthreshold-01.test.mjs +9 -0
- package/manual/flake-diffthreshold-05.test.mjs +9 -0
- package/manual/flake-noredraw-cache.test.mjs +9 -0
- package/manual/flake-noredraw-nocache.test.mjs +9 -0
- package/manual/flake-redraw-cache.test.mjs +9 -0
- package/manual/flake-redraw-nocache.test.mjs +9 -0
- package/manual/flake-rocket-match.test.mjs +30 -0
- package/manual/flake-shared.mjs +51 -0
- package/manual/no-provision.test.mjs +31 -0
- package/manual/packer-hover-image.test.mjs +176 -0
- package/manual/scroll-until-text.test.mjs +68 -0
- package/manual/test-init-command.js +223 -0
- package/mcp-server/README.md +322 -0
- package/mcp-server/dist/codegen.d.ts +9 -0
- package/mcp-server/dist/codegen.js +165 -0
- package/mcp-server/dist/mcp-app.html +114 -0
- package/mcp-server/dist/package.json +1 -0
- package/mcp-server/dist/provision-types.d.ts +290 -0
- package/mcp-server/dist/provision-types.js +174 -0
- package/mcp-server/dist/server.d.ts +6 -0
- package/mcp-server/dist/server.mjs +1925 -0
- package/mcp-server/dist/session.d.ts +85 -0
- package/mcp-server/dist/session.js +152 -0
- package/mcp-server/mcp-app.html +28 -0
- package/mcp-server/mcp-config.example.json +19 -0
- package/mcp-server/package-lock.json +4027 -0
- package/mcp-server/package.json +31 -0
- package/mcp-server/src/codegen.ts +189 -0
- package/mcp-server/src/mcp-app.css +360 -0
- package/mcp-server/src/mcp-app.ts +547 -0
- package/mcp-server/src/provision-types.ts +209 -0
- package/mcp-server/src/server.ts +2391 -0
- package/mcp-server/src/session.ts +194 -0
- package/mcp-server/tsconfig.json +16 -0
- package/mcp-server/vite.config.ts +23 -0
- package/package.json +158 -0
- package/schema.json +1046 -0
- package/scripts/generate-skills.js +94 -0
- package/sdk-log-formatter.js +1157 -0
- package/sdk.d.ts +1486 -0
- package/sdk.js +4336 -0
- package/setup/aws/cloudformation.yaml +463 -0
- package/setup/aws/disable-defender.sh +42 -0
- package/setup/aws/install-dev-runner.sh +79 -0
- package/setup/aws/spawn-runner.sh +289 -0
- package/test/captcha-solver.test.mjs +152 -0
- package/test/chrome-remote-debugging.test.mjs +66 -0
- package/test/duckduckgo/experiment.test.mjs +28 -0
- package/test/duckduckgo/setup.test.mjs +29 -0
- package/test/manual/debug-locate-response.js +82 -0
- package/test/manual/reconnect-provision.test.mjs +49 -0
- package/test/manual/test-console-logs.test.mjs +42 -0
- package/test/manual/test-find-api.js +73 -0
- package/test/manual/test-init.sh +54 -0
- package/test/manual/test-prompt-cache.js +97 -0
- package/test/manual/test-provision-auth.mjs +22 -0
- package/test/manual/test-sandbox-render.js +29 -0
- package/test/manual/test-sdk-methods.js +15 -0
- package/test/manual/test-sdk-refactor.js +53 -0
- package/test/manual/test-stack-trace.mjs +57 -0
- package/test/manual/verify-element-api.js +89 -0
- package/test/manual/verify-types.js +0 -0
- package/test/manual-unawaited-promise.test.mjs +31 -0
- package/vitest.config.mjs +58 -0
- package/vitest.runner.config.mjs +33 -0
- package/vscode-extension/.vscodeignore +12 -0
- package/vscode-extension/README.md +94 -0
- package/vscode-extension/media/icon.png +0 -0
- package/vscode-extension/package-lock.json +4126 -0
- package/vscode-extension/package.json +86 -0
- package/vscode-extension/src/extension.ts +829 -0
- package/vscode-extension/testdriverai-0.1.0.vsix +0 -0
- package/vscode-extension/tsconfig.json +16 -0
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: testdriver:debugging-with-screenshots
|
|
3
|
+
description: View and analyze saved screenshots using MCP commands for test debugging and development
|
|
4
|
+
---
|
|
5
|
+
<!-- Generated from debugging-with-screenshots.mdx. DO NOT EDIT. -->
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
TestDriver MCP provides powerful commands to view and analyze screenshots saved during test execution. This enables rapid debugging, test development, and comparison workflows without manually opening image files.
|
|
10
|
+
|
|
11
|
+
<Note>
|
|
12
|
+
**Automatic Screenshots (Default: Enabled)**: TestDriver automatically captures screenshots before and after every command. Screenshots are named with the line number and action, making it easy to trace exactly which line of code produced each screenshot. For example: `001-click-before-L42-submit-button.png`
|
|
13
|
+
</Note>
|
|
14
|
+
|
|
15
|
+
## MCP Commands
|
|
16
|
+
|
|
17
|
+
### list_local_screenshots
|
|
18
|
+
|
|
19
|
+
List and filter screenshots saved in the `.testdriver/screenshots/` directory:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
list_local_screenshots()
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Filter Parameters:**
|
|
26
|
+
|
|
27
|
+
<ParamField path="directory" type="string" optional>
|
|
28
|
+
Filter screenshots by test file or subdirectory (e.g., "login.test", "mcp-screenshots"). If omitted, lists all screenshots.
|
|
29
|
+
</ParamField>
|
|
30
|
+
|
|
31
|
+
<ParamField path="line" type="number" optional>
|
|
32
|
+
Filter by exact line number from test file (e.g., 42 matches L42 in filename).
|
|
33
|
+
</ParamField>
|
|
34
|
+
|
|
35
|
+
<ParamField path="lineRange" type="object" optional>
|
|
36
|
+
Filter by line number range. Example: `{ start: 10, end: 20 }` matches screenshots from lines 10-20.
|
|
37
|
+
</ParamField>
|
|
38
|
+
|
|
39
|
+
<ParamField path="action" type="string" optional>
|
|
40
|
+
Filter by action type: `click`, `find`, `type`, `assert`, `provision`, `scroll`, `hover`, etc.
|
|
41
|
+
</ParamField>
|
|
42
|
+
|
|
43
|
+
<ParamField path="phase" type="string" optional>
|
|
44
|
+
Filter by phase: `"before"` (state before action) or `"after"` (state after action).
|
|
45
|
+
</ParamField>
|
|
46
|
+
|
|
47
|
+
<ParamField path="pattern" type="string" optional>
|
|
48
|
+
Regex pattern to match against filename. Example: `"login|signin"` or `"button.*click"`.
|
|
49
|
+
</ParamField>
|
|
50
|
+
|
|
51
|
+
<ParamField path="sequence" type="number" optional>
|
|
52
|
+
Filter by exact sequence number.
|
|
53
|
+
</ParamField>
|
|
54
|
+
|
|
55
|
+
<ParamField path="sequenceRange" type="object" optional>
|
|
56
|
+
Filter by sequence range. Example: `{ start: 1, end: 10 }` matches first 10 screenshots.
|
|
57
|
+
</ParamField>
|
|
58
|
+
|
|
59
|
+
<ParamField path="limit" type="number" optional>
|
|
60
|
+
Maximum number of results to return (default: 50).
|
|
61
|
+
</ParamField>
|
|
62
|
+
|
|
63
|
+
<ParamField path="sortBy" type="string" optional>
|
|
64
|
+
Sort results by: `"modified"` (newest first, default), `"sequence"` (execution order), or `"line"` (line number).
|
|
65
|
+
</ParamField>
|
|
66
|
+
|
|
67
|
+
**Returns:**
|
|
68
|
+
|
|
69
|
+
Array of screenshot metadata including:
|
|
70
|
+
- `path` - Full absolute path to the screenshot file
|
|
71
|
+
- `relativePath` - Path relative to `.testdriver/screenshots/`
|
|
72
|
+
- `name` - Screenshot filename
|
|
73
|
+
- `sizeBytes` - File size in bytes
|
|
74
|
+
- `modified` - Last modification timestamp
|
|
75
|
+
- `sequence` - Sequential number (from auto-screenshots)
|
|
76
|
+
- `action` - Action type (click, find, etc.)
|
|
77
|
+
- `phase` - Before/after phase
|
|
78
|
+
- `lineNumber` - Line number from test file
|
|
79
|
+
- `description` - Element or action description
|
|
80
|
+
|
|
81
|
+
**Example Responses:**
|
|
82
|
+
|
|
83
|
+
```json
|
|
84
|
+
// Basic listing
|
|
85
|
+
[
|
|
86
|
+
{
|
|
87
|
+
"path": "/Users/user/project/.testdriver/screenshots/login.test/001-click-before-L42-submit-button.png",
|
|
88
|
+
"relativePath": "login.test/001-click-before-L42-submit-button.png",
|
|
89
|
+
"name": "001-click-before-L42-submit-button.png",
|
|
90
|
+
"sizeBytes": 145632,
|
|
91
|
+
"modified": "2026-01-23T10:00:00.000Z",
|
|
92
|
+
"sequence": 1,
|
|
93
|
+
"action": "click",
|
|
94
|
+
"phase": "before",
|
|
95
|
+
"lineNumber": 42,
|
|
96
|
+
"description": "submit-button"
|
|
97
|
+
}
|
|
98
|
+
]
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### view_local_screenshot
|
|
102
|
+
|
|
103
|
+
View a specific screenshot from the list:
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
view_local_screenshot({ path: "/full/path/to/screenshot.png" })
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**Parameters:**
|
|
110
|
+
|
|
111
|
+
<ParamField path="path" type="string" required>
|
|
112
|
+
Full absolute path to the screenshot file (as returned by `list_local_screenshots`)
|
|
113
|
+
</ParamField>
|
|
114
|
+
|
|
115
|
+
**Returns:**
|
|
116
|
+
|
|
117
|
+
- Image content (displayed to both AI and user via MCP App)
|
|
118
|
+
- Screenshot metadata
|
|
119
|
+
- Success/error status
|
|
120
|
+
|
|
121
|
+
## Common Workflows
|
|
122
|
+
|
|
123
|
+
### Test Debugging After Failures
|
|
124
|
+
|
|
125
|
+
When a test fails, use powerful filtering to quickly find relevant screenshots:
|
|
126
|
+
|
|
127
|
+
**1. Find screenshots at the failing line:**
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
// If test failed at line 42
|
|
131
|
+
list_local_screenshots({ line: 42 })
|
|
132
|
+
|
|
133
|
+
// View before and after states at that line
|
|
134
|
+
view_local_screenshot({ path: ".testdriver/screenshots/login.test/005-click-before-L42-submit-button.png" })
|
|
135
|
+
view_local_screenshot({ path: ".testdriver/screenshots/login.test/006-click-after-L42-submit-button.png" })
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**2. See what happened leading up to the failure:**
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
// Get screenshots from lines 35-45 to see context
|
|
142
|
+
list_local_screenshots({ directory: "login.test", lineRange: { start: 35, end: 45 } })
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**3. Find all assertion screenshots:**
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
// See what the screen looked like during assertions
|
|
149
|
+
list_local_screenshots({ action: "assert" })
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**4. View the final state before failure:**
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
// Get the last 5 screenshots in execution order
|
|
156
|
+
list_local_screenshots({ directory: "login.test", sortBy: "sequence", limit: 5 })
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Finding Specific Actions
|
|
160
|
+
|
|
161
|
+
When debugging element interactions:
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
// Find all click actions
|
|
165
|
+
list_local_screenshots({ action: "click" })
|
|
166
|
+
|
|
167
|
+
// Find what the screen looked like BEFORE each click
|
|
168
|
+
list_local_screenshots({ action: "click", phase: "before" })
|
|
169
|
+
|
|
170
|
+
// Find screenshots related to a specific element using regex
|
|
171
|
+
list_local_screenshots({ pattern: "submit|button" })
|
|
172
|
+
|
|
173
|
+
// Find all type actions (for form filling issues)
|
|
174
|
+
list_local_screenshots({ action: "type" })
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Understanding Test Flow
|
|
178
|
+
|
|
179
|
+
View screenshots in execution order to trace test behavior:
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
// Get screenshots in execution order
|
|
183
|
+
list_local_screenshots({ directory: "checkout.test", sortBy: "sequence" })
|
|
184
|
+
|
|
185
|
+
// Get just the first 10 actions
|
|
186
|
+
list_local_screenshots({ sequenceRange: { start: 1, end: 10 }, sortBy: "sequence" })
|
|
187
|
+
|
|
188
|
+
// Get just the last 10 actions
|
|
189
|
+
list_local_screenshots({ directory: "checkout.test", sortBy: "sequence", limit: 10 })
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Interactive Test Development
|
|
193
|
+
|
|
194
|
+
While building tests using MCP tools, view screenshots to verify your test logic:
|
|
195
|
+
|
|
196
|
+
1. **After a test run**, filter screenshots to see specific actions:
|
|
197
|
+
|
|
198
|
+
```
|
|
199
|
+
// See all assertions
|
|
200
|
+
list_local_screenshots({ action: "assert" })
|
|
201
|
+
|
|
202
|
+
// See what happened at a specific line you're debugging
|
|
203
|
+
list_local_screenshots({ line: 25 })
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
2. **Review key points** in the test execution:
|
|
207
|
+
|
|
208
|
+
```
|
|
209
|
+
view_local_screenshot({ path: ".testdriver/screenshots/my-test.test/after-login.png" })
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
3. **Verify element locations and states** before adding assertions
|
|
213
|
+
|
|
214
|
+
4. **Iterate** - adjust your test code based on what you see in the screenshots
|
|
215
|
+
|
|
216
|
+
### Comparison and Analysis
|
|
217
|
+
|
|
218
|
+
Compare screenshots to identify issues:
|
|
219
|
+
|
|
220
|
+
**Using phase filtering for before/after comparison:**
|
|
221
|
+
|
|
222
|
+
```
|
|
223
|
+
// See state before all clicks
|
|
224
|
+
list_local_screenshots({ action: "click", phase: "before" })
|
|
225
|
+
|
|
226
|
+
// See state after all clicks
|
|
227
|
+
list_local_screenshots({ action: "click", phase: "after" })
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
**Using line-based debugging:**
|
|
231
|
+
|
|
232
|
+
```
|
|
233
|
+
// Something went wrong around line 50
|
|
234
|
+
list_local_screenshots({ lineRange: { start: 45, end: 55 } })
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
**Using regex patterns:**
|
|
238
|
+
|
|
239
|
+
```
|
|
240
|
+
// Find screenshots related to login functionality
|
|
241
|
+
list_local_screenshots({ pattern: "login|signin|email|password" })
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## Best Practices
|
|
245
|
+
|
|
246
|
+
<AccordionGroup>
|
|
247
|
+
<Accordion title="Use descriptive filenames">
|
|
248
|
+
When saving screenshots in tests, use descriptive names to make them easier to identify:
|
|
249
|
+
|
|
250
|
+
```javascript
|
|
251
|
+
await testdriver.screenshot("initial-page-load");
|
|
252
|
+
await testdriver.screenshot("after-login-click");
|
|
253
|
+
await testdriver.screenshot("dashboard-loaded");
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Then when listing screenshots, you can quickly identify key moments without viewing every image.
|
|
257
|
+
</Accordion>
|
|
258
|
+
|
|
259
|
+
<Accordion title="List before viewing">
|
|
260
|
+
Always call `list_local_screenshots` first to see what's available. The list is sorted by modification time (newest first), making it easy to find recent test runs.
|
|
261
|
+
</Accordion>
|
|
262
|
+
|
|
263
|
+
<Accordion title="Filter by test file">
|
|
264
|
+
When debugging a specific test, use the `directory` parameter to filter screenshots:
|
|
265
|
+
|
|
266
|
+
```
|
|
267
|
+
list_local_screenshots({ directory: "problematic-test.test" })
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
This avoids clutter from other tests.
|
|
271
|
+
</Accordion>
|
|
272
|
+
|
|
273
|
+
<Accordion title="View screenshots before and after failures">
|
|
274
|
+
When a test fails (especially with assertions), look at screenshots immediately before the failure. They show exactly what the AI or test "saw" at that moment, helping you understand why an assertion failed or why an element wasn't found.
|
|
275
|
+
</Accordion>
|
|
276
|
+
|
|
277
|
+
<Accordion title="Combine with test reports">
|
|
278
|
+
TestDriver test reports include screenshots in the timeline. Use MCP screenshot viewing for interactive debugging during development, and test reports for post-run analysis and team sharing.
|
|
279
|
+
</Accordion>
|
|
280
|
+
|
|
281
|
+
<Accordion title="Archive important screenshots">
|
|
282
|
+
Remember that each test run clears its screenshot folder. If you need to preserve screenshots for comparison:
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
# Copy screenshots before next run
|
|
286
|
+
cp -r .testdriver/screenshots/my-test.test .testdriver/screenshots-backup/
|
|
287
|
+
```
|
|
288
|
+
</Accordion>
|
|
289
|
+
</AccordionGroup>
|
|
290
|
+
|
|
291
|
+
## Screenshot File Organization
|
|
292
|
+
|
|
293
|
+
Understanding the directory structure helps with efficient screenshot viewing:
|
|
294
|
+
|
|
295
|
+
```
|
|
296
|
+
.testdriver/
|
|
297
|
+
screenshots/
|
|
298
|
+
login.test/ # Test file name (without .mjs extension)
|
|
299
|
+
001-find-before-L15-email-input.png # Auto: before find() at line 15
|
|
300
|
+
002-find-after-L15-email-input.png # Auto: after find() at line 15
|
|
301
|
+
003-click-before-L16-email-input.png # Auto: before click() at line 16
|
|
302
|
+
004-click-after-L16-email-input.png # Auto: after click() at line 16
|
|
303
|
+
login-complete.png # Manual: screenshot("login-complete")
|
|
304
|
+
checkout.test/
|
|
305
|
+
001-find-before-L12-add-to-cart.png
|
|
306
|
+
002-find-after-L12-add-to-cart.png
|
|
307
|
+
...
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
### Automatic Screenshot Naming Format
|
|
311
|
+
|
|
312
|
+
`<seq>-<action>-<phase>-L<line>-<description>.png`
|
|
313
|
+
|
|
314
|
+
| Component | Description | Example |
|
|
315
|
+
|-----------|-------------|---------|
|
|
316
|
+
| `seq` | Sequential number | `001`, `002` |
|
|
317
|
+
| `action` | Command name | `click`, `type`, `find` |
|
|
318
|
+
| `phase` | Before, after, or error | `before`, `after`, `error` |
|
|
319
|
+
| `L<line>` | Line number from test file | `L42` |
|
|
320
|
+
| `description` | Element/action description | `submit-button` |
|
|
321
|
+
|
|
322
|
+
### Key Points
|
|
323
|
+
|
|
324
|
+
- Each test file gets its own subdirectory
|
|
325
|
+
- Automatic screenshots include line numbers for easy tracing
|
|
326
|
+
- Manual `screenshot()` calls use custom names you provide
|
|
327
|
+
- Folders are cleared at the start of each test run
|
|
328
|
+
- All screenshots are PNG format
|
|
329
|
+
- Disable automatic screenshots with `autoScreenshots: false` if needed
|
|
330
|
+
|
|
331
|
+
## Integration with Test Development
|
|
332
|
+
|
|
333
|
+
### During MCP Interactive Development
|
|
334
|
+
|
|
335
|
+
When using TestDriver MCP tools (`session_start`, `find_and_click`, etc.), screenshots are automatically captured and displayed. Additionally, you can view previously saved screenshots:
|
|
336
|
+
|
|
337
|
+
```
|
|
338
|
+
# After test development session
|
|
339
|
+
list_local_screenshots({ directory: "my-new-test.test" })
|
|
340
|
+
view_local_screenshot({ path: ".testdriver/screenshots/my-new-test.test/login-page.png" })
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
This helps verify your test logic before running the full test file.
|
|
344
|
+
|
|
345
|
+
### After Test Runs
|
|
346
|
+
|
|
347
|
+
When tests fail or behave unexpectedly:
|
|
348
|
+
|
|
349
|
+
1. **Run the test** with `vitest run tests/my-test.test.mjs`
|
|
350
|
+
2. **List screenshots** using `list_local_screenshots`
|
|
351
|
+
3. **View relevant screenshots** to diagnose the issue
|
|
352
|
+
4. **Update test code** based on what you see
|
|
353
|
+
5. **Re-run and verify** the fix
|
|
354
|
+
|
|
355
|
+
## Troubleshooting
|
|
356
|
+
|
|
357
|
+
<AccordionGroup>
|
|
358
|
+
<Accordion title="No screenshots found">
|
|
359
|
+
If `list_local_screenshots` returns an empty array:
|
|
360
|
+
|
|
361
|
+
- Ensure your test includes `await testdriver.screenshot()` calls
|
|
362
|
+
- Verify the test actually ran (check test output)
|
|
363
|
+
- Check that `.testdriver/screenshots/` directory exists
|
|
364
|
+
- Confirm you're in the correct project directory
|
|
365
|
+
</Accordion>
|
|
366
|
+
|
|
367
|
+
<Accordion title="Screenshot not displaying">
|
|
368
|
+
If `view_local_screenshot` returns an error:
|
|
369
|
+
|
|
370
|
+
- Verify the path is exactly as returned by `list_local_screenshots`
|
|
371
|
+
- Check file permissions - ensure the screenshot file is readable
|
|
372
|
+
- Confirm the file hasn't been deleted or moved
|
|
373
|
+
</Accordion>
|
|
374
|
+
|
|
375
|
+
<Accordion title="Too many screenshots">
|
|
376
|
+
If you have hundreds of screenshots making it hard to find what you need, use filtering:
|
|
377
|
+
|
|
378
|
+
- Filter by test file: `list_local_screenshots({ directory: "my-test.test" })`
|
|
379
|
+
- Filter by line number: `list_local_screenshots({ line: 42 })` or `list_local_screenshots({ lineRange: { start: 40, end: 50 } })`
|
|
380
|
+
- Filter by action: `list_local_screenshots({ action: "click" })`
|
|
381
|
+
- Filter by phase: `list_local_screenshots({ phase: "before" })`
|
|
382
|
+
- Use regex: `list_local_screenshots({ pattern: "submit|login" })`
|
|
383
|
+
- Limit results: `list_local_screenshots({ limit: 10 })`
|
|
384
|
+
- Sort by line: `list_local_screenshots({ sortBy: "line" })`
|
|
385
|
+
- Clean up old folders: `rm -rf .testdriver/screenshots/*`
|
|
386
|
+
</Accordion>
|
|
387
|
+
|
|
388
|
+
<Accordion title="Screenshots from old test runs">
|
|
389
|
+
Remember that screenshot folders are cleared at the start of each test run. If you see old screenshots:
|
|
390
|
+
|
|
391
|
+
- The test may not have run recently
|
|
392
|
+
- Or the test failed before reaching the clearing logic
|
|
393
|
+
- Manually clear: `rm -rf .testdriver/screenshots/<test-name>/`
|
|
394
|
+
</Accordion>
|
|
395
|
+
</AccordionGroup>
|
|
396
|
+
|
|
397
|
+
## Related
|
|
398
|
+
|
|
399
|
+
- [screenshot()](/v7/screenshot) - Capture screenshots during test execution
|
|
400
|
+
- [Dashcam](/v7/dashcam) - Record full test sessions with video and logs
|
|
401
|
+
- [assert()](/v7/assert) - Make AI-powered assertions that benefit from screenshot context
|