@testdriverai/agent 7.8.0-canary.10
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,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "GitHub Copilot Setup"
|
|
3
|
+
sidebarTitle: "IDE Setup"
|
|
4
|
+
description: "Install the TestDriver extension and configure MCP for GitHub Copilot"
|
|
5
|
+
icon: "wrench"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
TestDriver integrates with GitHub Copilot through the VS Code extension and MCP server. This guide walks you through the complete setup.
|
|
9
|
+
|
|
10
|
+
## Prerequisites
|
|
11
|
+
|
|
12
|
+
Before you begin, you'll need:
|
|
13
|
+
|
|
14
|
+
- **GitHub Copilot** — A subscription with MCP access. A [free tier](https://github.com/features/copilot/plans) is available.
|
|
15
|
+
- **TestDriver Account** — Create a free account at [console.testdriver.ai](https://console.testdriver.ai/team) to get your API key. 60 free device minutes, no credit card required.
|
|
16
|
+
- **VS Code** — The TestDriver extension provides the best experience with live preview and integrated test running.
|
|
17
|
+
|
|
18
|
+
## Setup Steps
|
|
19
|
+
|
|
20
|
+
<Steps>
|
|
21
|
+
<Step title="Install the TestDriver Extension">
|
|
22
|
+
<Card
|
|
23
|
+
horizontal
|
|
24
|
+
title="Install TestDriver for VS Code"
|
|
25
|
+
arrow
|
|
26
|
+
href="vscode:extension/testdriver.testdriver"
|
|
27
|
+
icon="/images/content/extension/vscode.svg"
|
|
28
|
+
></Card>
|
|
29
|
+
|
|
30
|
+
The extension provides:
|
|
31
|
+
- One-click sign-in and project initialization
|
|
32
|
+
- Live preview panel for watching tests execute
|
|
33
|
+
- MCP server configuration
|
|
34
|
+
</Step>
|
|
35
|
+
|
|
36
|
+
<Step title="Sign Into TestDriver">
|
|
37
|
+
Sign in to connect your account and API key.
|
|
38
|
+
|
|
39
|
+
1. Open the command palette (`Cmd+Shift+P` or `Ctrl+Shift+P`)
|
|
40
|
+
2. Run **TestDriver: Login**
|
|
41
|
+
3. Your browser will open to the TestDriver sign-in page
|
|
42
|
+
4. Sign in (or create an account)
|
|
43
|
+
5. You'll be redirected back to VS Code, now signed in
|
|
44
|
+
|
|
45
|
+
<Tip>
|
|
46
|
+
The extension automatically saves your API key to VS Code's secure storage and your workspace `.env` file.
|
|
47
|
+
</Tip>
|
|
48
|
+
</Step>
|
|
49
|
+
|
|
50
|
+
<Step title="Initialize Your Project">
|
|
51
|
+
Set up TestDriver in your project with a single command.
|
|
52
|
+
|
|
53
|
+
1. Open the command palette (`Cmd+Shift+P` or `Ctrl+Shift+P`)
|
|
54
|
+
2. Run **TestDriver: Init Project**
|
|
55
|
+
|
|
56
|
+
This command:
|
|
57
|
+
- Creates a `package.json` with TestDriver and Vitest dependencies
|
|
58
|
+
- Generates a `vitest.config.mjs` with proper timeout settings
|
|
59
|
+
- Creates example test files in `tests/`
|
|
60
|
+
- Sets up `.env` with your API key
|
|
61
|
+
- Creates the TestDriver agent file at `.github/agents/testdriver.agent.md`
|
|
62
|
+
- Configures the MCP server
|
|
63
|
+
|
|
64
|
+
<Note>
|
|
65
|
+
If you already have a `package.json`, the command will add the necessary dependencies to it.
|
|
66
|
+
</Note>
|
|
67
|
+
</Step>
|
|
68
|
+
|
|
69
|
+
<Step title="Start the MCP Server">
|
|
70
|
+
The MCP server enables GitHub Copilot to control TestDriver sandboxes.
|
|
71
|
+
|
|
72
|
+
After initialization, the MCP configuration is created at `.vscode/mcp.json`:
|
|
73
|
+
|
|
74
|
+
```json .vscode/mcp.json
|
|
75
|
+
{
|
|
76
|
+
"servers": {
|
|
77
|
+
"testdriver": {
|
|
78
|
+
"command": "npx",
|
|
79
|
+
"args": ["-p", "testdriverai", "testdriverai-mcp"],
|
|
80
|
+
"env": {
|
|
81
|
+
"TD_PREVIEW": "ide",
|
|
82
|
+
"TD_API_KEY": "your-api-key"
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**To start the MCP server:**
|
|
90
|
+
|
|
91
|
+
1. Open the command palette (`Cmd+Shift+P` or `Ctrl+Shift+P`)
|
|
92
|
+
2. Run **MCP: List Servers**
|
|
93
|
+
3. Click on the **testdriver** server
|
|
94
|
+
4. Select **Start Server**
|
|
95
|
+
|
|
96
|
+
You can also click the MCP icon in the status bar to manage servers.
|
|
97
|
+
|
|
98
|
+
<Tip>
|
|
99
|
+
See the [VS Code MCP documentation](https://code.visualstudio.com/docs/copilot/chat/mcp-servers) for more details on managing MCP servers.
|
|
100
|
+
</Tip>
|
|
101
|
+
|
|
102
|
+
<Warning>
|
|
103
|
+
Make sure your API key is set. The extension uses the key from your sign-in, but you can also set it via the `TD_API_KEY` environment variable.
|
|
104
|
+
</Warning>
|
|
105
|
+
</Step>
|
|
106
|
+
|
|
107
|
+
<Step title="Install Vitest Extension (Recommended)">
|
|
108
|
+
For the best experience running tests, install the Vitest extension:
|
|
109
|
+
|
|
110
|
+
<Card
|
|
111
|
+
horizontal
|
|
112
|
+
title="Vitest Extension"
|
|
113
|
+
arrow
|
|
114
|
+
href="vscode:extension/vitest.explorer"
|
|
115
|
+
icon="flask-vial"
|
|
116
|
+
>
|
|
117
|
+
Run tests with GUI mode from the Test Explorer
|
|
118
|
+
</Card>
|
|
119
|
+
|
|
120
|
+
After installation, you'll see a beaker icon in the sidebar for accessing the Test Explorer.
|
|
121
|
+
</Step>
|
|
122
|
+
</Steps>
|
|
123
|
+
|
|
124
|
+
## Verify Your Setup
|
|
125
|
+
|
|
126
|
+
To verify everything is configured correctly:
|
|
127
|
+
|
|
128
|
+
1. Open the command palette and run **TestDriver: Check Status**
|
|
129
|
+
2. You should see:
|
|
130
|
+
- ✅ Signed in
|
|
131
|
+
- ✅ MCP server configured
|
|
132
|
+
- ✅ Project initialized
|
|
133
|
+
|
|
134
|
+
## The Agent File
|
|
135
|
+
|
|
136
|
+
During initialization, TestDriver creates an agent file at `.github/agents/testdriver.agent.md`. This file tells GitHub Copilot how to use TestDriver's MCP tools.
|
|
137
|
+
|
|
138
|
+
The agent has access to tools like:
|
|
139
|
+
- `session_start` — Launch a sandbox with Chrome or other apps
|
|
140
|
+
- `find` / `click` / `type` — Interact with elements on screen
|
|
141
|
+
- `assert` — Verify conditions using AI vision
|
|
142
|
+
- `screenshot` — Capture the current screen state
|
|
143
|
+
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Customizing Devices"
|
|
3
|
+
description: "Configure TestDriver sandbox options and environment settings"
|
|
4
|
+
icon: "computer"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## TestDriver Options
|
|
8
|
+
|
|
9
|
+
Configure TestDriver behavior with options passed to the `TestDriver()` function:
|
|
10
|
+
|
|
11
|
+
```javascript
|
|
12
|
+
const testdriver = TestDriver(context, {
|
|
13
|
+
// === Sandbox & Connection ===
|
|
14
|
+
newSandbox: true, // Force creation of a new sandbox (default: true)
|
|
15
|
+
reconnect: false, // Reconnect to last sandbox (default: false)
|
|
16
|
+
keepAlive: 60000, // Keep sandbox alive after disconnect in ms (default: 60000)
|
|
17
|
+
os: "linux", // 'linux' | 'windows' (default: 'linux')
|
|
18
|
+
resolution: "1366x768", // Sandbox resolution (e.g., '1920x1080')
|
|
19
|
+
ip: "203.0.113.42", // Direct IP for self-hosted sandbox
|
|
20
|
+
sandboxAmi: "ami-1234", // Custom AMI ID (AWS deployments)
|
|
21
|
+
sandboxInstance: "i3.metal", // EC2 instance type (AWS deployments)
|
|
22
|
+
|
|
23
|
+
// === Preview & Debugging ===
|
|
24
|
+
preview: "browser", // "browser" | "ide" | "none" (default: "browser")
|
|
25
|
+
headless: false, // @deprecated - use preview: "none" instead
|
|
26
|
+
debugOnFailure: false, // Keep sandbox alive on test failure for debugging
|
|
27
|
+
|
|
28
|
+
// === Caching ===
|
|
29
|
+
cache: true, // Enable element caching (default: true)
|
|
30
|
+
// Or use advanced caching config:
|
|
31
|
+
// cache: {
|
|
32
|
+
// enabled: true,
|
|
33
|
+
// thresholds: {
|
|
34
|
+
// find: { screen: 0.05, element: 0.8 },
|
|
35
|
+
// assert: 0.05
|
|
36
|
+
// }
|
|
37
|
+
// },
|
|
38
|
+
cacheKey: "my-test", // Cache key for element finding operations
|
|
39
|
+
|
|
40
|
+
// === Recording & Screenshots ===
|
|
41
|
+
dashcam: true, // Enable/disable Dashcam video recording (default: true)
|
|
42
|
+
autoScreenshots: true, // Capture screenshots before/after each command (default: true)
|
|
43
|
+
|
|
44
|
+
// === AI Configuration ===
|
|
45
|
+
ai: { // Global AI sampling configuration
|
|
46
|
+
temperature: 0, // 0 = deterministic, higher = more creative
|
|
47
|
+
top: {
|
|
48
|
+
p: 0.9, // Top-P nucleus sampling (0-1)
|
|
49
|
+
k: 40, // Top-K sampling (1 = most likely, 0 = disabled)
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
|
|
53
|
+
// === Screen Change Detection ===
|
|
54
|
+
redraw: true, // Enable redraw detection (default: true)
|
|
55
|
+
// Or use advanced redraw config:
|
|
56
|
+
// redraw: {
|
|
57
|
+
// enabled: true,
|
|
58
|
+
// thresholds: {
|
|
59
|
+
// screen: 0.05, // Pixel diff threshold (0-1), false to disable
|
|
60
|
+
// network: false, // Monitor network activity (default: false)
|
|
61
|
+
// }
|
|
62
|
+
// },
|
|
63
|
+
|
|
64
|
+
// === Logging & Analytics ===
|
|
65
|
+
logging: true, // Enable console logging output (default: true)
|
|
66
|
+
analytics: true, // Enable analytics tracking (default: true)
|
|
67
|
+
|
|
68
|
+
// === Advanced ===
|
|
69
|
+
apiRoot: "https://...", // API endpoint URL (for self-hosted deployments)
|
|
70
|
+
environment: {}, // Additional environment variables for the sandbox
|
|
71
|
+
});
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Preview Mode
|
|
75
|
+
|
|
76
|
+
Control how test execution is visualized. The `preview` option determines where the live debugger view opens:
|
|
77
|
+
|
|
78
|
+
```javascript
|
|
79
|
+
const testdriver = TestDriver(context, {
|
|
80
|
+
preview: "browser", // Opens in default browser (default)
|
|
81
|
+
});
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
| Value | Description |
|
|
85
|
+
|-------|-------------|
|
|
86
|
+
| `"browser"` | Opens debugger in default browser (default) |
|
|
87
|
+
| `"ide"` | Opens preview in IDE panel (VSCode, Cursor - requires TestDriver extension) |
|
|
88
|
+
| `"none"` | Headless mode, no visual preview |
|
|
89
|
+
|
|
90
|
+
**IDE Preview**
|
|
91
|
+
|
|
92
|
+
For the best development experience, use `preview: "ide"` with the TestDriver extension for VSCode or Cursor:
|
|
93
|
+
|
|
94
|
+
```javascript
|
|
95
|
+
const testdriver = TestDriver(context, {
|
|
96
|
+
preview: "ide", // Opens preview in IDE panel
|
|
97
|
+
});
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Headless Mode**
|
|
101
|
+
|
|
102
|
+
Run tests without any visual preview. Useful for CI/CD pipelines:
|
|
103
|
+
|
|
104
|
+
```javascript
|
|
105
|
+
const testdriver = TestDriver(context, {
|
|
106
|
+
preview: "none", // No visual preview (headless)
|
|
107
|
+
});
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
<Note>
|
|
111
|
+
The legacy `headless: true` option still works for backward compatibility and maps to `preview: "none"`.
|
|
112
|
+
</Note>
|
|
113
|
+
|
|
114
|
+
### Debug on Failure
|
|
115
|
+
|
|
116
|
+
Keep the sandbox alive when a test fails so you can reconnect and debug interactively. The sandbox ID is printed to the console along with instructions for reconnecting via MCP.
|
|
117
|
+
|
|
118
|
+
```javascript
|
|
119
|
+
const testdriver = TestDriver(context, {
|
|
120
|
+
debugOnFailure: true,
|
|
121
|
+
});
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### IP Target
|
|
125
|
+
|
|
126
|
+
If self-hosting TestDriver, use `ip` to specify the device IP. See [Self-Hosting TestDriver](../self-hosting.md) for details.
|
|
127
|
+
|
|
128
|
+
```javascript
|
|
129
|
+
const testdriver = TestDriver(context, {
|
|
130
|
+
ip: "203.0.113.42", // Your allowlisted IP
|
|
131
|
+
});
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Operating System
|
|
135
|
+
|
|
136
|
+
Set the `os` property to run tests on a specific operating system. Available options are `linux` (default) and `windows`.
|
|
137
|
+
|
|
138
|
+
```javascript
|
|
139
|
+
const testdriver = TestDriver(context, {
|
|
140
|
+
os: "windows", // Run on Windows sandbox
|
|
141
|
+
});
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
#### Using Environment Variables
|
|
145
|
+
|
|
146
|
+
You can make the operating system configurable via environment variables. This requires adding code to read from `process.env` in your test:
|
|
147
|
+
|
|
148
|
+
```javascript
|
|
149
|
+
const testdriver = TestDriver(context, {
|
|
150
|
+
os: process.env.TD_OS || "linux", // Read from env, default to Linux
|
|
151
|
+
});
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Then pass the variable when running tests:
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
# Run tests on Windows
|
|
158
|
+
TD_OS=windows vitest run
|
|
159
|
+
|
|
160
|
+
# Run tests on Linux (default)
|
|
161
|
+
TD_OS=linux vitest run
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
This pattern is useful for running the same test suite across multiple operating systems in CI/CD:
|
|
165
|
+
|
|
166
|
+
```yaml
|
|
167
|
+
# Example GitHub Actions matrix
|
|
168
|
+
strategy:
|
|
169
|
+
matrix:
|
|
170
|
+
os: [linux, windows]
|
|
171
|
+
steps:
|
|
172
|
+
- run: TD_OS=${{ matrix.os }} vitest run
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Dashcam Recording
|
|
176
|
+
|
|
177
|
+
Dashcam video recording is enabled by default. Disable it to skip recording:
|
|
178
|
+
|
|
179
|
+
```javascript
|
|
180
|
+
const testdriver = TestDriver(context, {
|
|
181
|
+
dashcam: false,
|
|
182
|
+
});
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Automatic Screenshots
|
|
186
|
+
|
|
187
|
+
Screenshots are automatically captured before and after every command (click, type, find, assert, etc.) by default. Each screenshot filename includes the line number from your test file.
|
|
188
|
+
|
|
189
|
+
Disable automatic screenshots:
|
|
190
|
+
|
|
191
|
+
```javascript
|
|
192
|
+
const testdriver = TestDriver(context, {
|
|
193
|
+
autoScreenshots: false,
|
|
194
|
+
});
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Caching
|
|
198
|
+
|
|
199
|
+
Element caching speeds up repeated `find()` and `assert()` calls. Enabled by default.
|
|
200
|
+
|
|
201
|
+
```javascript
|
|
202
|
+
// Disable caching
|
|
203
|
+
const testdriver = TestDriver(context, {
|
|
204
|
+
cache: false,
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
// Advanced: custom thresholds
|
|
208
|
+
const testdriver = TestDriver(context, {
|
|
209
|
+
cache: {
|
|
210
|
+
enabled: true,
|
|
211
|
+
thresholds: {
|
|
212
|
+
find: { screen: 0.05, element: 0.8 },
|
|
213
|
+
assert: 0.05,
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
cacheKey: "my-test",
|
|
217
|
+
});
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Redraw Detection
|
|
221
|
+
|
|
222
|
+
Redraw detection waits for the screen to stabilize before taking actions. Enabled by default.
|
|
223
|
+
|
|
224
|
+
```javascript
|
|
225
|
+
// Disable redraw detection
|
|
226
|
+
const testdriver = TestDriver(context, {
|
|
227
|
+
redraw: false,
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
// Advanced: custom thresholds with network monitoring
|
|
231
|
+
const testdriver = TestDriver(context, {
|
|
232
|
+
redraw: {
|
|
233
|
+
enabled: true,
|
|
234
|
+
thresholds: {
|
|
235
|
+
screen: 0.05,
|
|
236
|
+
network: true,
|
|
237
|
+
},
|
|
238
|
+
},
|
|
239
|
+
});
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### AI Configuration
|
|
243
|
+
|
|
244
|
+
Control how the AI model generates responses for `find()` verification and `assert()` calls:
|
|
245
|
+
|
|
246
|
+
```javascript
|
|
247
|
+
const testdriver = TestDriver(context, {
|
|
248
|
+
ai: {
|
|
249
|
+
temperature: 0, // 0 = deterministic
|
|
250
|
+
top: { p: 0.9, k: 40 },
|
|
251
|
+
},
|
|
252
|
+
});
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### Environment Variables
|
|
256
|
+
|
|
257
|
+
Pass additional environment variables to the sandbox:
|
|
258
|
+
|
|
259
|
+
```javascript
|
|
260
|
+
const testdriver = TestDriver(context, {
|
|
261
|
+
environment: {
|
|
262
|
+
MY_VAR: "value",
|
|
263
|
+
DEBUG: "true",
|
|
264
|
+
},
|
|
265
|
+
});
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
## Keepalive
|
|
269
|
+
|
|
270
|
+
By default, sandboxes stay alive for 60 seconds after disconnect. Customize this with `keepAlive`:
|
|
271
|
+
|
|
272
|
+
```javascript
|
|
273
|
+
const testdriver = TestDriver(context, {
|
|
274
|
+
keepAlive: 300000, // Keep sandbox alive for 5 minutes after test
|
|
275
|
+
});
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Set to `0` to terminate immediately:
|
|
279
|
+
|
|
280
|
+
```javascript
|
|
281
|
+
const testdriver = TestDriver(context, {
|
|
282
|
+
keepAlive: 0, // Terminate sandbox immediately on disconnect
|
|
283
|
+
});
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### Reconnecting to Existing Sandbox
|
|
287
|
+
|
|
288
|
+
Speed up test development by reconnecting to an existing sandbox instead of starting fresh each time. This lets you iterate quickly on failing steps without re-running the entire test from the beginning.
|
|
289
|
+
|
|
290
|
+
Split your test into two files: one for known-good steps that set up the desired state, and another for work-in-progress steps you want to debug.
|
|
291
|
+
|
|
292
|
+
```javascript known-good.test.mjs
|
|
293
|
+
const testdriver = TestDriver(context, {
|
|
294
|
+
keepAlive: 60000, // Keep sandbox alive for 60 seconds after test
|
|
295
|
+
});
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
```javascript work-in-progress.test.mjs
|
|
299
|
+
// Second test file: experiment.test.mjs (run within keepAlive window)
|
|
300
|
+
const testdriver = TestDriver(context, {
|
|
301
|
+
reconnect: true, // Reconnect to existing sandbox
|
|
302
|
+
});
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
Then, you can run both tests in sequence:
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
vitest run -t known-good.test.mjs -t work-in-progress.test.mjs
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
And as you make changes to `work-in-progress.test.mjs`, you can re-run just that file to quickly iterate on the failing steps.
|
|
312
|
+
|
|
313
|
+
```bash
|
|
314
|
+
vitest run work-in-progress.test.mjs
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
<Warning>
|
|
318
|
+
Reconnect only works if run within the `keepAlive` window of the previous test.
|
|
319
|
+
</Warning>
|