@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,135 @@
|
|
|
1
|
+
# TestDriver v7 SDK Documentation
|
|
2
|
+
|
|
3
|
+
This directory contains the documentation for TestDriver v7, which introduces the JavaScript SDK as the primary interface for writing tests.
|
|
4
|
+
|
|
5
|
+
## Structure
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
v7/
|
|
9
|
+
├── getting-started/
|
|
10
|
+
│ └── quickstart.mdx # Quick start guide for the SDK
|
|
11
|
+
├── api/
|
|
12
|
+
│ ├── client.mdx # TestDriver client initialization and connection
|
|
13
|
+
│ ├── elements.mdx # Element finding and interaction
|
|
14
|
+
│ ├── sandbox.mdx # Sandbox management and script execution
|
|
15
|
+
│ ├── interactions.mdx # Keyboard, mouse, and scrolling
|
|
16
|
+
│ └── assertions.mdx # AI-powered assertions and testing
|
|
17
|
+
└── guides/
|
|
18
|
+
└── migration.mdx # Migration guide from YAML to SDK
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Documentation Coverage
|
|
22
|
+
|
|
23
|
+
### Getting Started
|
|
24
|
+
- **Quickstart**: Complete setup and first test example using the `assert.test.mjs` pattern
|
|
25
|
+
- Installation
|
|
26
|
+
- Authentication
|
|
27
|
+
- Basic test structure with Vitest
|
|
28
|
+
- Sandbox connection
|
|
29
|
+
|
|
30
|
+
### API Reference
|
|
31
|
+
|
|
32
|
+
#### Client (`/v7/api/client.mdx`)
|
|
33
|
+
- Constructor and initialization
|
|
34
|
+
- `auth()` - Authentication
|
|
35
|
+
- `connect()` - Sandbox connection with all options
|
|
36
|
+
- `disconnect()` - Cleanup
|
|
37
|
+
- Instance management (`getInstance()`, `getSessionId()`)
|
|
38
|
+
- Logging and events (`setLogging()`, `getEmitter()`)
|
|
39
|
+
|
|
40
|
+
#### Elements (`/v7/api/elements.mdx`)
|
|
41
|
+
- `find()` - AI-powered element location
|
|
42
|
+
- Element class methods:
|
|
43
|
+
- `found()` - Check if located
|
|
44
|
+
- `click()`, `hover()`, `doubleClick()`, `rightClick()`
|
|
45
|
+
- `mouseDown()`, `mouseUp()` - For drag operations
|
|
46
|
+
- Element properties:
|
|
47
|
+
- Coordinates (`x`, `y`, `centerX`, `centerY`)
|
|
48
|
+
- Visual data (`screenshot`, `width`, `height`, `boundingBox`)
|
|
49
|
+
- Content (`text`, `label`, `confidence`)
|
|
50
|
+
- Polling patterns for dynamic elements
|
|
51
|
+
|
|
52
|
+
#### Sandbox (`/v7/api/sandbox.mdx`)
|
|
53
|
+
- `exec()` - Execute code in sandbox
|
|
54
|
+
- JavaScript execution (browser context)
|
|
55
|
+
- PowerShell execution (Windows commands)
|
|
56
|
+
- `focusApplication()` - Window management
|
|
57
|
+
- Common operations:
|
|
58
|
+
- Software installation
|
|
59
|
+
- File operations
|
|
60
|
+
- Environment variables
|
|
61
|
+
- Network operations
|
|
62
|
+
- Process management
|
|
63
|
+
- Browser automation
|
|
64
|
+
|
|
65
|
+
#### Interactions (`/v7/api/interactions.mdx`)
|
|
66
|
+
- `type()` - Text input
|
|
67
|
+
- `pressKeys()` - Keyboard shortcuts and special keys
|
|
68
|
+
- `click()` / `hover()` - Coordinate-based mouse actions
|
|
69
|
+
- `scroll()` - Page scrolling
|
|
70
|
+
- `scrollUntilText()` / `scrollUntilImage()` - Scroll until found
|
|
71
|
+
- Keyboard key reference
|
|
72
|
+
|
|
73
|
+
#### Assertions (`/v7/api/assertions.mdx`)
|
|
74
|
+
- `assert()` - AI-powered assertions
|
|
75
|
+
- Basic assertions
|
|
76
|
+
- Negative assertions (invert parameter)
|
|
77
|
+
- Async assertions
|
|
78
|
+
- `extract()` - Extract information from screen
|
|
79
|
+
- Testing patterns:
|
|
80
|
+
- Polling assertions
|
|
81
|
+
- Multi-step validation
|
|
82
|
+
- Soft assertions
|
|
83
|
+
- Best practices
|
|
84
|
+
|
|
85
|
+
### Guides
|
|
86
|
+
|
|
87
|
+
#### Migration (`/v7/guides/migration.mdx`)
|
|
88
|
+
- Why migrate from YAML to SDK
|
|
89
|
+
- Basic structure comparison
|
|
90
|
+
- Complete command mapping:
|
|
91
|
+
- Element location
|
|
92
|
+
- Typing and keyboard
|
|
93
|
+
- Scrolling
|
|
94
|
+
- Assertions
|
|
95
|
+
- Code execution
|
|
96
|
+
- Application focus
|
|
97
|
+
- Advanced patterns:
|
|
98
|
+
- Variables and data reuse
|
|
99
|
+
- Conditional logic
|
|
100
|
+
- Loops
|
|
101
|
+
- Data-driven tests
|
|
102
|
+
- Lifecycle hooks comparison
|
|
103
|
+
- Migration checklist
|
|
104
|
+
- Common pitfalls
|
|
105
|
+
- Complete example migration
|
|
106
|
+
|
|
107
|
+
## Integration with docs.json
|
|
108
|
+
|
|
109
|
+
The v7 documentation is integrated into `docs/docs.json` under the "Computer-Use SDK" tab with version "7.0.0 (SDK)", distinguishing it from the YAML-based "6.X.X (YAML)" documentation.
|
|
110
|
+
|
|
111
|
+
## Examples Used
|
|
112
|
+
|
|
113
|
+
The documentation uses examples from:
|
|
114
|
+
- `testdriver/acceptance-sdk/assert.test.mjs` - Basic assertion test
|
|
115
|
+
- `testdriver/acceptance-sdk/type.test.mjs` - Typing and form interaction
|
|
116
|
+
- `testdriver/acceptance-sdk/focus-window.test.mjs` - Application focus
|
|
117
|
+
- Other SDK test files for complete examples
|
|
118
|
+
|
|
119
|
+
## Key Documentation Features
|
|
120
|
+
|
|
121
|
+
1. **Practical Examples**: Every method includes working code examples
|
|
122
|
+
2. **Best Practices**: Accordion sections with tips and patterns
|
|
123
|
+
3. **Migration Support**: Complete YAML-to-SDK migration guide
|
|
124
|
+
4. **Type Safety**: Parameter documentation with types
|
|
125
|
+
5. **Real Test Patterns**: Examples based on actual test files
|
|
126
|
+
6. **Comprehensive Coverage**: All major SDK features documented
|
|
127
|
+
|
|
128
|
+
## Next Steps
|
|
129
|
+
|
|
130
|
+
Consider adding:
|
|
131
|
+
- `/v7/guides/best-practices.mdx` - Detailed best practices
|
|
132
|
+
- `/v7/guides/examples.mdx` - Complete test suite examples
|
|
133
|
+
- `/v7/guides/debugging.mdx` - Debugging techniques
|
|
134
|
+
- `/v7/guides/ci-cd.mdx` - CI/CD integration guide
|
|
135
|
+
- `/v7/api/keyboard-keys.mdx` - Complete keyboard key reference
|
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Test Reports & Analytics"
|
|
3
|
+
description: "Comprehensive test reporting and analytics for teams"
|
|
4
|
+
icon: "chart-line"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
TestDriver provides detailed test reports and analytics through the web dashboard at [app.testdriver.ai](https://app.testdriver.ai), giving you complete visibility into test runs, failures, and trends.
|
|
8
|
+
|
|
9
|
+
## Web Dashboard
|
|
10
|
+
|
|
11
|
+
Access comprehensive test analytics and reports:
|
|
12
|
+
|
|
13
|
+
<Card title="TestDriver Dashboard" icon="chart-simple" href="https://app.testdriver.ai">
|
|
14
|
+
View all test runs, replays, and analytics at app.testdriver.ai
|
|
15
|
+
</Card>
|
|
16
|
+
|
|
17
|
+
### Dashboard Features
|
|
18
|
+
|
|
19
|
+
<CardGroup cols={2}>
|
|
20
|
+
<Card title="Test Runs" icon="list">
|
|
21
|
+
- All test executions
|
|
22
|
+
- Pass/fail status
|
|
23
|
+
- Duration and timing
|
|
24
|
+
- Filter by date, project, or status
|
|
25
|
+
</Card>
|
|
26
|
+
|
|
27
|
+
<Card title="Dashcam Replays" icon="video">
|
|
28
|
+
- Video replays of every test
|
|
29
|
+
- Step-by-step action logs
|
|
30
|
+
- Screenshots at each step
|
|
31
|
+
- Shareable replay links
|
|
32
|
+
</Card>
|
|
33
|
+
|
|
34
|
+
<Card title="Analytics" icon="chart-line">
|
|
35
|
+
- Success rate trends
|
|
36
|
+
- Test duration over time
|
|
37
|
+
- Flaky test detection
|
|
38
|
+
- Cache hit rates
|
|
39
|
+
</Card>
|
|
40
|
+
|
|
41
|
+
<Card title="Team Collaboration" icon="users">
|
|
42
|
+
- Share replays with team
|
|
43
|
+
- Comment on test runs
|
|
44
|
+
- Tag team members
|
|
45
|
+
- Export reports
|
|
46
|
+
</Card>
|
|
47
|
+
</CardGroup>
|
|
48
|
+
|
|
49
|
+
## Test Run Details
|
|
50
|
+
|
|
51
|
+
Each test run includes comprehensive information:
|
|
52
|
+
|
|
53
|
+
```javascript
|
|
54
|
+
import { test } from 'vitest';
|
|
55
|
+
import { chrome } from 'testdriverai/presets';
|
|
56
|
+
|
|
57
|
+
test('detailed test run', async (context) => {
|
|
58
|
+
const { testdriver, dashcam } = await chrome(context, {
|
|
59
|
+
url: 'https://example.com'
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
await testdriver.find('login button').click();
|
|
63
|
+
await testdriver.assert('login form is visible');
|
|
64
|
+
|
|
65
|
+
// After test completes, view detailed report at:
|
|
66
|
+
console.log('Replay URL:', dashcam.url);
|
|
67
|
+
// https://app.testdriver.ai/replay/abc123
|
|
68
|
+
});
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Available Report Data
|
|
72
|
+
|
|
73
|
+
<AccordionGroup>
|
|
74
|
+
<Accordion title="Execution Details">
|
|
75
|
+
- Test name and file
|
|
76
|
+
- Start and end time
|
|
77
|
+
- Total duration
|
|
78
|
+
- Pass/fail status
|
|
79
|
+
- Error messages and stack traces
|
|
80
|
+
- Exit code
|
|
81
|
+
</Accordion>
|
|
82
|
+
|
|
83
|
+
<Accordion title="Action Log">
|
|
84
|
+
- Every TestDriver command executed
|
|
85
|
+
- Timestamp for each action
|
|
86
|
+
- AI vision analysis results
|
|
87
|
+
- Element coordinates found
|
|
88
|
+
- Screenshots before/after each action
|
|
89
|
+
</Accordion>
|
|
90
|
+
|
|
91
|
+
<Accordion title="Performance Metrics">
|
|
92
|
+
- Time per command
|
|
93
|
+
- AI inference latency
|
|
94
|
+
- Cache hit/miss ratio
|
|
95
|
+
- Network request timing
|
|
96
|
+
- Screenshot capture time
|
|
97
|
+
</Accordion>
|
|
98
|
+
|
|
99
|
+
<Accordion title="Environment Info">
|
|
100
|
+
- Operating system
|
|
101
|
+
- Browser version
|
|
102
|
+
- Screen resolution
|
|
103
|
+
- Sandbox ID
|
|
104
|
+
- API version
|
|
105
|
+
</Accordion>
|
|
106
|
+
</AccordionGroup>
|
|
107
|
+
|
|
108
|
+
## JUnit XML Reports
|
|
109
|
+
|
|
110
|
+
Generate JUnit-compatible XML reports for CI/CD integration:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# Generate JUnit report
|
|
114
|
+
vitest run --reporter=junit --outputFile=test-results.xml
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
```xml test-results.xml
|
|
118
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
119
|
+
<testsuites name="vitest tests" tests="12" failures="1" errors="0" time="125.3">
|
|
120
|
+
<testsuite name="login.test.js" tests="3" failures="1" time="31.2">
|
|
121
|
+
<testcase name="user can login" time="12.4" />
|
|
122
|
+
<testcase name="invalid credentials show error" time="9.8">
|
|
123
|
+
<failure message="AssertionError: expected login to fail">
|
|
124
|
+
Stack trace details...
|
|
125
|
+
</failure>
|
|
126
|
+
</testcase>
|
|
127
|
+
<testcase name="password reset works" time="9.0" />
|
|
128
|
+
</testsuite>
|
|
129
|
+
</testsuites>
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
<Check>
|
|
133
|
+
JUnit reports integrate with Jenkins, Azure DevOps, TeamCity, CircleCI, and GitHub Actions for test result visualization.
|
|
134
|
+
</Check>
|
|
135
|
+
|
|
136
|
+
## CI/CD Integration
|
|
137
|
+
|
|
138
|
+
TestDriver reports integrate seamlessly with popular CI/CD platforms:
|
|
139
|
+
|
|
140
|
+
<Tabs>
|
|
141
|
+
<Tab title="GitHub Actions">
|
|
142
|
+
```yaml .github/workflows/test.yml
|
|
143
|
+
name: E2E Tests
|
|
144
|
+
|
|
145
|
+
on: [push, pull_request]
|
|
146
|
+
|
|
147
|
+
jobs:
|
|
148
|
+
test:
|
|
149
|
+
runs-on: ubuntu-latest
|
|
150
|
+
steps:
|
|
151
|
+
- uses: actions/checkout@v3
|
|
152
|
+
- uses: actions/setup-node@v3
|
|
153
|
+
- run: npm install
|
|
154
|
+
- run: vitest run --reporter=junit --outputFile=test-results.xml
|
|
155
|
+
env:
|
|
156
|
+
TD_API_KEY: ${{ secrets.TD_API_KEY }}
|
|
157
|
+
|
|
158
|
+
# Upload test results
|
|
159
|
+
- uses: actions/upload-artifact@v3
|
|
160
|
+
if: always()
|
|
161
|
+
with:
|
|
162
|
+
name: test-results
|
|
163
|
+
path: test-results.xml
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Test results appear in the GitHub Actions UI with pass/fail status.
|
|
167
|
+
</Tab>
|
|
168
|
+
|
|
169
|
+
<Tab title="GitLab CI">
|
|
170
|
+
```yaml .gitlab-ci.yml
|
|
171
|
+
test:
|
|
172
|
+
image: node:20
|
|
173
|
+
script:
|
|
174
|
+
- npm install
|
|
175
|
+
- vitest run --reporter=junit --outputFile=junit.xml
|
|
176
|
+
artifacts:
|
|
177
|
+
when: always
|
|
178
|
+
reports:
|
|
179
|
+
junit: junit.xml
|
|
180
|
+
variables:
|
|
181
|
+
TD_API_KEY: $TD_API_KEY
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
GitLab automatically parses JUnit reports and displays test results in merge requests.
|
|
185
|
+
</Tab>
|
|
186
|
+
|
|
187
|
+
<Tab title="CircleCI">
|
|
188
|
+
```yaml .circleci/config.yml
|
|
189
|
+
version: 2.1
|
|
190
|
+
jobs:
|
|
191
|
+
test:
|
|
192
|
+
docker:
|
|
193
|
+
- image: cimg/node:20.0
|
|
194
|
+
steps:
|
|
195
|
+
- checkout
|
|
196
|
+
- run: npm install
|
|
197
|
+
- run: vitest run --reporter=junit --outputFile=test-results/junit.xml
|
|
198
|
+
- store_test_results:
|
|
199
|
+
path: test-results
|
|
200
|
+
- store_artifacts:
|
|
201
|
+
path: test-results
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
CircleCI displays test insights on the Tests tab.
|
|
205
|
+
</Tab>
|
|
206
|
+
|
|
207
|
+
<Tab title="Jenkins">
|
|
208
|
+
```groovy Jenkinsfile
|
|
209
|
+
pipeline {
|
|
210
|
+
agent any
|
|
211
|
+
stages {
|
|
212
|
+
stage('Test') {
|
|
213
|
+
steps {
|
|
214
|
+
sh 'npm install'
|
|
215
|
+
sh 'vitest run --reporter=junit --outputFile=test-results.xml'
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
post {
|
|
220
|
+
always {
|
|
221
|
+
junit 'test-results.xml'
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Jenkins publishes test results with trends and history.
|
|
228
|
+
</Tab>
|
|
229
|
+
</Tabs>
|
|
230
|
+
|
|
231
|
+
## Custom Reporting
|
|
232
|
+
|
|
233
|
+
Access raw test data programmatically:
|
|
234
|
+
|
|
235
|
+
```javascript
|
|
236
|
+
import { test } from 'vitest';
|
|
237
|
+
import { chrome } from 'testdriverai/presets';
|
|
238
|
+
import fs from 'fs';
|
|
239
|
+
|
|
240
|
+
test('custom reporting', async (context) => {
|
|
241
|
+
const { testdriver, dashcam } = await chrome(context, {
|
|
242
|
+
url: 'https://example.com'
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
const startTime = Date.now();
|
|
246
|
+
|
|
247
|
+
await testdriver.find('button').click();
|
|
248
|
+
await testdriver.assert('page loaded');
|
|
249
|
+
|
|
250
|
+
const duration = Date.now() - startTime;
|
|
251
|
+
|
|
252
|
+
// Build custom report
|
|
253
|
+
const report = {
|
|
254
|
+
testName: 'custom reporting',
|
|
255
|
+
duration,
|
|
256
|
+
replayUrl: dashcam.url,
|
|
257
|
+
status: 'passed',
|
|
258
|
+
timestamp: new Date().toISOString()
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
// Save to custom format
|
|
262
|
+
fs.writeFileSync(
|
|
263
|
+
'custom-report.json',
|
|
264
|
+
JSON.stringify(report, null, 2)
|
|
265
|
+
);
|
|
266
|
+
});
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
## Analytics & Trends
|
|
270
|
+
|
|
271
|
+
View historical trends in the web dashboard:
|
|
272
|
+
|
|
273
|
+
<CardGroup cols={2}>
|
|
274
|
+
<Card title="Success Rate" icon="percent">
|
|
275
|
+
Track test stability over time
|
|
276
|
+
- Daily/weekly/monthly success rates
|
|
277
|
+
- Identify flaky tests
|
|
278
|
+
- Compare across branches
|
|
279
|
+
</Card>
|
|
280
|
+
|
|
281
|
+
<Card title="Performance Trends" icon="gauge">
|
|
282
|
+
Monitor test performance
|
|
283
|
+
- Average test duration
|
|
284
|
+
- Slowest tests
|
|
285
|
+
- Cache effectiveness
|
|
286
|
+
</Card>
|
|
287
|
+
|
|
288
|
+
<Card title="Usage Metrics" icon="chart-bar">
|
|
289
|
+
Track team usage
|
|
290
|
+
- Tests run per day
|
|
291
|
+
- Active team members
|
|
292
|
+
- API usage
|
|
293
|
+
</Card>
|
|
294
|
+
|
|
295
|
+
<Card title="Cost Analysis" icon="dollar-sign">
|
|
296
|
+
Optimize spending
|
|
297
|
+
- Cost per test
|
|
298
|
+
- Sandbox usage
|
|
299
|
+
- Cache savings
|
|
300
|
+
</Card>
|
|
301
|
+
</CardGroup>
|
|
302
|
+
|
|
303
|
+
## Export Options
|
|
304
|
+
|
|
305
|
+
Download reports in multiple formats:
|
|
306
|
+
|
|
307
|
+
<Tabs>
|
|
308
|
+
<Tab title="JSON">
|
|
309
|
+
```json
|
|
310
|
+
{
|
|
311
|
+
"testRuns": [
|
|
312
|
+
{
|
|
313
|
+
"id": "run_abc123",
|
|
314
|
+
"name": "login test",
|
|
315
|
+
"status": "passed",
|
|
316
|
+
"duration": 12400,
|
|
317
|
+
"timestamp": "2024-12-09T10:30:00Z",
|
|
318
|
+
"replayUrl": "https://app.testdriver.ai/replay/abc123"
|
|
319
|
+
}
|
|
320
|
+
],
|
|
321
|
+
"summary": {
|
|
322
|
+
"total": 100,
|
|
323
|
+
"passed": 95,
|
|
324
|
+
"failed": 5,
|
|
325
|
+
"successRate": 0.95
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
```
|
|
329
|
+
</Tab>
|
|
330
|
+
|
|
331
|
+
<Tab title="CSV">
|
|
332
|
+
```csv
|
|
333
|
+
Test Name,Status,Duration (ms),Timestamp,Replay URL
|
|
334
|
+
login test,passed,12400,2024-12-09T10:30:00Z,https://app.testdriver.ai/replay/abc123
|
|
335
|
+
checkout test,passed,18200,2024-12-09T10:31:00Z,https://app.testdriver.ai/replay/def456
|
|
336
|
+
search test,failed,5600,2024-12-09T10:32:00Z,https://app.testdriver.ai/replay/ghi789
|
|
337
|
+
```
|
|
338
|
+
</Tab>
|
|
339
|
+
|
|
340
|
+
<Tab title="PDF">
|
|
341
|
+
Generate PDF reports with:
|
|
342
|
+
- Executive summary
|
|
343
|
+
- Test results table
|
|
344
|
+
- Embedded screenshots
|
|
345
|
+
- Trend charts
|
|
346
|
+
- Recommendations
|
|
347
|
+
</Tab>
|
|
348
|
+
</Tabs>
|
|
349
|
+
|
|
350
|
+
## Slack/Teams Integration
|
|
351
|
+
|
|
352
|
+
Get test notifications in your team chat:
|
|
353
|
+
|
|
354
|
+
```yaml .github/workflows/test.yml
|
|
355
|
+
- name: Notify Slack
|
|
356
|
+
if: failure()
|
|
357
|
+
uses: slackapi/slack-github-action@v1
|
|
358
|
+
with:
|
|
359
|
+
payload: |
|
|
360
|
+
{
|
|
361
|
+
"text": "E2E Tests Failed",
|
|
362
|
+
"blocks": [
|
|
363
|
+
{
|
|
364
|
+
"type": "section",
|
|
365
|
+
"text": {
|
|
366
|
+
"type": "mrkdwn",
|
|
367
|
+
"text": "❌ E2E tests failed on ${{ github.ref }}\n<${{ env.REPLAY_URL }}|View Replay>"
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
]
|
|
371
|
+
}
|
|
372
|
+
env:
|
|
373
|
+
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
<Card title="Notifications Setup" icon="bell" href="/v7/guides/notifications">
|
|
377
|
+
Configure Slack, Teams, Discord, and email notifications
|
|
378
|
+
</Card>
|
|
379
|
+
|
|
380
|
+
## Learn More
|
|
381
|
+
|
|
382
|
+
<CardGroup cols={2}>
|
|
383
|
+
<Card
|
|
384
|
+
title="Observability & Debugging"
|
|
385
|
+
icon="microscope"
|
|
386
|
+
href="/v7/features/observable"
|
|
387
|
+
>
|
|
388
|
+
Learn about Dashcam replays and debugging
|
|
389
|
+
</Card>
|
|
390
|
+
|
|
391
|
+
<Card
|
|
392
|
+
title="Continuous Testing"
|
|
393
|
+
icon="arrows-spin"
|
|
394
|
+
href="/v7/features/continuous-testing"
|
|
395
|
+
>
|
|
396
|
+
CI/CD integration guide
|
|
397
|
+
</Card>
|
|
398
|
+
|
|
399
|
+
<Card
|
|
400
|
+
title="Dashboard"
|
|
401
|
+
icon="chart-simple"
|
|
402
|
+
href="https://app.testdriver.ai"
|
|
403
|
+
>
|
|
404
|
+
View your test reports
|
|
405
|
+
</Card>
|
|
406
|
+
|
|
407
|
+
<Card
|
|
408
|
+
title="API Documentation"
|
|
409
|
+
icon="code"
|
|
410
|
+
href="/v7/api/overview"
|
|
411
|
+
>
|
|
412
|
+
Programmatic access to reports
|
|
413
|
+
</Card>
|
|
414
|
+
</CardGroup>
|