@testdriverai/agent 7.8.0-test.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +7 -0
- package/.env.example +4 -0
- package/.prettierignore +4 -0
- package/.prettierrc +1 -0
- package/CHANGELOG.md +953 -0
- package/README.md +81 -0
- package/agent/events.js +135 -0
- package/agent/index.js +2450 -0
- package/agent/interface.js +35 -0
- package/agent/lib/analytics.js +22 -0
- package/agent/lib/censorship.js +75 -0
- package/agent/lib/commander.js +246 -0
- package/agent/lib/commands.js +1684 -0
- package/agent/lib/config.js +60 -0
- package/agent/lib/generator.js +91 -0
- package/agent/lib/http.js +144 -0
- package/agent/lib/logger.js +56 -0
- package/agent/lib/outputs.js +29 -0
- package/agent/lib/parser.js +209 -0
- package/agent/lib/redraw.js +386 -0
- package/agent/lib/resources/cursor-2.png +0 -0
- package/agent/lib/sandbox.js +1104 -0
- package/agent/lib/sdk.js +633 -0
- package/agent/lib/session.js +25 -0
- package/agent/lib/source-mapper.js +342 -0
- package/agent/lib/subimage/index.js +77 -0
- package/agent/lib/subimage/opencv.js +69 -0
- package/agent/lib/system.js +204 -0
- package/agent/lib/theme.js +14 -0
- package/agent/lib/valid-version.js +21 -0
- package/agent/lib/validation.js +169 -0
- package/ai/.claude-plugin/plugin.json +9 -0
- package/ai/agents/testdriver.md +638 -0
- package/ai/skills/testdriver-ai/SKILL.md +204 -0
- package/ai/skills/testdriver-assert/SKILL.md +315 -0
- package/ai/skills/testdriver-aws-setup/SKILL.md +448 -0
- package/ai/skills/testdriver-cache/SKILL.md +221 -0
- package/ai/skills/testdriver-caching/SKILL.md +124 -0
- package/ai/skills/testdriver-captcha/SKILL.md +158 -0
- package/ai/skills/testdriver-ci-cd/SKILL.md +602 -0
- package/ai/skills/testdriver-click/SKILL.md +286 -0
- package/ai/skills/testdriver-client/SKILL.md +477 -0
- package/ai/skills/testdriver-cloud/SKILL.md +119 -0
- package/ai/skills/testdriver-customizing-devices/SKILL.md +319 -0
- package/ai/skills/testdriver-dashcam/SKILL.md +418 -0
- package/ai/skills/testdriver-debugging-with-screenshots/SKILL.md +401 -0
- package/ai/skills/testdriver-device-config/SKILL.md +317 -0
- package/ai/skills/testdriver-double-click/SKILL.md +102 -0
- package/ai/skills/testdriver-elements/SKILL.md +605 -0
- package/ai/skills/testdriver-enterprise/SKILL.md +114 -0
- package/ai/skills/testdriver-errors/SKILL.md +246 -0
- package/ai/skills/testdriver-events/SKILL.md +356 -0
- package/ai/skills/testdriver-examples/SKILL.md +7 -0
- package/ai/skills/testdriver-exec/SKILL.md +317 -0
- package/ai/skills/testdriver-find/SKILL.md +829 -0
- package/ai/skills/testdriver-focus-application/SKILL.md +293 -0
- package/ai/skills/testdriver-generating-tests/SKILL.md +36 -0
- package/ai/skills/testdriver-hover/SKILL.md +278 -0
- package/ai/skills/testdriver-locating-elements/SKILL.md +71 -0
- package/ai/skills/testdriver-making-assertions/SKILL.md +32 -0
- package/ai/skills/testdriver-mcp/SKILL.md +7 -0
- package/ai/skills/testdriver-mcp-workflow/SKILL.md +410 -0
- package/ai/skills/testdriver-mouse-down/SKILL.md +161 -0
- package/ai/skills/testdriver-mouse-up/SKILL.md +164 -0
- package/ai/skills/testdriver-parse/SKILL.md +236 -0
- package/ai/skills/testdriver-performing-actions/SKILL.md +54 -0
- package/ai/skills/testdriver-press-keys/SKILL.md +348 -0
- package/ai/skills/testdriver-provision/SKILL.md +331 -0
- package/ai/skills/testdriver-quickstart/SKILL.md +144 -0
- package/ai/skills/testdriver-redraw/SKILL.md +214 -0
- package/ai/skills/testdriver-reusable-code/SKILL.md +249 -0
- package/ai/skills/testdriver-right-click/SKILL.md +123 -0
- package/ai/skills/testdriver-running-tests/SKILL.md +185 -0
- package/ai/skills/testdriver-screenshot/SKILL.md +248 -0
- package/ai/skills/testdriver-screenshots/SKILL.md +184 -0
- package/ai/skills/testdriver-scroll/SKILL.md +335 -0
- package/ai/skills/testdriver-secrets/SKILL.md +115 -0
- package/ai/skills/testdriver-self-hosted/SKILL.md +65 -0
- package/ai/skills/testdriver-test-writer/SKILL.md +448 -0
- package/ai/skills/testdriver-testdriver/SKILL.md +628 -0
- package/ai/skills/testdriver-testdriver-mechanic/SKILL.md +165 -0
- package/ai/skills/testdriver-type/SKILL.md +357 -0
- package/ai/skills/testdriver-variables/SKILL.md +111 -0
- package/ai/skills/testdriver-wait/SKILL.md +50 -0
- package/ai/skills/testdriver-waiting-for-elements/SKILL.md +90 -0
- package/ai/skills/testdriver-what-is-testdriver/SKILL.md +54 -0
- package/bin/testdriverai.js +22 -0
- package/debugger/bg.png +0 -0
- package/debugger/icon.png +0 -0
- package/debugger/index.html +469 -0
- package/debugger/td.png +0 -0
- package/debugger/tray-buffered.png +0 -0
- package/debugger/tray.png +0 -0
- package/docs/GITHUB_COMMENTS.md +330 -0
- package/docs/GITHUB_COMMENTS_ANNOUNCEMENT.md +167 -0
- package/docs/QUICK-START-GITHUB-COMMENTS.md +84 -0
- package/docs/TEST-GITHUB-COMMENTS.md +129 -0
- package/docs/_data/examples-manifest.json +177 -0
- package/docs/_data/examples-manifest.schema.json +41 -0
- package/docs/_scripts/extract-example-urls.js +165 -0
- package/docs/_scripts/generate-examples.js +560 -0
- package/docs/_scripts/generate-skills.js +154 -0
- package/docs/_scripts/link-replacer.js +164 -0
- package/docs/_scripts/upload-docs-to-openai.js +284 -0
- package/docs/changelog.mdx +161 -0
- package/docs/claude-mcp-plugin.mdx +160 -0
- package/docs/docs.json +442 -0
- package/docs/github-integration-setup.md +266 -0
- package/docs/guide/best-practices-polling.mdx +174 -0
- package/docs/images/content/account/newprojectsettings.png +0 -0
- package/docs/images/content/account/projectpage.png +0 -0
- package/docs/images/content/account/projectreplays.png +0 -0
- package/docs/images/content/account/team-manage.png +0 -0
- package/docs/images/content/account/teampage.png +0 -0
- package/docs/images/content/extension/cursor.svg +1 -0
- package/docs/images/content/extension/vscode.svg +57 -0
- package/docs/images/content/extension/windsurf.svg +3 -0
- package/docs/images/content/parse/output.png +0 -0
- package/docs/images/content/self-hosted/launchtemplateid.png +0 -0
- package/docs/images/content/side-by-side.png +0 -0
- package/docs/images/content/vscode/ide-full.png +0 -0
- package/docs/images/content/vscode/running.png +0 -0
- package/docs/images/content/vscode/v7-chat.png +0 -0
- package/docs/images/content/vscode/v7-choose-agent.png +0 -0
- package/docs/images/content/vscode/v7-full.png +0 -0
- package/docs/images/content/vscode/v7-onboarding.png +0 -0
- package/docs/images/content/vscode/vscode-2-assert.png +0 -0
- package/docs/images/content/vscode/vscode-agent-preview.png +0 -0
- package/docs/images/content/vscode/vscode-copilot-ask.png +0 -0
- package/docs/images/content/vscode/vscode-file-creation.png +0 -0
- package/docs/images/content/vscode/vscode-install.png +0 -0
- package/docs/images/content/vscode/vscode-overview.png +0 -0
- package/docs/images/content/vscode/vscode-setup-walkthrough.png +0 -0
- package/docs/images/content/vscode/vscode-stopchat.png +0 -0
- package/docs/images/content/vscode/vscode-stoptest.png +0 -0
- package/docs/images/content/vscode/vscode-tdservice.png +0 -0
- package/docs/images/content/vscode/vscode-test-output.png +0 -0
- package/docs/images/content/vscode/vscode-testhistory.png +0 -0
- package/docs/images/content/vscode/vscode-testpane-runtests.png +0 -0
- package/docs/images/content/vscode/vscode-testpane.png +0 -0
- package/docs/images/template/dark.png +0 -0
- package/docs/images/template/icon.png +0 -0
- package/docs/images/template/light.png +0 -0
- package/docs/snippets/calendar-link.mdx +4 -0
- package/docs/snippets/gitignore-warning.mdx +7 -0
- package/docs/snippets/lifecycle-warning.mdx +6 -0
- package/docs/snippets/test-prereqs.mdx +12 -0
- package/docs/snippets/tests/assert-replay.mdx +7 -0
- package/docs/snippets/tests/assert-yaml.mdx +8 -0
- package/docs/snippets/tests/exec-js-replay.mdx +7 -0
- package/docs/snippets/tests/exec-js-yaml.mdx +32 -0
- package/docs/snippets/tests/exec-shell-replay.mdx +7 -0
- package/docs/snippets/tests/exec-shell-yaml.mdx +15 -0
- package/docs/snippets/tests/hover-image-replay.mdx +7 -0
- package/docs/snippets/tests/hover-image-yaml.mdx +17 -0
- package/docs/snippets/tests/hover-text-replay.mdx +7 -0
- package/docs/snippets/tests/hover-text-with-description-replay.mdx +7 -0
- package/docs/snippets/tests/hover-text-with-description-yaml.mdx +24 -0
- package/docs/snippets/tests/hover-text-yaml.mdx +14 -0
- package/docs/snippets/tests/match-image-replay.mdx +7 -0
- package/docs/snippets/tests/match-image-yaml.mdx +17 -0
- package/docs/snippets/tests/press-keys-replay.mdx +7 -0
- package/docs/snippets/tests/press-keys-yaml.mdx +36 -0
- package/docs/snippets/tests/remember-replay.mdx +7 -0
- package/docs/snippets/tests/remember-yaml.mdx +28 -0
- package/docs/snippets/tests/scroll-replay.mdx +7 -0
- package/docs/snippets/tests/scroll-until-image-replay.mdx +7 -0
- package/docs/snippets/tests/scroll-until-image-yaml.mdx +14 -0
- package/docs/snippets/tests/scroll-until-text-replay.mdx +7 -0
- package/docs/snippets/tests/scroll-until-text-yaml.mdx +17 -0
- package/docs/snippets/tests/scroll-yaml.mdx +30 -0
- package/docs/snippets/tests/type-repeated-replay.mdx +7 -0
- package/docs/snippets/tests/type-repeated-yaml.mdx +22 -0
- package/docs/snippets/tests/type-replay.mdx +7 -0
- package/docs/snippets/tests/type-yaml.mdx +28 -0
- package/docs/snippets/tests/wait-for-image-replay.mdx +7 -0
- package/docs/snippets/tests/wait-for-image-yaml.mdx +18 -0
- package/docs/snippets/tests/wait-for-text-replay.mdx +7 -0
- package/docs/snippets/tests/wait-for-text-yaml.mdx +18 -0
- package/docs/snippets/tests/wait-replay.mdx +7 -0
- package/docs/snippets/tests/wait-yaml.mdx +13 -0
- package/docs/styles.css +65 -0
- package/docs/v6/account/dashboard.mdx +16 -0
- package/docs/v6/account/enterprise.mdx +110 -0
- package/docs/v6/account/pricing.mdx +33 -0
- package/docs/v6/account/projects.mdx +33 -0
- package/docs/v6/account/team.mdx +35 -0
- package/docs/v6/action/ami.mdx +109 -0
- package/docs/v6/action/performance.mdx +105 -0
- package/docs/v6/action/secrets.mdx +93 -0
- package/docs/v6/apps/chrome-extensions.mdx +48 -0
- package/docs/v6/apps/desktop-apps.mdx +93 -0
- package/docs/v6/apps/mobile-apps.mdx +26 -0
- package/docs/v6/apps/static-websites.mdx +54 -0
- package/docs/v6/apps/tauri-apps.mdx +361 -0
- package/docs/v6/bugs/jira.mdx +232 -0
- package/docs/v6/cli/overview.mdx +66 -0
- package/docs/v6/commands/assert.mdx +45 -0
- package/docs/v6/commands/exec.mdx +276 -0
- package/docs/v6/commands/focus-application.mdx +44 -0
- package/docs/v6/commands/hover-image.mdx +69 -0
- package/docs/v6/commands/hover-text.mdx +47 -0
- package/docs/v6/commands/if.mdx +53 -0
- package/docs/v6/commands/match-image.mdx +67 -0
- package/docs/v6/commands/press-keys.mdx +87 -0
- package/docs/v6/commands/remember.mdx +49 -0
- package/docs/v6/commands/run.mdx +44 -0
- package/docs/v6/commands/scroll-until-image.mdx +66 -0
- package/docs/v6/commands/scroll-until-text.mdx +60 -0
- package/docs/v6/commands/scroll.mdx +69 -0
- package/docs/v6/commands/type.mdx +45 -0
- package/docs/v6/commands/wait-for-image.mdx +54 -0
- package/docs/v6/commands/wait-for-text.mdx +48 -0
- package/docs/v6/commands/wait.mdx +45 -0
- package/docs/v6/exporting/junit.mdx +218 -0
- package/docs/v6/exporting/playwright.mdx +197 -0
- package/docs/v6/features/auto-healing.mdx +144 -0
- package/docs/v6/features/generation.mdx +116 -0
- package/docs/v6/features/parallel-testing.mdx +151 -0
- package/docs/v6/features/reusable-snippets.mdx +131 -0
- package/docs/v6/features/selectorless.mdx +80 -0
- package/docs/v6/features/visual-assertions.mdx +139 -0
- package/docs/v6/getting-started/ci.mdx +146 -0
- package/docs/v6/getting-started/cli.mdx +91 -0
- package/docs/v6/getting-started/editing.mdx +100 -0
- package/docs/v6/getting-started/playwright.mdx +342 -0
- package/docs/v6/getting-started/running.mdx +48 -0
- package/docs/v6/getting-started/self-hosting.mdx +408 -0
- package/docs/v6/getting-started/vscode.mdx +88 -0
- package/docs/v6/guide/assertions.mdx +189 -0
- package/docs/v6/guide/authentication.mdx +136 -0
- package/docs/v6/guide/code.mdx +65 -0
- package/docs/v6/guide/dashcam.mdx +118 -0
- package/docs/v6/guide/environment-variables.mdx +26 -0
- package/docs/v6/guide/lifecycle.mdx +242 -0
- package/docs/v6/guide/locating.mdx +141 -0
- package/docs/v6/guide/protips.mdx +43 -0
- package/docs/v6/guide/variables.mdx +143 -0
- package/docs/v6/guide/waiting.mdx +130 -0
- package/docs/v6/importing/csv.mdx +196 -0
- package/docs/v6/importing/gherkin.mdx +143 -0
- package/docs/v6/importing/jira.mdx +164 -0
- package/docs/v6/importing/testrail.mdx +162 -0
- package/docs/v6/integrations/electron.mdx +146 -0
- package/docs/v6/integrations/netlify.mdx +100 -0
- package/docs/v6/integrations/vercel.mdx +125 -0
- package/docs/v6/interactive/explore.mdx +99 -0
- package/docs/v6/interactive/run.mdx +52 -0
- package/docs/v6/interactive/save.mdx +63 -0
- package/docs/v6/overview/comparison.mdx +101 -0
- package/docs/v6/overview/faq.mdx +162 -0
- package/docs/v6/overview/performance.mdx +52 -0
- package/docs/v6/overview/quickstart.mdx +137 -0
- package/docs/v6/overview/what-is-testdriver.mdx +85 -0
- package/docs/v6/scenarios/ai-chatbot.mdx +28 -0
- package/docs/v6/scenarios/cookie-banner.mdx +32 -0
- package/docs/v6/scenarios/file-upload.mdx +33 -0
- package/docs/v6/scenarios/form-filling.mdx +32 -0
- package/docs/v6/scenarios/log-in.mdx +75 -0
- package/docs/v6/scenarios/pdf-generation.mdx +25 -0
- package/docs/v6/scenarios/spell-check.mdx +22 -0
- package/docs/v6/security/action.mdx +84 -0
- package/docs/v6/security/agent.mdx +73 -0
- package/docs/v6/security/platform.mdx +77 -0
- package/docs/v6/tutorials/advanced-test.mdx +81 -0
- package/docs/v6/tutorials/basic-test.mdx +45 -0
- package/docs/v7/_drafts/agents.mdx +843 -0
- package/docs/v7/_drafts/architecture.mdx +399 -0
- package/docs/v7/_drafts/auto-cache-key.mdx +167 -0
- package/docs/v7/_drafts/awesome-logs-quick-ref.mdx +100 -0
- package/docs/v7/_drafts/best-practices.mdx +486 -0
- package/docs/v7/_drafts/caching-ai.mdx +215 -0
- package/docs/v7/_drafts/caching-selectors.mdx +424 -0
- package/docs/v7/_drafts/caching.mdx +366 -0
- package/docs/v7/_drafts/cli-to-sdk-migration.mdx +425 -0
- package/docs/v7/_drafts/commands/assert.mdx +45 -0
- package/docs/v7/_drafts/commands/exec.mdx +276 -0
- package/docs/v7/_drafts/commands/focus-application.mdx +44 -0
- package/docs/v7/_drafts/commands/hover-image.mdx +69 -0
- package/docs/v7/_drafts/commands/hover-text.mdx +47 -0
- package/docs/v7/_drafts/commands/if.mdx +53 -0
- package/docs/v7/_drafts/commands/match-image.mdx +67 -0
- package/docs/v7/_drafts/commands/press-keys.mdx +87 -0
- package/docs/v7/_drafts/commands/remember.mdx +49 -0
- package/docs/v7/_drafts/commands/run.mdx +44 -0
- package/docs/v7/_drafts/commands/scroll-until-image.mdx +66 -0
- package/docs/v7/_drafts/commands/scroll-until-text.mdx +60 -0
- package/docs/v7/_drafts/commands/scroll.mdx +69 -0
- package/docs/v7/_drafts/commands/type.mdx +45 -0
- package/docs/v7/_drafts/commands/wait-for-image.mdx +54 -0
- package/docs/v7/_drafts/commands/wait-for-text.mdx +48 -0
- package/docs/v7/_drafts/commands/wait.mdx +45 -0
- package/docs/v7/_drafts/configuration.mdx +378 -0
- package/docs/v7/_drafts/contributing.mdx +174 -0
- package/docs/v7/_drafts/core.mdx +458 -0
- package/docs/v7/_drafts/dashcam-title-feature.mdx +89 -0
- package/docs/v7/_drafts/debugging.mdx +349 -0
- package/docs/v7/_drafts/error-handling.mdx +501 -0
- package/docs/v7/_drafts/faq.mdx +393 -0
- package/docs/v7/_drafts/hooks.mdx +360 -0
- package/docs/v7/_drafts/init-command.mdx +95 -0
- package/docs/v7/_drafts/installation.mdx +420 -0
- package/docs/v7/_drafts/migration.mdx +562 -0
- package/docs/v7/_drafts/observable.mdx +604 -0
- package/docs/v7/_drafts/playwright.mdx +342 -0
- package/docs/v7/_drafts/plugin-migration.mdx +220 -0
- package/docs/v7/_drafts/powerful.mdx +419 -0
- package/docs/v7/_drafts/presets.mdx +210 -0
- package/docs/v7/_drafts/progressive-disclosure.mdx +230 -0
- package/docs/v7/_drafts/prompt-cache.mdx +200 -0
- package/docs/v7/_drafts/provision.mdx +390 -0
- package/docs/v7/_drafts/quick-start-test-recording.mdx +214 -0
- package/docs/v7/_drafts/readme.mdx +135 -0
- package/docs/v7/_drafts/reports.mdx +414 -0
- package/docs/v7/_drafts/scalable.mdx +763 -0
- package/docs/v7/_drafts/screenshot.mdx +155 -0
- package/docs/v7/_drafts/sdk-awesome-logs.mdx +468 -0
- package/docs/v7/_drafts/sdk-browser-rendering.mdx +167 -0
- package/docs/v7/_drafts/sdk-migration.mdx +474 -0
- package/docs/v7/_drafts/sdk-v7-complete.mdx +345 -0
- package/docs/v7/_drafts/self-hosting.mdx +369 -0
- package/docs/v7/_drafts/test-recording.mdx +382 -0
- package/docs/v7/_drafts/troubleshooting.mdx +526 -0
- package/docs/v7/_drafts/vitest-plugin.mdx +477 -0
- package/docs/v7/_drafts/vitest.mdx +535 -0
- package/docs/v7/_drafts/writing-tests.mdx +25 -0
- package/docs/v7/ai.mdx +205 -0
- package/docs/v7/assert.mdx +316 -0
- package/docs/v7/aws-setup.mdx +449 -0
- package/docs/v7/cache.mdx +223 -0
- package/docs/v7/caching.mdx +128 -0
- package/docs/v7/captcha.mdx +159 -0
- package/docs/v7/ci-cd.mdx +603 -0
- package/docs/v7/click.mdx +287 -0
- package/docs/v7/client.mdx +478 -0
- package/docs/v7/copilot/auto-healing.mdx +265 -0
- package/docs/v7/copilot/creating-tests.mdx +156 -0
- package/docs/v7/copilot/github.mdx +143 -0
- package/docs/v7/copilot/running-tests.mdx +149 -0
- package/docs/v7/copilot/setup.mdx +143 -0
- package/docs/v7/customizing-devices.mdx +319 -0
- package/docs/v7/dashcam.mdx +419 -0
- package/docs/v7/debugging-with-screenshots.mdx +402 -0
- package/docs/v7/device-config.mdx +317 -0
- package/docs/v7/double-click.mdx +102 -0
- package/docs/v7/elements.mdx +606 -0
- package/docs/v7/enterprise.mdx +9 -0
- package/docs/v7/errors.mdx +248 -0
- package/docs/v7/events.mdx +358 -0
- package/docs/v7/examples/ai.mdx +72 -0
- package/docs/v7/examples/assert.mdx +72 -0
- package/docs/v7/examples/captcha-api.mdx +92 -0
- package/docs/v7/examples/chrome-extension.mdx +132 -0
- package/docs/v7/examples/drag-and-drop.mdx +100 -0
- package/docs/v7/examples/element-not-found.mdx +67 -0
- package/docs/v7/examples/exec-output.mdx +85 -0
- package/docs/v7/examples/exec-pwsh.mdx +83 -0
- package/docs/v7/examples/focus-window.mdx +62 -0
- package/docs/v7/examples/hover-image.mdx +94 -0
- package/docs/v7/examples/hover-text.mdx +69 -0
- package/docs/v7/examples/installer.mdx +91 -0
- package/docs/v7/examples/launch-vscode-linux.mdx +101 -0
- package/docs/v7/examples/match-image.mdx +96 -0
- package/docs/v7/examples/press-keys.mdx +92 -0
- package/docs/v7/examples/scroll-keyboard.mdx +79 -0
- package/docs/v7/examples/scroll-until-image.mdx +81 -0
- package/docs/v7/examples/scroll-until-text.mdx +109 -0
- package/docs/v7/examples/scroll.mdx +81 -0
- package/docs/v7/examples/type.mdx +92 -0
- package/docs/v7/examples/windows-installer.mdx +89 -0
- package/docs/v7/exec.mdx +318 -0
- package/docs/v7/find.mdx +830 -0
- package/docs/v7/focus-application.mdx +294 -0
- package/docs/v7/generating-tests.mdx +36 -0
- package/docs/v7/hosted.mdx +158 -0
- package/docs/v7/hover.mdx +279 -0
- package/docs/v7/locating-elements.mdx +71 -0
- package/docs/v7/making-assertions.mdx +32 -0
- package/docs/v7/mcp.mdx +9 -0
- package/docs/v7/mouse-down.mdx +161 -0
- package/docs/v7/mouse-up.mdx +164 -0
- package/docs/v7/parse.mdx +237 -0
- package/docs/v7/performing-actions.mdx +54 -0
- package/docs/v7/press-keys.mdx +349 -0
- package/docs/v7/provision.mdx +333 -0
- package/docs/v7/quickstart.mdx +173 -0
- package/docs/v7/redraw.mdx +216 -0
- package/docs/v7/reusable-code.mdx +249 -0
- package/docs/v7/right-click.mdx +123 -0
- package/docs/v7/running-tests.mdx +185 -0
- package/docs/v7/screenshot.mdx +249 -0
- package/docs/v7/screenshots.mdx +186 -0
- package/docs/v7/scroll.mdx +336 -0
- package/docs/v7/secrets.mdx +115 -0
- package/docs/v7/self-hosted.mdx +149 -0
- package/docs/v7/type.mdx +358 -0
- package/docs/v7/variables.mdx +111 -0
- package/docs/v7/wait.mdx +52 -0
- package/docs/v7/waiting-for-elements.mdx +90 -0
- package/docs/v7/what-is-testdriver.mdx +54 -0
- package/eslint.config.js +67 -0
- package/examples/ai.test.mjs +31 -0
- package/examples/assert.test.mjs +47 -0
- package/examples/chrome-extension.test.mjs +97 -0
- package/examples/config.mjs +5 -0
- package/examples/element-not-found.test.mjs +27 -0
- package/examples/exec-output.test.mjs +60 -0
- package/examples/exec-pwsh.test.mjs +58 -0
- package/examples/findall-coffee-icons.test.mjs +42 -0
- package/examples/focus-window.test.mjs +37 -0
- package/examples/formatted-logging.test.mjs +27 -0
- package/examples/hover-image.test.mjs +53 -0
- package/examples/hover-text-with-description.test.mjs +57 -0
- package/examples/hover-text.test.mjs +28 -0
- package/examples/installer.test.mjs +50 -0
- package/examples/launch-vscode-linux.test.mjs +55 -0
- package/examples/match-image.test.mjs +55 -0
- package/examples/parse.test.mjs +19 -0
- package/examples/press-keys.test.mjs +44 -0
- package/examples/prompt.test.mjs +34 -0
- package/examples/scroll-keyboard.test.mjs +38 -0
- package/examples/scroll-until-image.test.mjs +40 -0
- package/examples/scroll.test.mjs +42 -0
- package/examples/type.test.mjs +46 -0
- package/examples/windows-installer.test.mjs +54 -0
- package/index.js +2 -0
- package/interfaces/cli/commands/init.js +438 -0
- package/interfaces/cli/commands/setup.js +382 -0
- package/interfaces/cli/lib/base.js +285 -0
- package/interfaces/cli.js +20 -0
- package/interfaces/junit-reporter.js +290 -0
- package/interfaces/logger.js +388 -0
- package/interfaces/readline.js +234 -0
- package/interfaces/shared-test-state.mjs +64 -0
- package/interfaces/vitest-plugin.d.ts +115 -0
- package/interfaces/vitest-plugin.mjs +1698 -0
- package/lib/captcha/solver.js +358 -0
- package/lib/core/Dashcam.js +533 -0
- package/lib/core/index.d.ts +172 -0
- package/lib/core/index.js +12 -0
- package/lib/environments.json +18 -0
- package/lib/github-comment-formatter.js +263 -0
- package/lib/github-comment.mjs +452 -0
- package/lib/init-project.js +575 -0
- package/lib/presets/index.mjs +331 -0
- package/lib/resolve-channel.js +46 -0
- package/lib/sentry.js +417 -0
- package/lib/vitest/hooks.d.ts +57 -0
- package/lib/vitest/hooks.mjs +674 -0
- package/lib/vitest/setup-aws.mjs +247 -0
- package/lib/vitest/setup-self-hosted.mjs +151 -0
- package/lib/vitest/setup.mjs +46 -0
- package/manual/captcha-api.test.mjs +51 -0
- package/manual/drag-and-drop.test.mjs +59 -0
- package/manual/flake-diffthreshold-001.test.mjs +9 -0
- package/manual/flake-diffthreshold-01.test.mjs +9 -0
- package/manual/flake-diffthreshold-05.test.mjs +9 -0
- package/manual/flake-noredraw-cache.test.mjs +9 -0
- package/manual/flake-noredraw-nocache.test.mjs +9 -0
- package/manual/flake-redraw-cache.test.mjs +9 -0
- package/manual/flake-redraw-nocache.test.mjs +9 -0
- package/manual/flake-rocket-match.test.mjs +30 -0
- package/manual/flake-shared.mjs +51 -0
- package/manual/no-provision.test.mjs +31 -0
- package/manual/packer-hover-image.test.mjs +176 -0
- package/manual/scroll-until-text.test.mjs +68 -0
- package/manual/test-init-command.js +223 -0
- package/mcp-server/README.md +322 -0
- package/mcp-server/dist/codegen.d.ts +9 -0
- package/mcp-server/dist/codegen.js +165 -0
- package/mcp-server/dist/mcp-app.html +114 -0
- package/mcp-server/dist/package.json +1 -0
- package/mcp-server/dist/provision-types.d.ts +290 -0
- package/mcp-server/dist/provision-types.js +174 -0
- package/mcp-server/dist/server.d.ts +6 -0
- package/mcp-server/dist/server.mjs +1925 -0
- package/mcp-server/dist/session.d.ts +85 -0
- package/mcp-server/dist/session.js +152 -0
- package/mcp-server/mcp-app.html +28 -0
- package/mcp-server/mcp-config.example.json +19 -0
- package/mcp-server/package-lock.json +4027 -0
- package/mcp-server/package.json +31 -0
- package/mcp-server/src/codegen.ts +189 -0
- package/mcp-server/src/mcp-app.css +360 -0
- package/mcp-server/src/mcp-app.ts +547 -0
- package/mcp-server/src/provision-types.ts +209 -0
- package/mcp-server/src/server.ts +2391 -0
- package/mcp-server/src/session.ts +194 -0
- package/mcp-server/tsconfig.json +16 -0
- package/mcp-server/vite.config.ts +23 -0
- package/package.json +158 -0
- package/schema.json +1046 -0
- package/scripts/generate-skills.js +94 -0
- package/sdk-log-formatter.js +1157 -0
- package/sdk.d.ts +1486 -0
- package/sdk.js +4336 -0
- package/setup/aws/cloudformation.yaml +463 -0
- package/setup/aws/disable-defender.sh +42 -0
- package/setup/aws/install-dev-runner.sh +79 -0
- package/setup/aws/spawn-runner.sh +289 -0
- package/test/captcha-solver.test.mjs +152 -0
- package/test/chrome-remote-debugging.test.mjs +66 -0
- package/test/duckduckgo/experiment.test.mjs +28 -0
- package/test/duckduckgo/setup.test.mjs +29 -0
- package/test/manual/debug-locate-response.js +82 -0
- package/test/manual/reconnect-provision.test.mjs +49 -0
- package/test/manual/test-console-logs.test.mjs +42 -0
- package/test/manual/test-find-api.js +73 -0
- package/test/manual/test-init.sh +54 -0
- package/test/manual/test-prompt-cache.js +97 -0
- package/test/manual/test-provision-auth.mjs +22 -0
- package/test/manual/test-sandbox-render.js +29 -0
- package/test/manual/test-sdk-methods.js +15 -0
- package/test/manual/test-sdk-refactor.js +53 -0
- package/test/manual/test-stack-trace.mjs +57 -0
- package/test/manual/verify-element-api.js +89 -0
- package/test/manual/verify-types.js +0 -0
- package/test/manual-unawaited-promise.test.mjs +31 -0
- package/vitest.config.mjs +58 -0
- package/vitest.runner.config.mjs +33 -0
- package/vscode-extension/.vscodeignore +12 -0
- package/vscode-extension/README.md +94 -0
- package/vscode-extension/media/icon.png +0 -0
- package/vscode-extension/package-lock.json +4126 -0
- package/vscode-extension/package.json +86 -0
- package/vscode-extension/src/extension.ts +829 -0
- package/vscode-extension/testdriverai-0.1.0.vsix +0 -0
- package/vscode-extension/tsconfig.json +16 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Authentication"
|
|
3
|
+
sidebarTitle: "Authentication"
|
|
4
|
+
description: "Learn how to handle authentication workflows in TestDriver using GitHub Actions."
|
|
5
|
+
icon: "key"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
This guide explains how to handle **authentication workflows** in **TestDriver** using GitHub Actions. It covers securely passing credentials (for example, usernames and passwords) to the TestDriver action and using them in both the `prerun` script and test files. Save these locally in your `.env` file and use them in CI as GitHub secrets.
|
|
9
|
+
|
|
10
|
+
<GitignoreWarning />
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## How authentication works in TestDriver
|
|
15
|
+
|
|
16
|
+
1. **Store Credentials Securely**:
|
|
17
|
+
|
|
18
|
+
- Use GitHub Secrets to store sensitive information like usernames, passwords, or API keys.
|
|
19
|
+
|
|
20
|
+
2. **Pass Credentials to the Workflow**:
|
|
21
|
+
|
|
22
|
+
- Supply credentials as environment variables or directly in the workflow.
|
|
23
|
+
|
|
24
|
+
3. **Use Credentials in Tests**:
|
|
25
|
+
|
|
26
|
+
- Dynamically reference credentials in the `prerun` script or test files to perform authentication steps.
|
|
27
|
+
|
|
28
|
+
## Step 1: Store credentials in GitHub secrets
|
|
29
|
+
|
|
30
|
+
1. Navigate to your repository's **Settings** > **Secrets and variables** > **Actions**.
|
|
31
|
+
2. Add the following secrets:
|
|
32
|
+
- **`TD_USERNAME`**: The username for login.
|
|
33
|
+
- **`TD_PASSWORD`**: The password for login.
|
|
34
|
+
- **`TD_API_KEY`**: Your TestDriver API key.
|
|
35
|
+
- **`TD_WEBSITE`**: The URL of the website to test.
|
|
36
|
+
|
|
37
|
+
## Step 2: Pass credentials to the workflow
|
|
38
|
+
|
|
39
|
+
Secrets are passed to the workflow using the `secrets` context. They can be supplied as:
|
|
40
|
+
|
|
41
|
+
- **Environment Variables**: Passed via the `env` block.
|
|
42
|
+
- **Inline in the `prerun` Script**: Used directly in the script.
|
|
43
|
+
|
|
44
|
+
### Example GitHub Actions workflow (adapt for your CI/CD platform)
|
|
45
|
+
|
|
46
|
+
```yaml workflows/td-auth.yml focus={17-24}
|
|
47
|
+
name: TestDriver / Authentication
|
|
48
|
+
|
|
49
|
+
on:
|
|
50
|
+
push:
|
|
51
|
+
branches:
|
|
52
|
+
- main
|
|
53
|
+
pull_request:
|
|
54
|
+
workflow_dispatch:
|
|
55
|
+
|
|
56
|
+
jobs:
|
|
57
|
+
test-authentication:
|
|
58
|
+
name: Test Authentication
|
|
59
|
+
steps:
|
|
60
|
+
- name: Check out repository
|
|
61
|
+
uses: actions/checkout@v4
|
|
62
|
+
|
|
63
|
+
- name: Run Authentication Test
|
|
64
|
+
run: npx testdriverai@latest run testdriver/authentication.yaml
|
|
65
|
+
env:
|
|
66
|
+
TD_API_KEY: ${{ secrets.TD_API_KEY }}
|
|
67
|
+
TD_USERNAME: ${{ secrets.TD_USERNAME }}
|
|
68
|
+
TD_PASSWORD: ${{ secrets.TD_PASSWORD }}
|
|
69
|
+
TD_WEBSITE: ${{ secrets.TD_WEBSITE }}
|
|
70
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
71
|
+
FORCE_COLOR: "3"
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Step 3: Use credentials in test files
|
|
75
|
+
|
|
76
|
+
Secrets can be referenced in the test file using placeholders (for example, `${TD_USERNAME}` and `${TD_PASSWORD}`).
|
|
77
|
+
|
|
78
|
+
### Example test file:
|
|
79
|
+
|
|
80
|
+
```yaml login.yaml highlight={9, 10, 15, 16}
|
|
81
|
+
version: 6.0.0
|
|
82
|
+
steps:
|
|
83
|
+
- prompt: Log in to the application
|
|
84
|
+
commands:
|
|
85
|
+
- command: hover-text
|
|
86
|
+
text: Email
|
|
87
|
+
description: Email input field
|
|
88
|
+
action: click
|
|
89
|
+
- command: type
|
|
90
|
+
text: ${TD_USERNAME}
|
|
91
|
+
- command: hover-text
|
|
92
|
+
text: Password
|
|
93
|
+
description: Password input field
|
|
94
|
+
action: click
|
|
95
|
+
- command: type
|
|
96
|
+
text: ${TD_PASSWORD}
|
|
97
|
+
- command: hover-text
|
|
98
|
+
text: Log In
|
|
99
|
+
description: Log In button
|
|
100
|
+
action: click
|
|
101
|
+
- command: assert
|
|
102
|
+
expect: The dashboard is displayed
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## How it works together
|
|
106
|
+
|
|
107
|
+
1. **Secrets in the Workflow**:
|
|
108
|
+
|
|
109
|
+
- Secrets like `TD_USERNAME` and `TD_PASSWORD` are passed as environment variables to the TestDriver action.
|
|
110
|
+
|
|
111
|
+
2. **Secrets in the `prerun` Script**:
|
|
112
|
+
|
|
113
|
+
- The `TD_WEBSITE` secret is used to launch the browser with the correct URL.
|
|
114
|
+
|
|
115
|
+
3. **Secrets in the Test File**:
|
|
116
|
+
|
|
117
|
+
- The test file dynamically references the secrets to fill in login credentials during the test.
|
|
118
|
+
|
|
119
|
+
## Benefits of using authentication in TestDriver
|
|
120
|
+
|
|
121
|
+
1. **Secure Handling of Credentials**:
|
|
122
|
+
|
|
123
|
+
- Secrets are encrypted and not exposed in logs.
|
|
124
|
+
- Even if printed, they appear as `***`.
|
|
125
|
+
|
|
126
|
+
2. **Dynamic Testing**:
|
|
127
|
+
|
|
128
|
+
- Easily switch between different environments (for example, staging, production) by updating the secrets.
|
|
129
|
+
|
|
130
|
+
3. **Reusability**:
|
|
131
|
+
|
|
132
|
+
- Use the same workflow and test files across multiple repositories or environments.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
By securely passing credentials and using them in the `prerun` script and test files, you can automate authentication workflows in TestDriver while ensuring sensitive information remains protected.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Custom Code in TestDriver"
|
|
3
|
+
sidebarTitle: "Custom Code"
|
|
4
|
+
description: "Learn how to integrate custom Node.js scripts into your TestDriver workflows for dynamic testing."
|
|
5
|
+
icon: "code"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
TestDriver allows you to execute custom **Node.js** scripts and shell scripts within your test workflows using the [`exec`](/commands/exec) command. This feature, introduced in version `5.1.0`, enables you to integrate custom logic, such as generating one-time passwords (OTPs), hitting APIs, or performing other dynamic operations, directly into your tests.
|
|
9
|
+
|
|
10
|
+
## Key features
|
|
11
|
+
|
|
12
|
+
1. **Run Node.js Scripts**:
|
|
13
|
+
|
|
14
|
+
- Execute custom JavaScript code within your test steps.
|
|
15
|
+
- Use NPM modules to extend functionality.
|
|
16
|
+
|
|
17
|
+
2. **Dynamic Outputs**:
|
|
18
|
+
|
|
19
|
+
- Store the result of your script in a variable for use in subsequent steps.
|
|
20
|
+
|
|
21
|
+
3. **NPM Support**:
|
|
22
|
+
|
|
23
|
+
- Install and use NPM packages in your scripts.
|
|
24
|
+
|
|
25
|
+
## Updated example: One-time password (OTP) validator
|
|
26
|
+
|
|
27
|
+
This example demonstrates how to generate a one-time password (OTP) using the `totp-generator` NPM package and use it in a test.
|
|
28
|
+
|
|
29
|
+
```yaml verify-otp.yaml
|
|
30
|
+
version: 6.0.0
|
|
31
|
+
steps:
|
|
32
|
+
- commands:
|
|
33
|
+
- command: exec
|
|
34
|
+
lang: pwsh
|
|
35
|
+
code: |
|
|
36
|
+
npm install totp-generator
|
|
37
|
+
- command: exec
|
|
38
|
+
lang: js
|
|
39
|
+
output: totp
|
|
40
|
+
code: |
|
|
41
|
+
const { TOTP } = require("totp-generator");
|
|
42
|
+
let otp = TOTP.generate("JBSWY3DPEB3W64TMMQQQ").otp;
|
|
43
|
+
console.log(otp);
|
|
44
|
+
result = otp;
|
|
45
|
+
- command: type
|
|
46
|
+
text: ${OUTPUT.totp}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Additional details
|
|
50
|
+
|
|
51
|
+
- The [`exec`](/commands/exec) command now takes a `lang` argument with supported values `js` or `pwsh`.
|
|
52
|
+
- `js` code is executed in a Node.js [VM](https://nodejs.org/api/vm.html) module internally.
|
|
53
|
+
- `pwsh` code is executed in the PowerShell on the runner.
|
|
54
|
+
|
|
55
|
+
<Note>
|
|
56
|
+
The `result` variable is already available in your script, overwrite it to store the output as shown in the example.
|
|
57
|
+
|
|
58
|
+
The `output`argument is assigned automatically by setting `result = somestringvalue` in the script you run.
|
|
59
|
+
|
|
60
|
+
</Note>
|
|
61
|
+
|
|
62
|
+
## Protips
|
|
63
|
+
|
|
64
|
+
- Always assign the output of your script to the `result` variable.
|
|
65
|
+
- Ensure all required NPM packages are installed locally and in the `prerun` script when using GitHub Actions.
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Dashcam Replays"
|
|
3
|
+
sidebarTitle: "Dashcam"
|
|
4
|
+
description: "Learn how to use Dashcam to record and replay test sessions in TestDriver."
|
|
5
|
+
icon: "video"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
[Dashcam](https://www.dashcam.io), from the makers of TestDriver, is a powerful feature in TestDriver that allows you to record and replay your test sessions. This is particularly useful for debugging, sharing test runs with team members, or reviewing the steps taken during a test. For the full docs see the [Dashcam docs](https://docs.dashcam.io/dashcam/).
|
|
9
|
+
|
|
10
|
+
## Recording a Test Session
|
|
11
|
+
|
|
12
|
+
To record a test session, you can use the `dashcam` command in your lifecycle scripts. There are two main lifecycle scripts where you can integrate Dashcam: `lifecycle/prerun.yaml` and `lifecycle/postrun.yaml`.
|
|
13
|
+
|
|
14
|
+
## Ways to use Dashcam
|
|
15
|
+
|
|
16
|
+
Dashcam comes as a standalone app and a Chrome extension. You can use either or both to capture your test sessions.
|
|
17
|
+
|
|
18
|
+
<Info>
|
|
19
|
+
To capture web logs, make sure to install the Dashcam Chrome extension on the
|
|
20
|
+
browser you are testing with. We recommend installing it via CLI to Chrome for
|
|
21
|
+
Testing. You can also find the extension [in the Chrome
|
|
22
|
+
Webstore](https://chromewebstore.google.com/detail/dashcam/dkcoeknmlfnfimigfagbcjgpokhdcbbp)
|
|
23
|
+
</Info>
|
|
24
|
+
|
|
25
|
+
### Installing the Dashcam Chrome extension via command line in prerun.yaml
|
|
26
|
+
|
|
27
|
+
In this lifecycle script, we install Chrome for Testing with a user profile that has the password manager disabled and sets up TestDriver Dashcam for replays and logs.
|
|
28
|
+
|
|
29
|
+
```yaml lifecycle/prerun.yaml [expandable]
|
|
30
|
+
- prompt: launch chrome for testing and setup dashcam
|
|
31
|
+
commands:
|
|
32
|
+
# this script installs chrome for testing with a userprofile that has password manager disabled and sets up TestDriver Dashcam for replays and logs
|
|
33
|
+
- command: exec
|
|
34
|
+
lang: pwsh
|
|
35
|
+
code: |
|
|
36
|
+
cd $env:TEMP
|
|
37
|
+
Write-Host "Changed directory to TEMP: $env:TEMP"
|
|
38
|
+
|
|
39
|
+
Write-Host "Running 'npm init -y'..."
|
|
40
|
+
npm init -y
|
|
41
|
+
|
|
42
|
+
Write-Host "Installing dependencies: @puppeteer/browsers and dashcam-chrome..."
|
|
43
|
+
npm install @puppeteer/browsers dashcam-chrome
|
|
44
|
+
|
|
45
|
+
Write-Host "Installing Chromium via '@puppeteer/browsers'..."
|
|
46
|
+
npx @puppeteer/browsers install chrome
|
|
47
|
+
|
|
48
|
+
# Define paths
|
|
49
|
+
$extensionPath = Join-Path (Get-Location) "node_modules/dashcam-chrome/build"
|
|
50
|
+
$profilePath = Join-Path $env:TEMP "chrome-profile-$(Get-Random)"
|
|
51
|
+
|
|
52
|
+
Write-Host "Extension path: $extensionPath"
|
|
53
|
+
Write-Host "Chrome user data dir: $profilePath"
|
|
54
|
+
|
|
55
|
+
# Validate extension path
|
|
56
|
+
if (-not (Test-Path $extensionPath)) {
|
|
57
|
+
Write-Host "Extension not found at $extensionPath"
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
$chromeArgs = @(
|
|
61
|
+
"--start-maximized",
|
|
62
|
+
"--load-extension=$extensionPath",
|
|
63
|
+
"--user-data-dir=$profilePath",
|
|
64
|
+
"--no-first-run",
|
|
65
|
+
"--no-default-browser-check",
|
|
66
|
+
"--disable-infobars"
|
|
67
|
+
"${TD_WEBSITE}"
|
|
68
|
+
) -join ' '
|
|
69
|
+
|
|
70
|
+
Start-Process "cmd.exe" -ArgumentList "/c", "npx @puppeteer/browsers launch chrome -- $chromeArgs"
|
|
71
|
+
|
|
72
|
+
Write-Host "Script complete."
|
|
73
|
+
exit 0
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Using the Chrome extension and capturing web logs
|
|
77
|
+
|
|
78
|
+
Now in the same `lifecycle/prerun.yaml` script, we set up Dashcam to track web logs and application logs. You can customize the patterns to match your needs. Testing Desktop? You can skip the web logs and just track application logs.
|
|
79
|
+
|
|
80
|
+
```yaml lifecycle/prerun.yaml
|
|
81
|
+
...
|
|
82
|
+
- command: exec
|
|
83
|
+
lang: pwsh
|
|
84
|
+
code: |
|
|
85
|
+
dashcam track --name="Web Logs" --type="web" --pattern="*"
|
|
86
|
+
dashcam track --name=TestDriver --type=app --pattern="C:\Users\testdriver\Documents\testdriver.log"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Starting Dashcam
|
|
90
|
+
|
|
91
|
+
The final step in our `lifecycle/prerun.yaml` script is to start Dashcam recording.
|
|
92
|
+
|
|
93
|
+
```yaml lifecycle/prerun.yaml
|
|
94
|
+
...
|
|
95
|
+
- command: exec
|
|
96
|
+
lang: pwsh
|
|
97
|
+
code: dashcam start
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Publishing replays to a project in your account
|
|
101
|
+
|
|
102
|
+
Lastly, in the `lifecycle/postrun.yaml` script, we publish the recorded Dashcam session to a project in your Dashcam account. Make sure to replace `<YOUR_PROJECT_ID>` with the actual ID of your project.
|
|
103
|
+
|
|
104
|
+
```yaml lifecycle/postrun.yaml
|
|
105
|
+
- prompt: send dashcam recording to server
|
|
106
|
+
# this script tells TestDriver Dashcam to send the recording to the server
|
|
107
|
+
commands:
|
|
108
|
+
- command: exec
|
|
109
|
+
lang: pwsh
|
|
110
|
+
code: dashcam -t '${TD_THIS_FILE}' -p -k <YOUR_PROJECT_ID> # optional add `-k MYFOLDERID` for the id of a folder in your Projects page at app.testdriver.ai
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
<Info>
|
|
114
|
+
`${TD_THIS_FILE}` is an environment variable set by TestDriver that contains
|
|
115
|
+
the name of the current test file being executed. This will be used as the
|
|
116
|
+
title of the Dashcam recording. For more info see [parallel testing
|
|
117
|
+
docs](/features/parallel-testing).
|
|
118
|
+
</Info>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Environment Variables"
|
|
3
|
+
sidebarTitle: "Environment Variables"
|
|
4
|
+
description: "Learn how which environment variables are supported by TestDriver."
|
|
5
|
+
icon: "sliders-up"
|
|
6
|
+
mode: "wide"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
import GitignoreWarning from "/snippets/gitignore-warning.mdx";
|
|
10
|
+
|
|
11
|
+
The supported environment variables in TestDriver are:
|
|
12
|
+
|
|
13
|
+
<div className="env-vars-table">
|
|
14
|
+
| Variable | Type | Description |
|
|
15
|
+
|:---------------:|:------------:|:-------------------------------------------------------------------------------:|
|
|
16
|
+
| `TD_ANALYTICS` | `boolean` | Send analytics to TestDriver servers. This helps provide feedback to inform our roadmap. |
|
|
17
|
+
| `TD_API_KEY` | `string` | Set this to spawn VMs with TestDriver Pro. |
|
|
18
|
+
</div>
|
|
19
|
+
<GitignoreWarning />
|
|
20
|
+
## Example
|
|
21
|
+
|
|
22
|
+
```bash .env
|
|
23
|
+
TD_API_KEY=your_api_key
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
In this example `.env` file, we're running a website test in a local Linux VM with a resolution of 1024x768. The terminal will be minimized, and the overlay won't be shown. Analytics will be sent to TestDriver servers.
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Lifecycle Files"
|
|
3
|
+
sidebarTitle: "Lifecycle Files"
|
|
4
|
+
description: "Learn how to customize TestDriver execution with lifecycle files for setup, provisioning, and cleanup."
|
|
5
|
+
icon: "wrench"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
Lifecycle files are YAML files placed in your repository's `lifecycle/` directory. TestDriver automatically executes these files during the appropriate phases:
|
|
13
|
+
|
|
14
|
+
- **`lifecycle/provision.yaml`**: Executed when a new sandbox is created
|
|
15
|
+
- **`lifecycle/prerun.yaml`**: Executed before tests run
|
|
16
|
+
- **`lifecycle/postrun.yaml`**: Executed after tests complete
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## File Structure
|
|
21
|
+
|
|
22
|
+
All lifecycle files follow the standard TestDriver YAML format:
|
|
23
|
+
|
|
24
|
+
```yaml
|
|
25
|
+
version: 6.0.0
|
|
26
|
+
steps:
|
|
27
|
+
- prompt: description of what this step does
|
|
28
|
+
commands:
|
|
29
|
+
- command: exec
|
|
30
|
+
lang: pwsh
|
|
31
|
+
code: |
|
|
32
|
+
# Your PowerShell commands here
|
|
33
|
+
- command: wait-for-text
|
|
34
|
+
text: "Expected text"
|
|
35
|
+
timeout: 30000
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Provision Scripts
|
|
41
|
+
|
|
42
|
+
The `lifecycle/provision.yaml` file is executed when a new sandbox is created. This is ideal for installing dependencies, setting up the environment, or preparing the system for testing.
|
|
43
|
+
|
|
44
|
+
### Example
|
|
45
|
+
|
|
46
|
+
```yaml lifecycle/provision.yaml
|
|
47
|
+
version: 6.0.0
|
|
48
|
+
steps:
|
|
49
|
+
- prompt: setup testing environment
|
|
50
|
+
commands:
|
|
51
|
+
- command: exec
|
|
52
|
+
lang: pwsh
|
|
53
|
+
code: |
|
|
54
|
+
Start-Process "C:\Program Files\Google\Chrome\Application\chrome.exe" -ArgumentList @(
|
|
55
|
+
"--start-maximized",
|
|
56
|
+
"--disable-infobars",
|
|
57
|
+
"--disable-fre",
|
|
58
|
+
"--no-default-browser-check",
|
|
59
|
+
"--no-first-run",
|
|
60
|
+
"--guest",
|
|
61
|
+
"${TD_WEBSITE}"
|
|
62
|
+
)
|
|
63
|
+
- command: wait-for-text
|
|
64
|
+
text: ${TD_WEBSITE}
|
|
65
|
+
timeout: 60000
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Common provision tasks:
|
|
69
|
+
|
|
70
|
+
- Installing software dependencies
|
|
71
|
+
- Setting up browser extensions
|
|
72
|
+
- Configuring system settings
|
|
73
|
+
- Downloading test data or assets
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Prerun Scripts
|
|
78
|
+
|
|
79
|
+
The `lifecycle/prerun.yaml` file is executed before each test run irrespective of whether its a new sandbox or an already running one. This is useful for preparing the immediate test environment.
|
|
80
|
+
|
|
81
|
+
### Example
|
|
82
|
+
|
|
83
|
+
```yaml lifecycle/prerun.yaml
|
|
84
|
+
version: 6.0.0
|
|
85
|
+
session: 67f00511acbd9ccac373edf7
|
|
86
|
+
steps:
|
|
87
|
+
- prompt: start dashcam
|
|
88
|
+
commands:
|
|
89
|
+
- command: exec
|
|
90
|
+
lang: pwsh
|
|
91
|
+
code: dashcam track --name=TestDriver --type=app --pattern="C:\Users\testdriver\Documents\testdriver.log"
|
|
92
|
+
- command: exec
|
|
93
|
+
lang: pwsh
|
|
94
|
+
code: dashcam start
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Common prerun tasks:
|
|
98
|
+
|
|
99
|
+
- Opening applications or browsers
|
|
100
|
+
- Navigating to starting pages
|
|
101
|
+
- Clearing application state
|
|
102
|
+
- Starting monitoring tools
|
|
103
|
+
- Setting environment variables
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Postrun Scripts
|
|
108
|
+
|
|
109
|
+
The `lifecycle/postrun.yaml` file is executed after tests complete. This is useful for cleanup tasks, generating reports, or capturing final state information.
|
|
110
|
+
|
|
111
|
+
### Example
|
|
112
|
+
|
|
113
|
+
```yaml lifecycle/postrun.yaml
|
|
114
|
+
version: 6.0.0
|
|
115
|
+
steps:
|
|
116
|
+
- prompt: cleanup and generate reports
|
|
117
|
+
commands:
|
|
118
|
+
- command: exec
|
|
119
|
+
lang: pwsh
|
|
120
|
+
code: dashcam -t 'demo-test-title' -p # use '${TD_THIS_FILE}' to dynamically set the title for the recording
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Common postrun tasks:
|
|
124
|
+
|
|
125
|
+
- Generating test reports
|
|
126
|
+
- Capturing screenshots or logs
|
|
127
|
+
- Cleaning up temporary files
|
|
128
|
+
- Stopping background processes
|
|
129
|
+
- Uploading artifacts
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Environment Variables
|
|
134
|
+
|
|
135
|
+
Lifecycle files have access to TestDriver environment variables:
|
|
136
|
+
|
|
137
|
+
- `${TD_WEBSITE}`: The target website URL
|
|
138
|
+
- `${TD_THIS_FILE}`: Current test file name
|
|
139
|
+
- `${TD_API_KEY}`: Your TestDriver API key
|
|
140
|
+
- Custom variables defined in your workflow
|
|
141
|
+
|
|
142
|
+
### Using variables in lifecycle files:
|
|
143
|
+
|
|
144
|
+
```yaml highlight={8, 9}
|
|
145
|
+
version: 6.0.0
|
|
146
|
+
steps:
|
|
147
|
+
- prompt: setup with custom variables
|
|
148
|
+
commands:
|
|
149
|
+
- command: exec
|
|
150
|
+
lang: pwsh
|
|
151
|
+
code: |
|
|
152
|
+
Write-Host "Testing website: ${TD_WEBSITE}"
|
|
153
|
+
Write-Host "Current test: ${TD_THIS_FILE}"
|
|
154
|
+
# Your setup commands here
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Best Practices
|
|
160
|
+
|
|
161
|
+
### Keep lifecycle files focused
|
|
162
|
+
|
|
163
|
+
Each lifecycle file should have a specific purpose:
|
|
164
|
+
|
|
165
|
+
- **Provision**: System-level setup
|
|
166
|
+
- **Prerun**: Test preparation
|
|
167
|
+
- **Postrun**: Cleanup and reporting
|
|
168
|
+
|
|
169
|
+
### Use appropriate commands
|
|
170
|
+
|
|
171
|
+
- Use [`exec`](/commands/exec) with `lang: pwsh` for system commands
|
|
172
|
+
- Use TestDriver commands ([`wait-for-text`](/commands/wait-for-text), [`hover-text`](/commands/hover-text), etc.) for UI interactions
|
|
173
|
+
- Include appropriate timeouts for reliability
|
|
174
|
+
|
|
175
|
+
### Error handling
|
|
176
|
+
|
|
177
|
+
Include checks to verify operations completed successfully:
|
|
178
|
+
|
|
179
|
+
```yaml
|
|
180
|
+
- command: exec
|
|
181
|
+
lang: pwsh
|
|
182
|
+
code: |
|
|
183
|
+
if (!(Test-Path "C:\Program Files\Google\Chrome\Application\chrome.exe")) {
|
|
184
|
+
throw "Chrome not found"
|
|
185
|
+
}
|
|
186
|
+
Start-Process "C:\Program Files\Google\Chrome\Application\chrome.exe"
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Performance considerations
|
|
190
|
+
|
|
191
|
+
- Keep provision scripts efficient to minimize sandbox setup time
|
|
192
|
+
- Cache dependencies when possible
|
|
193
|
+
- Use lightweight operations in prerun/postrun scripts
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## File Placement
|
|
198
|
+
|
|
199
|
+
Place lifecycle files in your repository's root directory:
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
your-project/
|
|
203
|
+
├── testdriver/
|
|
204
|
+
│ ├── demo-test.yaml
|
|
205
|
+
│ └── lifecycle/
|
|
206
|
+
│ ├── provision.yaml
|
|
207
|
+
│ ├── prerun.yaml
|
|
208
|
+
│ └── postrun.yaml
|
|
209
|
+
│ ├── screenshots/
|
|
210
|
+
│ │ └──
|
|
211
|
+
│ └── snippets/
|
|
212
|
+
│ └──
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Execution Order
|
|
218
|
+
|
|
219
|
+
When TestDriver runs, lifecycle files execute in this order:
|
|
220
|
+
|
|
221
|
+
1. **Provision** (once per sandbox creation)
|
|
222
|
+
2. **Prerun** (before each test)
|
|
223
|
+
3. **Your test files**
|
|
224
|
+
4. **Postrun** (after each test)
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Troubleshooting
|
|
229
|
+
|
|
230
|
+
### Lifecycle files not executing
|
|
231
|
+
|
|
232
|
+
- Verify files are in the `testdriver/lifecycle/` directory
|
|
233
|
+
- Check YAML syntax is valid
|
|
234
|
+
- Ensure version number is specified
|
|
235
|
+
- Verify file permissions in your repository
|
|
236
|
+
|
|
237
|
+
### Commands failing
|
|
238
|
+
|
|
239
|
+
- Check PowerShell syntax for [`exec`](/commands/exec) commands
|
|
240
|
+
- Verify file paths exist on the target system
|
|
241
|
+
- Add error handling and logging
|
|
242
|
+
- Use appropriate timeouts for operations
|