@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,378 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Options"
|
|
3
|
+
description: "Configure TestDriver SDK for your testing environment"
|
|
4
|
+
icon: "gear"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
TestDriver can be configured through constructor options, environment variables, and Vitest configuration.
|
|
10
|
+
|
|
11
|
+
## Environment Variables
|
|
12
|
+
|
|
13
|
+
Set these in your `.env` file:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Required
|
|
17
|
+
TD_API_KEY=your_api_key_here
|
|
18
|
+
|
|
19
|
+
# Optional
|
|
20
|
+
TD_API_ROOT=https://api.testdriver.ai
|
|
21
|
+
TD_DEFAULT_OS=linux
|
|
22
|
+
TD_DEFAULT_RESOLUTION=1920x1080
|
|
23
|
+
TD_NO_PROMPT_CACHE=false
|
|
24
|
+
TD_NO_SELECTOR_CACHE=false
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Client Configuration
|
|
28
|
+
|
|
29
|
+
### Basic Options
|
|
30
|
+
|
|
31
|
+
```javascript
|
|
32
|
+
import TestDriver from 'testdriverai';
|
|
33
|
+
|
|
34
|
+
const client = await TestDriver.create({
|
|
35
|
+
apiKey: process.env.TD_API_KEY,
|
|
36
|
+
os: 'linux', // 'linux' | 'windows' | 'mac'
|
|
37
|
+
resolution: '1920x1080', // Any standard resolution
|
|
38
|
+
verbosity: 1, // 0 (silent) | 1 (normal) | 2 (debug)
|
|
39
|
+
});
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### All Options
|
|
43
|
+
|
|
44
|
+
```javascript
|
|
45
|
+
const client = await TestDriver.create({
|
|
46
|
+
// Authentication
|
|
47
|
+
apiKey: process.env.TD_API_KEY,
|
|
48
|
+
|
|
49
|
+
// Sandbox Configuration
|
|
50
|
+
os: 'linux',
|
|
51
|
+
resolution: '1920x1080',
|
|
52
|
+
sandboxId: null,
|
|
53
|
+
|
|
54
|
+
// API Configuration
|
|
55
|
+
apiRoot: 'https://api.testdriver.ai',
|
|
56
|
+
|
|
57
|
+
// Logging
|
|
58
|
+
verbosity: 1,
|
|
59
|
+
logging: true,
|
|
60
|
+
|
|
61
|
+
// Analytics
|
|
62
|
+
analytics: true,
|
|
63
|
+
|
|
64
|
+
// Cache Configuration
|
|
65
|
+
cacheDefaults: {
|
|
66
|
+
threshold: 0.05, // 95% similarity
|
|
67
|
+
enabled: true
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Vitest Configuration
|
|
73
|
+
|
|
74
|
+
Create or update `vitest.config.mjs`:
|
|
75
|
+
|
|
76
|
+
```javascript
|
|
77
|
+
import { defineConfig } from 'vitest/config';
|
|
78
|
+
import testDriverPlugin from 'testdriverai/interfaces/vitest-plugin.mjs';
|
|
79
|
+
import { config } from 'dotenv';
|
|
80
|
+
|
|
81
|
+
config(); // Load .env file
|
|
82
|
+
|
|
83
|
+
export default defineConfig({
|
|
84
|
+
plugins: [
|
|
85
|
+
testDriverPlugin({
|
|
86
|
+
apiKey: process.env.TD_API_KEY,
|
|
87
|
+
apiRoot: process.env.TD_API_ROOT,
|
|
88
|
+
}),
|
|
89
|
+
],
|
|
90
|
+
|
|
91
|
+
test: {
|
|
92
|
+
// Test file patterns
|
|
93
|
+
include: ['**/*.test.{js,mjs,ts}'],
|
|
94
|
+
|
|
95
|
+
// Timeout settings
|
|
96
|
+
testTimeout: 300000, // 5 minutes per test
|
|
97
|
+
hookTimeout: 300000, // 5 minutes for setup/teardown
|
|
98
|
+
teardownTimeout: 120000, // 2 minutes for teardown
|
|
99
|
+
|
|
100
|
+
// Parallel execution
|
|
101
|
+
pool: 'forks',
|
|
102
|
+
poolOptions: {
|
|
103
|
+
forks: {
|
|
104
|
+
singleFork: false,
|
|
105
|
+
maxForks: 5,
|
|
106
|
+
minForks: 1,
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
|
|
110
|
+
// Enable parallel execution
|
|
111
|
+
sequence: {
|
|
112
|
+
concurrent: true,
|
|
113
|
+
shuffle: false,
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
fileParallelism: true,
|
|
117
|
+
maxConcurrency: 5,
|
|
118
|
+
|
|
119
|
+
// Reporters
|
|
120
|
+
reporters: ['verbose'],
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Preset Configuration
|
|
126
|
+
|
|
127
|
+
### Chrome Preset
|
|
128
|
+
|
|
129
|
+
```javascript
|
|
130
|
+
import { chrome } from 'testdriverai/presets';
|
|
131
|
+
|
|
132
|
+
const { testdriver, dashcam } = await chrome(context, {
|
|
133
|
+
url: 'https://example.com',
|
|
134
|
+
dashcam: true,
|
|
135
|
+
os: 'linux',
|
|
136
|
+
resolution: '1920x1080',
|
|
137
|
+
|
|
138
|
+
// Chrome-specific options
|
|
139
|
+
incognito: false,
|
|
140
|
+
});
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### VS Code Preset
|
|
144
|
+
|
|
145
|
+
```javascript
|
|
146
|
+
import { vscode } from 'testdriverai/presets';
|
|
147
|
+
|
|
148
|
+
const { testdriver, dashcam } = await vscode(context, {
|
|
149
|
+
workspace: '/path/to/workspace',
|
|
150
|
+
extensions: ['ms-python.python'],
|
|
151
|
+
settings: {
|
|
152
|
+
'editor.fontSize': 14
|
|
153
|
+
},
|
|
154
|
+
dashcam: true,
|
|
155
|
+
});
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Electron Preset
|
|
159
|
+
|
|
160
|
+
```javascript
|
|
161
|
+
import { electron } from 'testdriverai/presets';
|
|
162
|
+
|
|
163
|
+
const { testdriver, dashcam } = await electron(context, {
|
|
164
|
+
appPath: './dist/my-app',
|
|
165
|
+
args: ['--enable-logging'],
|
|
166
|
+
dashcam: true,
|
|
167
|
+
});
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Operating System Settings
|
|
171
|
+
|
|
172
|
+
### Linux
|
|
173
|
+
|
|
174
|
+
```javascript
|
|
175
|
+
{
|
|
176
|
+
os: 'linux',
|
|
177
|
+
resolution: '1920x1080',
|
|
178
|
+
// Linux-specific environment
|
|
179
|
+
environment: {
|
|
180
|
+
DISPLAY: ':0',
|
|
181
|
+
HOME: '/home/user'
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Windows
|
|
187
|
+
|
|
188
|
+
```javascript
|
|
189
|
+
{
|
|
190
|
+
os: 'windows',
|
|
191
|
+
resolution: '1366x768',
|
|
192
|
+
// Windows-specific paths use backslashes
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### macOS
|
|
197
|
+
|
|
198
|
+
```javascript
|
|
199
|
+
{
|
|
200
|
+
os: 'mac',
|
|
201
|
+
resolution: '1920x1080',
|
|
202
|
+
// macOS-specific settings
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Cache Configuration
|
|
207
|
+
|
|
208
|
+
### Prompt Cache
|
|
209
|
+
|
|
210
|
+
Configure AI prompt caching:
|
|
211
|
+
|
|
212
|
+
```javascript
|
|
213
|
+
// Disable prompt cache globally
|
|
214
|
+
process.env.TD_NO_PROMPT_CACHE = 'true';
|
|
215
|
+
|
|
216
|
+
// Per call
|
|
217
|
+
await testdriver.ai('click button', false); // bypass cache
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Selector Cache
|
|
221
|
+
|
|
222
|
+
Configure element location caching:
|
|
223
|
+
|
|
224
|
+
```javascript
|
|
225
|
+
// Disable selector cache globally
|
|
226
|
+
process.env.TD_NO_SELECTOR_CACHE = 'true';
|
|
227
|
+
|
|
228
|
+
// Per call with custom threshold
|
|
229
|
+
await testdriver.find('button', { threshold: 0.01 }); // 99% similarity
|
|
230
|
+
await testdriver.find('button', { threshold: 0.10 }); // 90% similarity
|
|
231
|
+
await testdriver.find('button', { threshold: -1 }); // disable cache
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## Dashcam Configuration
|
|
235
|
+
|
|
236
|
+
```javascript
|
|
237
|
+
import Dashcam from 'testdriverai/lib/core/Dashcam.js';
|
|
238
|
+
|
|
239
|
+
const dashcam = new Dashcam(client, {
|
|
240
|
+
apiKey: process.env.TD_API_KEY,
|
|
241
|
+
autoStart: false,
|
|
242
|
+
logs: [
|
|
243
|
+
{
|
|
244
|
+
name: 'Application Log',
|
|
245
|
+
type: 'file',
|
|
246
|
+
path: '/tmp/app.log'
|
|
247
|
+
}
|
|
248
|
+
]
|
|
249
|
+
});
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
## Timeout Configuration
|
|
253
|
+
|
|
254
|
+
### Test Timeouts
|
|
255
|
+
|
|
256
|
+
```javascript
|
|
257
|
+
// In vitest.config.mjs
|
|
258
|
+
export default defineConfig({
|
|
259
|
+
test: {
|
|
260
|
+
testTimeout: 600000, // 10 minutes
|
|
261
|
+
hookTimeout: 600000, // 10 minutes
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Command Timeouts
|
|
267
|
+
|
|
268
|
+
```javascript
|
|
269
|
+
// exec() timeout
|
|
270
|
+
await client.exec('sh', 'long-running-command', 120000); // 2 minutes
|
|
271
|
+
|
|
272
|
+
// Find timeout (polling)
|
|
273
|
+
for (let i = 0; i < 60; i++) {
|
|
274
|
+
const element = await client.find('button');
|
|
275
|
+
if (element.found()) break;
|
|
276
|
+
await new Promise(r => setTimeout(r, 1000));
|
|
277
|
+
}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
## Best Practices
|
|
281
|
+
|
|
282
|
+
<AccordionGroup>
|
|
283
|
+
<Accordion title="Use environment variables for secrets">
|
|
284
|
+
```javascript
|
|
285
|
+
// ✅ Good
|
|
286
|
+
apiKey: process.env.TD_API_KEY
|
|
287
|
+
|
|
288
|
+
// ❌ Bad
|
|
289
|
+
apiKey: 'td_1234567890abcdef'
|
|
290
|
+
```
|
|
291
|
+
</Accordion>
|
|
292
|
+
|
|
293
|
+
<Accordion title="Set appropriate timeouts">
|
|
294
|
+
```javascript
|
|
295
|
+
// For slow operations
|
|
296
|
+
testTimeout: 600000, // 10 minutes
|
|
297
|
+
|
|
298
|
+
// For fast operations
|
|
299
|
+
testTimeout: 60000, // 1 minute
|
|
300
|
+
```
|
|
301
|
+
</Accordion>
|
|
302
|
+
|
|
303
|
+
<Accordion title="Configure caching for your needs">
|
|
304
|
+
```javascript
|
|
305
|
+
// Strict caching for stable UIs
|
|
306
|
+
threshold: 0.01 // 99% similarity
|
|
307
|
+
|
|
308
|
+
// Lenient caching for dynamic UIs
|
|
309
|
+
threshold: 0.10 // 90% similarity
|
|
310
|
+
```
|
|
311
|
+
</Accordion>
|
|
312
|
+
|
|
313
|
+
<Accordion title="Use appropriate concurrency">
|
|
314
|
+
```javascript
|
|
315
|
+
// High-end machine
|
|
316
|
+
maxConcurrency: 10
|
|
317
|
+
|
|
318
|
+
// Low-end machine or resource-intensive tests
|
|
319
|
+
maxConcurrency: 2
|
|
320
|
+
```
|
|
321
|
+
</Accordion>
|
|
322
|
+
</AccordionGroup>
|
|
323
|
+
|
|
324
|
+
## Example Configurations
|
|
325
|
+
|
|
326
|
+
### CI/CD Configuration
|
|
327
|
+
|
|
328
|
+
```javascript
|
|
329
|
+
export default defineConfig({
|
|
330
|
+
test: {
|
|
331
|
+
testTimeout: 300000,
|
|
332
|
+
maxConcurrency: 3, // Lower for CI
|
|
333
|
+
reporters: ['junit', 'json'],
|
|
334
|
+
},
|
|
335
|
+
});
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
### Local Development
|
|
339
|
+
|
|
340
|
+
```javascript
|
|
341
|
+
export default defineConfig({
|
|
342
|
+
test: {
|
|
343
|
+
testTimeout: 600000,
|
|
344
|
+
maxConcurrency: 5,
|
|
345
|
+
reporters: ['verbose'],
|
|
346
|
+
},
|
|
347
|
+
});
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### Debug Mode
|
|
351
|
+
|
|
352
|
+
```javascript
|
|
353
|
+
const client = await TestDriver.create({
|
|
354
|
+
apiKey: process.env.TD_API_KEY,
|
|
355
|
+
verbosity: 2, // Debug logging
|
|
356
|
+
logging: true,
|
|
357
|
+
});
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
## See Also
|
|
361
|
+
|
|
362
|
+
<CardGroup cols={2}>
|
|
363
|
+
<Card title="Installation" icon="download" href="/v7/getting-started/installation">
|
|
364
|
+
Install TestDriver SDK
|
|
365
|
+
</Card>
|
|
366
|
+
|
|
367
|
+
<Card title="Quick Start" icon="rocket" href="/v7/getting-started/quickstart">
|
|
368
|
+
Build your first test
|
|
369
|
+
</Card>
|
|
370
|
+
|
|
371
|
+
<Card title="Caching" icon="bolt" href="/v7/guides/caching-ai">
|
|
372
|
+
Configure caching
|
|
373
|
+
</Card>
|
|
374
|
+
|
|
375
|
+
<Card title="Client API" icon="plug" href="/v7/api/client">
|
|
376
|
+
Full client reference
|
|
377
|
+
</Card>
|
|
378
|
+
</CardGroup>
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
## Setup `testdriverai` repo
|
|
4
|
+
|
|
5
|
+
1. `gh repo clone testdriverai/testdriverai`
|
|
6
|
+
1. `npm install` project dependencies
|
|
7
|
+
1. `npm link`
|
|
8
|
+
|
|
9
|
+
## Setting up a Test Project
|
|
10
|
+
|
|
11
|
+
1. `cd $(mktemp -d)` to create a blank project
|
|
12
|
+
1. `npm link testdriverai`
|
|
13
|
+
1. `npx testdriverai init`
|
|
14
|
+
|
|
15
|
+
> Spawning GUI...
|
|
16
|
+
> Howdy! I'm TestDriver v4.2.29
|
|
17
|
+
> Working on **/private/var/folders/4w/\_l20wtfj41n2dx0xyhb8xd740000gn/T/tmp.PDxTlOLJBS/testdriver/testdriver.yml**
|
|
18
|
+
> ...
|
|
19
|
+
|
|
20
|
+
1. `npx testdriverai testdriver/test.yml`
|
|
21
|
+
|
|
22
|
+
## Architecture Diagram
|
|
23
|
+
|
|
24
|
+
```mermaid
|
|
25
|
+
graph TD
|
|
26
|
+
A[CLI Entry: npx testdriverai run test.yaml --heal --write] --> B[index.js]
|
|
27
|
+
B --> C{Check Args}
|
|
28
|
+
C -->|--renderer| D[Overlay Mode]
|
|
29
|
+
C -->|Other| E[agent.js]
|
|
30
|
+
|
|
31
|
+
E --> F[Parse Arguments]
|
|
32
|
+
F --> G[Load Configuration]
|
|
33
|
+
G --> H[Initialize SDK]
|
|
34
|
+
H --> I[Load YAML File]
|
|
35
|
+
|
|
36
|
+
I --> J{Command Type}
|
|
37
|
+
J -->|run| K[Execute Commands]
|
|
38
|
+
J -->|edit| L[Interactive Mode]
|
|
39
|
+
J -->|init| M[Setup Project]
|
|
40
|
+
|
|
41
|
+
K --> N[Parse YAML Commands]
|
|
42
|
+
N --> O[Execute Each Command]
|
|
43
|
+
O --> P[commands.js]
|
|
44
|
+
|
|
45
|
+
P --> Q{Command Type}
|
|
46
|
+
Q -->|hover-text| R[AI Vision API]
|
|
47
|
+
Q -->|type| S[Keyboard Input]
|
|
48
|
+
Q -->|click| T[Mouse Control]
|
|
49
|
+
Q -->|assert| U[Validation]
|
|
50
|
+
Q -->|exec| V[System Commands]
|
|
51
|
+
|
|
52
|
+
R --> W[Capture Screen]
|
|
53
|
+
W --> X[Send to Backend]
|
|
54
|
+
X --> Y[Get Coordinates]
|
|
55
|
+
Y --> Z[Execute Action]
|
|
56
|
+
|
|
57
|
+
L --> AA[Read User Input]
|
|
58
|
+
AA --> BB[Generate AI Response]
|
|
59
|
+
BB --> CC[Parse Markdown]
|
|
60
|
+
CC --> DD[Extract YAML]
|
|
61
|
+
DD --> EE[Add to File]
|
|
62
|
+
|
|
63
|
+
M --> FF[Create .env]
|
|
64
|
+
FF --> GG[Setup GitHub Actions]
|
|
65
|
+
GG --> HH[Download Workflows]
|
|
66
|
+
|
|
67
|
+
subgraph "Key Files"
|
|
68
|
+
II[index.js - Entry Point]
|
|
69
|
+
JJ[agent.js - Main Logic]
|
|
70
|
+
KK[lib/commands.js - Command Execution]
|
|
71
|
+
LL[lib/parser.js - YAML Parsing]
|
|
72
|
+
MM[lib/sdk.js - API Communication]
|
|
73
|
+
NN[lib/config.js - Configuration]
|
|
74
|
+
OO[lib/generator.js - YAML Generation]
|
|
75
|
+
end
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Network Diagram
|
|
79
|
+
|
|
80
|
+
```mermaid
|
|
81
|
+
sequenceDiagram
|
|
82
|
+
participant CLI as testdriverai CLI
|
|
83
|
+
participant Config as Config Manager
|
|
84
|
+
participant SDK as SDK Module
|
|
85
|
+
participant API as TestDriver API
|
|
86
|
+
participant Sandbox as VM Sandbox
|
|
87
|
+
participant YAML as YAML File
|
|
88
|
+
|
|
89
|
+
Note over CLI, YAML: Authentication Flow
|
|
90
|
+
CLI->>Config: Load TD_API_KEY from .env
|
|
91
|
+
Config->>SDK: Initialize with API key
|
|
92
|
+
SDK->>API: POST /auth/exchange-api-key
|
|
93
|
+
API->>SDK: Return Bearer Token
|
|
94
|
+
SDK->>SDK: Store token for future requests
|
|
95
|
+
|
|
96
|
+
Note over CLI, YAML: Session Management
|
|
97
|
+
CLI->>SDK: Start new session
|
|
98
|
+
SDK->>API: POST /api/v5/testdriver/session/start
|
|
99
|
+
API->>SDK: Return session ID
|
|
100
|
+
SDK->>YAML: Update session ID in file
|
|
101
|
+
|
|
102
|
+
Note over CLI, YAML: Command Execution Flow
|
|
103
|
+
CLI->>YAML: Load test commands
|
|
104
|
+
YAML->>CLI: Return parsed YAML
|
|
105
|
+
|
|
106
|
+
loop For each command
|
|
107
|
+
CLI->>SDK: Execute command (e.g., hover-text)
|
|
108
|
+
SDK->>CLI: Capture screen
|
|
109
|
+
CLI->>SDK: Send screenshot + prompt
|
|
110
|
+
SDK->>API: POST /api/v5/testdriver/hover/text
|
|
111
|
+
API->>SDK: Return coordinates + confidence
|
|
112
|
+
SDK->>CLI: Execute action (click, type, etc.)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
Note over CLI, YAML: AI-Powered Command Generation
|
|
116
|
+
CLI->>CLI: User enters natural language prompt
|
|
117
|
+
CLI->>SDK: Send prompt + screenshot
|
|
118
|
+
SDK->>API: POST /api/v5/testdriver/generate
|
|
119
|
+
API->>SDK: Return markdown with YAML codeblocks
|
|
120
|
+
SDK->>CLI: Parse markdown response
|
|
121
|
+
CLI->>YAML: Extract and add new commands
|
|
122
|
+
|
|
123
|
+
Note over CLI, YAML: Sandbox Mode (Optional)
|
|
124
|
+
CLI->>Config: Check TD_VM setting
|
|
125
|
+
Config->>Sandbox: Initialize WebSocket connection
|
|
126
|
+
Sandbox->>API: WSS connection to api.testdriver.ai
|
|
127
|
+
API->>Sandbox: Authenticate with API key
|
|
128
|
+
Sandbox->>API: Create VM instance
|
|
129
|
+
API->>Sandbox: Return VM URL
|
|
130
|
+
Sandbox->>CLI: Stream VM display
|
|
131
|
+
|
|
132
|
+
Note over CLI, YAML: File Operations
|
|
133
|
+
CLI->>YAML: Save updated commands
|
|
134
|
+
YAML->>CLI: Write to testdriver/test.yaml
|
|
135
|
+
CLI->>CLI: Update version and session info
|
|
136
|
+
|
|
137
|
+
Note over CLI, YAML: Error Handling & Healing
|
|
138
|
+
CLI->>CLI: Command fails
|
|
139
|
+
CLI->>SDK: Send error + context
|
|
140
|
+
SDK->>API: POST error details
|
|
141
|
+
API->>SDK: Return suggested fix
|
|
142
|
+
SDK->>CLI: Apply auto-healing
|
|
143
|
+
CLI->>YAML: Update commands if needed
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Testing against local `api`
|
|
147
|
+
|
|
148
|
+
When running [replayableio/api](https://github.com/replayableio/api/) locally, specify `TD_API_ROOT` in your `.env` file or shell:
|
|
149
|
+
|
|
150
|
+
```sh
|
|
151
|
+
TD_API_ROOT=http://localhost:1337 npx testdriverai
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Logging
|
|
155
|
+
|
|
156
|
+
- `DEV` to log the config
|
|
157
|
+
- `VERBOSE` to log `logger.debug` (Default: `logger.info` and above)
|
|
158
|
+
|
|
159
|
+
```sh
|
|
160
|
+
DEV=true VERBOSE=true npx testdriverai
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Debugging with Chrome Node Inspector
|
|
164
|
+
|
|
165
|
+
> https://nodejs.org/en/learn/getting-started/debugging
|
|
166
|
+
|
|
167
|
+
```sh
|
|
168
|
+
npx --node-options=--inspect testdriverai init
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Event Principles
|
|
172
|
+
|
|
173
|
+
- Events represent changes to the state of the system
|
|
174
|
+
- Execution is functional and should not be mutated by events
|