testdriverai 7.3.2 → 7.3.4
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/.github/workflows/acceptance-linux-scheduled.yaml +45 -0
- package/.github/workflows/acceptance-windows-scheduled.yaml +54 -0
- package/.github/workflows/acceptance.yaml +106 -0
- package/.github/workflows/publish.yaml +75 -0
- package/.github/workflows/test-init.yml +157 -0
- package/.github/workflows/testdriver.yml +170 -0
- package/.github/workflows/windows-self-hosted.yaml +82 -0
- package/.prettierignore +4 -0
- package/.prettierrc +1 -0
- package/CHANGELOG.md +162 -0
- package/SKILLs.md +17 -0
- package/ai/.claude-plugin/plugin.json +9 -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/_scripts/generate-skills.js +149 -0
- package/docs/_scripts/link-replacer.js +164 -0
- package/docs/_scripts/upload-docs-to-openai.js +284 -0
- package/docs/claude-mcp-plugin.mdx +160 -0
- package/docs/docs.json +394 -0
- package/docs/github-integration-setup.md +266 -0
- package/docs/guide/best-practices-polling.mdx +154 -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/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/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 +282 -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 +852 -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 +282 -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 +754 -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/{ai/skills/testdriver:ai/SKILL.md → docs/v7/ai.mdx} +4 -3
- package/{ai/skills/testdriver:assert/SKILL.md → docs/v7/assert.mdx} +4 -3
- package/{ai/skills/testdriver:aws-setup/SKILL.md → docs/v7/aws-setup.mdx} +4 -3
- package/{ai/skills/testdriver:caching/SKILL.md → docs/v7/caching.mdx} +7 -3
- package/{ai/skills/testdriver:captcha/SKILL.md → docs/v7/captcha.mdx} +4 -3
- package/{ai/skills/testdriver:ci-cd/SKILL.md → docs/v7/ci-cd.mdx} +4 -3
- package/{ai/skills/testdriver:click/SKILL.md → docs/v7/click.mdx} +4 -3
- package/{ai/skills/testdriver:client/SKILL.md → docs/v7/client.mdx} +8 -3
- package/{ai/skills/testdriver:cloud/SKILL.md → docs/v7/cloud.mdx} +4 -3
- package/{ai/skills/testdriver:customizing-devices/SKILL.md → docs/v7/customizing-devices.mdx} +3 -3
- package/{ai/skills/testdriver:dashcam/SKILL.md → docs/v7/dashcam.mdx} +4 -3
- package/docs/v7/debugging-with-screenshots.mdx +402 -0
- package/{ai/skills/testdriver:device-config/SKILL.md → docs/v7/device-config.mdx} +3 -3
- package/{ai/skills/testdriver:double-click/SKILL.md → docs/v7/double-click.mdx} +3 -3
- package/{ai/skills/testdriver:elements/SKILL.md → docs/v7/elements.mdx} +4 -3
- package/{ai/skills/testdriver:enterprise/SKILL.md → docs/v7/enterprise.mdx} +5 -3
- package/docs/v7/examples.mdx +5 -0
- package/{ai/skills/testdriver:exec/SKILL.md → docs/v7/exec.mdx} +4 -3
- package/{ai/skills/testdriver:find/SKILL.md → docs/v7/find.mdx} +4 -3
- package/{ai/skills/testdriver:focus-application/SKILL.md → docs/v7/focus-application.mdx} +4 -3
- package/{ai/skills/testdriver:generating-tests/SKILL.md → docs/v7/generating-tests.mdx} +3 -3
- package/{ai/skills/testdriver:hover/SKILL.md → docs/v7/hover.mdx} +4 -3
- package/{ai/skills/testdriver:locating-elements/SKILL.md → docs/v7/locating-elements.mdx} +3 -3
- package/{ai/skills/testdriver:making-assertions/SKILL.md → docs/v7/making-assertions.mdx} +3 -3
- package/{ai/skills/testdriver:mouse-down/SKILL.md → docs/v7/mouse-down.mdx} +3 -3
- package/{ai/skills/testdriver:mouse-up/SKILL.md → docs/v7/mouse-up.mdx} +3 -3
- package/docs/v7/ocr.mdx +236 -0
- package/{ai/skills/testdriver:performing-actions/SKILL.md → docs/v7/performing-actions.mdx} +3 -3
- package/{ai/skills/testdriver:press-keys/SKILL.md → docs/v7/press-keys.mdx} +4 -3
- package/{ai/skills/testdriver:quickstart/SKILL.md → docs/v7/quickstart.mdx} +6 -20
- package/{ai/skills/testdriver:reusable-code/SKILL.md → docs/v7/reusable-code.mdx} +3 -3
- package/{ai/skills/testdriver:right-click/SKILL.md → docs/v7/right-click.mdx} +3 -3
- package/{ai/skills/testdriver:running-tests/SKILL.md → docs/v7/running-tests.mdx} +7 -3
- package/{ai/skills/testdriver:screenshot/SKILL.md → docs/v7/screenshot.mdx} +88 -6
- package/{ai/skills/testdriver:scroll/SKILL.md → docs/v7/scroll.mdx} +40 -3
- package/{ai/skills/testdriver:secrets/SKILL.md → docs/v7/secrets.mdx} +3 -3
- package/{ai/skills/testdriver:self-hosted/SKILL.md → docs/v7/self-hosted.mdx} +4 -3
- package/{ai/skills/testdriver:type/SKILL.md → docs/v7/type.mdx} +4 -3
- package/{ai/skills/testdriver:variables/SKILL.md → docs/v7/variables.mdx} +3 -3
- package/{ai/skills/testdriver:waiting-for-elements/SKILL.md → docs/v7/waiting-for-elements.mdx} +3 -3
- package/{ai/skills/testdriver:what-is-testdriver/SKILL.md → docs/v7/what-is-testdriver.mdx} +3 -3
- package/eslint.config.js +67 -0
- package/examples/ai.test.mjs +30 -0
- package/examples/assert.test.mjs +47 -0
- package/examples/captcha-api.test.mjs +50 -0
- package/examples/chrome-extension.test.mjs +94 -0
- package/examples/drag-and-drop.test.mjs +58 -0
- package/examples/element-not-found.test.mjs +26 -0
- package/examples/exec-output.test.mjs +59 -0
- package/examples/exec-pwsh.test.mjs +57 -0
- package/examples/focus-window.test.mjs +36 -0
- package/examples/formatted-logging.test.mjs +26 -0
- package/examples/hover-image.test.mjs +52 -0
- package/examples/hover-text-with-description.test.mjs +56 -0
- package/examples/hover-text.test.mjs +27 -0
- package/examples/installer.test.mjs +49 -0
- package/examples/launch-vscode-linux.test.mjs +54 -0
- package/examples/match-image.test.mjs +54 -0
- package/examples/no-provision.test.mjs +23 -0
- package/examples/press-keys.test.mjs +50 -0
- package/examples/prompt.test.mjs +33 -0
- package/examples/scroll-keyboard.test.mjs +37 -0
- package/examples/scroll-until-image.test.mjs +39 -0
- package/examples/scroll-until-text.test.mjs +67 -0
- package/examples/scroll.test.mjs +41 -0
- package/examples/type.test.mjs +45 -0
- package/examples/windows-installer.test.mjs +53 -0
- package/jsconfig.json +26 -0
- package/manual/test-init-command.js +223 -0
- package/mcp-server/README.md +312 -0
- package/mcp-server/mcp-app.html +28 -0
- package/mcp-server/mcp-config.example.json +19 -0
- package/mcp-server/package-lock.json +4018 -0
- package/mcp-server/package.json +29 -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 +2313 -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 +2 -17
- package/scripts/generate-skills.js +94 -0
- package/setup/aws/cloudformation.yaml +470 -0
- package/setup/aws/spawn-runner.sh +190 -0
- package/test/api-resilience.test.mjs +0 -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/test-ide-preview.mjs +17 -0
- package/tests/airbnb-booking.test.mjs +39 -0
- package/tests/airbnb-search.test.mjs +43 -0
- package/tests/example.test.js +33 -0
- package/tests/login.js +28 -0
- package/vitest.config.mjs +24 -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
- package/ai/skills/testdriver:examples/SKILL.md +0 -7
- package/ai/skills/testdriver:mcp-workflow/SKILL.md +0 -410
- package/ai/skills/testdriver:testdriver/SKILL.md +0 -523
package/docs/docs.json
ADDED
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://mintlify.com/docs.json",
|
|
3
|
+
"theme": "aspen",
|
|
4
|
+
"name": "TestDriver",
|
|
5
|
+
"colors": {
|
|
6
|
+
"primary": "#b3d334",
|
|
7
|
+
"light": "#b3d334",
|
|
8
|
+
"dark": "#152a65"
|
|
9
|
+
},
|
|
10
|
+
"appearance": {
|
|
11
|
+
"default": "dark"
|
|
12
|
+
},
|
|
13
|
+
"favicon": "/images/template/icon.png",
|
|
14
|
+
"navigation": {
|
|
15
|
+
"versions": [
|
|
16
|
+
{
|
|
17
|
+
"version": "v7",
|
|
18
|
+
"groups": [
|
|
19
|
+
{
|
|
20
|
+
"group": "Overview",
|
|
21
|
+
"pages": [
|
|
22
|
+
"/v7/quickstart",
|
|
23
|
+
"/v7/what-is-testdriver",
|
|
24
|
+
"/v7/examples",
|
|
25
|
+
{
|
|
26
|
+
"group": "Plans & Pricing",
|
|
27
|
+
"icon": "server",
|
|
28
|
+
"pages": [
|
|
29
|
+
"/v7/cloud",
|
|
30
|
+
"/v7/self-hosted",
|
|
31
|
+
"/v7/enterprise"
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"group": "Creating Tests",
|
|
38
|
+
"pages": [
|
|
39
|
+
"/v7/generating-tests",
|
|
40
|
+
"/v7/device-config",
|
|
41
|
+
"/v7/locating-elements",
|
|
42
|
+
"/v7/waiting-for-elements",
|
|
43
|
+
"/v7/performing-actions",
|
|
44
|
+
"/v7/making-assertions"
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"group": "Running Tests",
|
|
49
|
+
"pages": [
|
|
50
|
+
"/v7/running-tests",
|
|
51
|
+
"/v7/caching",
|
|
52
|
+
"/v7/ci-cd"
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"group": "Scaling",
|
|
57
|
+
"pages": [
|
|
58
|
+
"/v7/variables",
|
|
59
|
+
"/v7/secrets",
|
|
60
|
+
"/v7/reusable-code",
|
|
61
|
+
{
|
|
62
|
+
"group": "Self-Hosting Setup",
|
|
63
|
+
"icon": "server",
|
|
64
|
+
"pages": [
|
|
65
|
+
"/v7/aws-setup"
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"group": "Actions",
|
|
72
|
+
"pages": [
|
|
73
|
+
"/v7/ai",
|
|
74
|
+
"/v7/assert",
|
|
75
|
+
"/v7/captcha",
|
|
76
|
+
"/v7/click",
|
|
77
|
+
"/v7/double-click",
|
|
78
|
+
"/v7/exec",
|
|
79
|
+
"/v7/find",
|
|
80
|
+
"/v7/focus-application",
|
|
81
|
+
"/v7/hover",
|
|
82
|
+
"/v7/mouse-down",
|
|
83
|
+
"/v7/mouse-up",
|
|
84
|
+
"/v7/ocr",
|
|
85
|
+
"/v7/press-keys",
|
|
86
|
+
"/v7/right-click",
|
|
87
|
+
"/v7/screenshot",
|
|
88
|
+
"/v7/type",
|
|
89
|
+
"/v7/scroll"
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"group": "SDK",
|
|
94
|
+
"pages":
|
|
95
|
+
[
|
|
96
|
+
"/v7/elements",
|
|
97
|
+
"/v7/client",
|
|
98
|
+
"/v7/dashcam"
|
|
99
|
+
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"version": "v6",
|
|
106
|
+
"groups": [
|
|
107
|
+
{
|
|
108
|
+
"group": "Overview",
|
|
109
|
+
"pages": [
|
|
110
|
+
"/v6/overview/what-is-testdriver",
|
|
111
|
+
{
|
|
112
|
+
"group": "Concepts",
|
|
113
|
+
"icon": "book",
|
|
114
|
+
"pages": [
|
|
115
|
+
"/v6/features/selectorless",
|
|
116
|
+
"/v6/overview/comparison",
|
|
117
|
+
"/v6/overview/performance",
|
|
118
|
+
"/v6/overview/faq"
|
|
119
|
+
]
|
|
120
|
+
},
|
|
121
|
+
"/v6/account/enterprise"
|
|
122
|
+
]
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"group": "Get Started",
|
|
126
|
+
"pages": [
|
|
127
|
+
"/v6/overview/quickstart",
|
|
128
|
+
{
|
|
129
|
+
"group": "CLI",
|
|
130
|
+
"icon": "terminal",
|
|
131
|
+
"pages": [
|
|
132
|
+
"/v6/cli/overview",
|
|
133
|
+
{
|
|
134
|
+
"group": "Commands",
|
|
135
|
+
"icon": "command",
|
|
136
|
+
"pages": [
|
|
137
|
+
"/v6/interactive/explore",
|
|
138
|
+
"/v6/interactive/run",
|
|
139
|
+
"/v6/interactive/save"
|
|
140
|
+
]
|
|
141
|
+
}
|
|
142
|
+
]
|
|
143
|
+
},
|
|
144
|
+
"/v6/getting-started/self-hosting",
|
|
145
|
+
"/v6/getting-started/playwright",
|
|
146
|
+
"/v6/getting-started/vscode"
|
|
147
|
+
]
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"group": "Examples",
|
|
151
|
+
"pages": [
|
|
152
|
+
{
|
|
153
|
+
"group": "Apps",
|
|
154
|
+
"icon": "laptop",
|
|
155
|
+
"pages": [
|
|
156
|
+
"/v6/apps/static-websites",
|
|
157
|
+
"/v6/apps/desktop-apps",
|
|
158
|
+
"/v6/apps/chrome-extensions",
|
|
159
|
+
"/v6/apps/mobile-apps",
|
|
160
|
+
"/v6/apps/tauri-apps"
|
|
161
|
+
]
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"group": "Scenarios",
|
|
165
|
+
"icon": "computer-mouse",
|
|
166
|
+
"pages": [
|
|
167
|
+
"/v6/scenarios/ai-chatbot",
|
|
168
|
+
"/v6/scenarios/cookie-banner",
|
|
169
|
+
"/v6/scenarios/file-upload",
|
|
170
|
+
"/v6/scenarios/form-filling",
|
|
171
|
+
"/v6/scenarios/log-in",
|
|
172
|
+
"/v6/scenarios/pdf-generation",
|
|
173
|
+
"/v6/scenarios/spell-check"
|
|
174
|
+
]
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"group": "Build Systems",
|
|
178
|
+
"icon": "helmet-safety",
|
|
179
|
+
"pages": [
|
|
180
|
+
"/v6/integrations/electron",
|
|
181
|
+
"/v6/integrations/netlify",
|
|
182
|
+
"/v6/integrations/vercel"
|
|
183
|
+
]
|
|
184
|
+
}
|
|
185
|
+
]
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"group": "Guide",
|
|
189
|
+
"pages": [
|
|
190
|
+
{
|
|
191
|
+
"group": "Configuration",
|
|
192
|
+
"icon": "desktop",
|
|
193
|
+
"pages": [
|
|
194
|
+
"/v6/guide/authentication",
|
|
195
|
+
"/v6/guide/variables",
|
|
196
|
+
"/v6/guide/lifecycle",
|
|
197
|
+
"/v6/guide/dashcam",
|
|
198
|
+
"/v6/guide/environment-variables",
|
|
199
|
+
"/v6/action/ami"
|
|
200
|
+
]
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
"group": "Writing",
|
|
204
|
+
"icon": "pencil",
|
|
205
|
+
"pages": [
|
|
206
|
+
"/v6/features/generation",
|
|
207
|
+
"/v6/guide/locating",
|
|
208
|
+
"/v6/guide/waiting",
|
|
209
|
+
"/v6/guide/assertions",
|
|
210
|
+
"/v6/guide/code",
|
|
211
|
+
"/v6/features/reusable-snippets",
|
|
212
|
+
"/v6/guide/protips"
|
|
213
|
+
]
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"group": "Importing",
|
|
217
|
+
"icon": "file-import",
|
|
218
|
+
"pages": [
|
|
219
|
+
"/v6/importing/csv",
|
|
220
|
+
"/v6/importing/gherkin",
|
|
221
|
+
"/v6/importing/jira",
|
|
222
|
+
"/v6/importing/testrail"
|
|
223
|
+
]
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"group": "Running",
|
|
227
|
+
"icon": "play",
|
|
228
|
+
"pages": [
|
|
229
|
+
"/v6/getting-started/running",
|
|
230
|
+
"/v6/getting-started/ci",
|
|
231
|
+
"/v6/features/parallel-testing",
|
|
232
|
+
"/v6/action/performance",
|
|
233
|
+
"/v6/action/secrets"
|
|
234
|
+
]
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"group": "Maintaining",
|
|
238
|
+
"icon": "wrench",
|
|
239
|
+
"pages": ["/v6/getting-started/editing", "/v6/features/auto-healing"]
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
"group": "Reporting",
|
|
243
|
+
"icon": "chart-simple",
|
|
244
|
+
"pages": ["/v6/exporting/junit", "/v6/bugs/jira"]
|
|
245
|
+
}
|
|
246
|
+
]
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"group": "Reference",
|
|
250
|
+
"pages": [
|
|
251
|
+
{
|
|
252
|
+
"group": "YAML",
|
|
253
|
+
"icon": "file-code",
|
|
254
|
+
"pages": [
|
|
255
|
+
"/v6/commands/assert",
|
|
256
|
+
"/v6/commands/exec",
|
|
257
|
+
"/v6/commands/focus-application",
|
|
258
|
+
"/v6/commands/hover-image",
|
|
259
|
+
"/v6/commands/hover-text",
|
|
260
|
+
"/v6/commands/if",
|
|
261
|
+
"/v6/commands/match-image",
|
|
262
|
+
"/v6/commands/press-keys",
|
|
263
|
+
"/v6/commands/remember",
|
|
264
|
+
"/v6/commands/run",
|
|
265
|
+
"/v6/commands/scroll",
|
|
266
|
+
"/v6/commands/scroll-until-image",
|
|
267
|
+
"/v6/commands/scroll-until-text",
|
|
268
|
+
"/v6/commands/type",
|
|
269
|
+
"/v6/commands/wait",
|
|
270
|
+
"/v6/commands/wait-for-image",
|
|
271
|
+
"/v6/commands/wait-for-text"
|
|
272
|
+
]
|
|
273
|
+
}
|
|
274
|
+
]
|
|
275
|
+
}
|
|
276
|
+
]
|
|
277
|
+
}
|
|
278
|
+
]
|
|
279
|
+
},
|
|
280
|
+
"logo": {
|
|
281
|
+
"light": "/images/template/light.png",
|
|
282
|
+
"dark": "/images/template/dark.png",
|
|
283
|
+
"href": "https://testdriver.ai"
|
|
284
|
+
},
|
|
285
|
+
"navbar": {
|
|
286
|
+
"links": [
|
|
287
|
+
{
|
|
288
|
+
"label": "Discord",
|
|
289
|
+
"icon": "discord",
|
|
290
|
+
"href": "https://discord.com/invite/cWDFW8DzPm"
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
"label": "Book a Demo",
|
|
294
|
+
"href": "http://testdriver.ai/demo",
|
|
295
|
+
"icon": "calendar"
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
"icon": "gauge-high",
|
|
299
|
+
"label": "Dashboard",
|
|
300
|
+
"href": "https://console.testdriver.ai"
|
|
301
|
+
}
|
|
302
|
+
]
|
|
303
|
+
},
|
|
304
|
+
"footer": {
|
|
305
|
+
"socials": {
|
|
306
|
+
"x": "https://x.com/testdriverai",
|
|
307
|
+
"github": "https://github.com/testdriverai",
|
|
308
|
+
"discord": "https://discord.com/invite/cWDFW8DzPm",
|
|
309
|
+
"youtube": "https://www.youtube.com/@testdriverai"
|
|
310
|
+
}
|
|
311
|
+
},
|
|
312
|
+
"redirects": [
|
|
313
|
+
{
|
|
314
|
+
"source": "/guides/github-actions",
|
|
315
|
+
"destination": "/v6/action/setup"
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
"source": "/reference/test-steps",
|
|
319
|
+
"destination": "/v6/features/selectorless"
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
"source": "/guides/debugging-test-runs",
|
|
323
|
+
"destination": "/v6/getting-started/editing"
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
"source": "/overview/:slug*",
|
|
327
|
+
"destination": "/v6/overview/:slug*"
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
"source": "/features/:slug*",
|
|
331
|
+
"destination": "/v6/features/:slug*"
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
"source": "/getting-started/:slug*",
|
|
335
|
+
"destination": "/v6/getting-started/:slug*"
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
"source": "/cli/:slug*",
|
|
339
|
+
"destination": "/v6/cli/:slug*"
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
"source": "/interactive/:slug*",
|
|
343
|
+
"destination": "/v6/interactive/:slug*"
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
"source": "/guide/:slug*",
|
|
347
|
+
"destination": "/v6/guide/:slug*"
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
"source": "/action/:slug*",
|
|
351
|
+
"destination": "/v6/action/:slug*"
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
"source": "/account/:slug*",
|
|
355
|
+
"destination": "/v6/account/:slug*"
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
"source": "/apps/:slug*",
|
|
359
|
+
"destination": "/v6/apps/:slug*"
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
"source": "/scenarios/:slug*",
|
|
363
|
+
"destination": "/v6/scenarios/:slug*"
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
"source": "/integrations/:slug*",
|
|
367
|
+
"destination": "/v6/integrations/:slug*"
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
"source": "/importing/:slug*",
|
|
371
|
+
"destination": "/v6/importing/:slug*"
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
"source": "/exporting/:slug*",
|
|
375
|
+
"destination": "/v6/exporting/:slug*"
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
"source": "/bugs/:slug*",
|
|
379
|
+
"destination": "/v6/bugs/:slug*"
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
"source": "/commands/:slug*",
|
|
383
|
+
"destination": "/v6/commands/:slug*"
|
|
384
|
+
}
|
|
385
|
+
],
|
|
386
|
+
"integrations": {
|
|
387
|
+
"segment": {
|
|
388
|
+
"key": "oh4PK60u4Qvm2DKIjxfhxd0KCdRbQsQE"
|
|
389
|
+
},
|
|
390
|
+
"posthog": {
|
|
391
|
+
"apiKey": "phc_ovOQ2HFpqFwPVqaxE5plJmI9buPMsz024FB2iajItqn"
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
# GitHub Integration Setup
|
|
2
|
+
|
|
3
|
+
TestDriver automatically posts beautiful test result comments to GitHub Pull Requests, including:
|
|
4
|
+
- ✅ Test results summary with pass/fail counts
|
|
5
|
+
- 🎥 Dashcam GIF replays embedded directly in comments
|
|
6
|
+
- 📊 Detailed test statistics and duration
|
|
7
|
+
- 🔴 Exception details with stack traces
|
|
8
|
+
- 📋 Links to full test runs
|
|
9
|
+
|
|
10
|
+
This guide explains how to configure GitHub authentication so TestDriver can post these comments.
|
|
11
|
+
|
|
12
|
+
## How It Works
|
|
13
|
+
|
|
14
|
+
TestDriver's Vitest plugin automatically detects GitHub context and posts comments when tests complete. Here's what it needs:
|
|
15
|
+
|
|
16
|
+
### Required Environment Variables
|
|
17
|
+
|
|
18
|
+
1. **GITHUB_TOKEN** or **GH_TOKEN** - GitHub Personal Access Token for authentication
|
|
19
|
+
2. **GITHUB_REPOSITORY** - Repository in `owner/repo` format (auto-detected in GitHub Actions)
|
|
20
|
+
3. **GITHUB_PR_NUMBER** - Pull Request number (auto-detected in GitHub Actions)
|
|
21
|
+
4. **GITHUB_SHA** - Commit SHA (optional, auto-detected in GitHub Actions)
|
|
22
|
+
|
|
23
|
+
### Auto-Detection in GitHub Actions
|
|
24
|
+
|
|
25
|
+
When running in GitHub Actions, most variables are automatically available:
|
|
26
|
+
- `GITHUB_REPOSITORY` - Set automatically
|
|
27
|
+
- `GITHUB_SHA` - Set automatically
|
|
28
|
+
- `GITHUB_REF` - Used to detect PR number
|
|
29
|
+
- Pull request info extracted from event data
|
|
30
|
+
|
|
31
|
+
You only need to configure the token permissions!
|
|
32
|
+
|
|
33
|
+
### Method 1: GitHub Actions (Recommended)
|
|
34
|
+
|
|
35
|
+
GitHub Actions provides automatic authentication. TestDriver will detect the context automatically.
|
|
36
|
+
|
|
37
|
+
**Required Permissions:**
|
|
38
|
+
|
|
39
|
+
In your workflow file, use the built-in `GITHUB_TOKEN` with write permissions:
|
|
40
|
+
|
|
41
|
+
```yaml
|
|
42
|
+
name: TestDriver Tests
|
|
43
|
+
|
|
44
|
+
on:
|
|
45
|
+
pull_request:
|
|
46
|
+
types: [opened, synchronize]
|
|
47
|
+
|
|
48
|
+
jobs:
|
|
49
|
+
test:
|
|
50
|
+
runs-on: ubuntu-latest
|
|
51
|
+
permissions:
|
|
52
|
+
contents: read
|
|
53
|
+
pull-requests: write # Required to post comments
|
|
54
|
+
|
|
55
|
+
steps:
|
|
56
|
+
- uses: actions/checkout@v4
|
|
57
|
+
|
|
58
|
+
- name: Setup Node.js
|
|
59
|
+
uses: actions/setup-node@v4
|
|
60
|
+
with:
|
|
61
|
+
node-version: '20'
|
|
62
|
+
|
|
63
|
+
- name: Install dependencies
|
|
64
|
+
run: npm ci
|
|
65
|
+
|
|
66
|
+
- name: Run TestDriver tests
|
|
67
|
+
env:
|
|
68
|
+
TD_API_KEY: ${{ secrets.TD_API_KEY }}
|
|
69
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Automatically provided
|
|
70
|
+
run: vitest run
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**What happens automatically:**
|
|
74
|
+
- `GITHUB_TOKEN`: Provided by GitHub Actions
|
|
75
|
+
- `GITHUB_REPOSITORY`: Automatically set (e.g., `testdriverai/testdriverai`)
|
|
76
|
+
- `GITHUB_REF`: Automatically set (e.g., `refs/pull/123/merge`)
|
|
77
|
+
- PR number: Extracted automatically from `GITHUB_REF` or event data
|
|
78
|
+
|
|
79
|
+
### Method 2: Manual Setup (Local or Other CI)
|
|
80
|
+
|
|
81
|
+
For local development or other CI systems, set these environment variables:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
# .env or export in your shell
|
|
85
|
+
GITHUB_TOKEN=ghp_your_personal_access_token_here
|
|
86
|
+
GITHUB_PR_NUMBER=123
|
|
87
|
+
# GITHUB_REPOSITORY is auto-detected from git if not set
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Creating a Personal Access Token:**
|
|
91
|
+
|
|
92
|
+
1. Go to [GitHub Settings → Developer settings → Personal access tokens](https://github.com/settings/tokens)
|
|
93
|
+
2. Click "Generate new token" → "Generate new token (classic)"
|
|
94
|
+
3. Give it a descriptive name (e.g., "TestDriver CI")
|
|
95
|
+
4. Select scopes:
|
|
96
|
+
- ✅ `repo` (Full control of private repositories)
|
|
97
|
+
- Or just ✅ `public_repo` (for public repositories only)
|
|
98
|
+
5. Click "Generate token"
|
|
99
|
+
6. Copy the token immediately (you won't see it again!)
|
|
100
|
+
7. Store it securely:
|
|
101
|
+
- **In GitHub Actions**: Add as repository secret (`Settings → Secrets and variables → Actions → New repository secret`)
|
|
102
|
+
- **Locally**: Add to `.env` file (and add `.env` to `.gitignore`!)
|
|
103
|
+
|
|
104
|
+
### Method 3: Other CI Systems
|
|
105
|
+
|
|
106
|
+
#### CircleCI
|
|
107
|
+
```yaml
|
|
108
|
+
environment:
|
|
109
|
+
GITHUB_TOKEN: $GITHUB_TOKEN
|
|
110
|
+
GITHUB_REPOSITORY: $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME
|
|
111
|
+
GITHUB_PR_NUMBER: $CIRCLE_PR_NUMBER
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
#### GitLab CI
|
|
115
|
+
```yaml
|
|
116
|
+
variables:
|
|
117
|
+
GITHUB_TOKEN: $GITHUB_TOKEN
|
|
118
|
+
GITHUB_REPOSITORY: "your-org/your-repo"
|
|
119
|
+
GITHUB_PR_NUMBER: $CI_MERGE_REQUEST_IID
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
#### Jenkins
|
|
123
|
+
```groovy
|
|
124
|
+
environment {
|
|
125
|
+
GITHUB_TOKEN = credentials('github-token')
|
|
126
|
+
GITHUB_REPOSITORY = "${env.GITHUB_ORG}/${env.GITHUB_REPO}"
|
|
127
|
+
GITHUB_PR_NUMBER = "${env.CHANGE_ID}"
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Environment Variables Reference
|
|
132
|
+
|
|
133
|
+
| Variable | Priority | Description | Example | Source |
|
|
134
|
+
|----------|----------|-------------|---------|--------|
|
|
135
|
+
| `GITHUB_TOKEN` | 1 | GitHub personal access token | `ghp_abc...` | Auto-provided in GitHub Actions |
|
|
136
|
+
| `GH_TOKEN` | 2 | Alternative GitHub token | `ghp_xyz...` | Manual setup |
|
|
137
|
+
| `GITHUB_REPOSITORY` | - | Repository in `owner/repo` format | `testdriverai/testdriverai` | Auto-set in GitHub Actions |
|
|
138
|
+
| `GITHUB_PR_NUMBER` | - | Pull request number | `123` | Must be set manually or by CI |
|
|
139
|
+
| `GITHUB_SHA` | - | Commit SHA | `abc1234def...` | Auto-set in GitHub Actions |
|
|
140
|
+
| `TESTDRIVER_SKIP_GITHUB_COMMENT` | - | Disable comment posting | `true` | Set to skip comments |
|
|
141
|
+
|
|
142
|
+
**Note**: Git repository info (owner/repo, branch, commit) is auto-detected from your local `.git` directory if not provided via environment variables.
|
|
143
|
+
|
|
144
|
+
## Disabling GitHub Comments
|
|
145
|
+
|
|
146
|
+
To disable GitHub comments:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# Method 1: Set environment variable
|
|
150
|
+
TESTDRIVER_SKIP_GITHUB_COMMENT=true npm run test
|
|
151
|
+
|
|
152
|
+
# Method 2: Remove/unset the GitHub token
|
|
153
|
+
unset GITHUB_TOKEN
|
|
154
|
+
unset GH_TOKEN
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
In GitHub Actions workflow:
|
|
158
|
+
```yaml
|
|
159
|
+
- name: Run tests without GitHub comments
|
|
160
|
+
env:
|
|
161
|
+
TD_API_KEY: ${{ secrets.TD_API_KEY }}
|
|
162
|
+
TESTDRIVER_SKIP_GITHUB_COMMENT: true
|
|
163
|
+
run: vitest run
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Troubleshooting
|
|
167
|
+
|
|
168
|
+
### "GitHub token not found, skipping comment posting"
|
|
169
|
+
|
|
170
|
+
Check that the token is set:
|
|
171
|
+
```bash
|
|
172
|
+
echo $GITHUB_TOKEN # or GH_TOKEN
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### "Neither PR number nor commit SHA found"
|
|
176
|
+
|
|
177
|
+
Set the PR number:
|
|
178
|
+
```bash
|
|
179
|
+
export GITHUB_PR_NUMBER=123
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Or ensure `GITHUB_SHA` is set (auto-set in GitHub Actions).
|
|
183
|
+
|
|
184
|
+
### "Repository info not available"
|
|
185
|
+
|
|
186
|
+
The plugin auto-detects repo info from your `.git` directory. If that fails, set:
|
|
187
|
+
```bash
|
|
188
|
+
export GITHUB_REPOSITORY=owner/repo
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### "Resource not accessible by integration"
|
|
192
|
+
|
|
193
|
+
Your token doesn't have `pull-requests: write` permission. Check:
|
|
194
|
+
- GitHub Actions: Add `permissions.pull-requests: write` to workflow
|
|
195
|
+
- Personal token: Ensure it has `repo` or `public_repo` scope
|
|
196
|
+
|
|
197
|
+
### "Not Found" or "403 Forbidden"
|
|
198
|
+
|
|
199
|
+
- Token doesn't have access to the repository
|
|
200
|
+
- Repository name format is incorrect (must be `owner/repo`)
|
|
201
|
+
- PR number is invalid
|
|
202
|
+
|
|
203
|
+
### Comments not appearing
|
|
204
|
+
|
|
205
|
+
- Check that tests are running in the context of a pull request
|
|
206
|
+
- Verify the token has write access
|
|
207
|
+
- Look for error messages in the test output
|
|
208
|
+
- Run with `DEBUG=testdriver:github` for verbose logging
|
|
209
|
+
|
|
210
|
+
## Security Best Practices
|
|
211
|
+
|
|
212
|
+
1. **Never commit tokens** to git repositories
|
|
213
|
+
2. **Use GitHub Actions secrets** for CI/CD
|
|
214
|
+
3. **Use fine-grained tokens** with minimum required permissions
|
|
215
|
+
4. **Rotate tokens regularly** (at least every 90 days)
|
|
216
|
+
5. **Revoke tokens** immediately if compromised
|
|
217
|
+
6. **Use organization secrets** for shared tokens across repos
|
|
218
|
+
|
|
219
|
+
## Example Comment Output
|
|
220
|
+
|
|
221
|
+
When properly configured, TestDriver will post comments like:
|
|
222
|
+
|
|
223
|
+
```markdown
|
|
224
|
+
# 🟢 TestDriver Test Results
|
|
225
|
+
|
|
226
|
+
**Status:** ✅ PASSED
|
|
227
|
+
**Duration:** 45.23s
|
|
228
|
+
**Platform:** linux
|
|
229
|
+
**Branch:** `feature/new-login`
|
|
230
|
+
**Commit:** `abc1234`
|
|
231
|
+
|
|
232
|
+
## 📊 Test Summary
|
|
233
|
+
|
|
234
|
+
Total: 3
|
|
235
|
+
Passed: 3 ✅
|
|
236
|
+
Failed: 0 ❌
|
|
237
|
+
Skipped: 0 ⏭️
|
|
238
|
+
|
|
239
|
+
### [📋 View Full Test Run](https://app.testdriver.ai/runs/...)
|
|
240
|
+
|
|
241
|
+
## 📝 Test Results
|
|
242
|
+
|
|
243
|
+
| Status | Test | File | Duration | Replay |
|
|
244
|
+
|--------|------|------|----------|--------|
|
|
245
|
+
| ✅ | should log in successfully | `login.test.mjs` | 12.34s | [🎥 View](https://app.testdriver.ai/replay/...) |
|
|
246
|
+
| ✅ | should navigate to dashboard | `navigation.test.mjs` | 8.91s | [🎥 View](https://app.testdriver.ai/replay/...) |
|
|
247
|
+
|
|
248
|
+
## 🎥 Dashcam Replays
|
|
249
|
+
|
|
250
|
+
### should log in successfully
|
|
251
|
+
|
|
252
|
+
[](https://app.testdriver.ai/replay/...)
|
|
253
|
+
|
|
254
|
+
[🎬 View Full Replay](https://app.testdriver.ai/replay/...)
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
<sub>Generated by [TestDriver](https://testdriver.ai) • Run ID: `run_abc123`</sub>
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
The GIF replays are automatically embedded so reviewers can see what happened without leaving GitHub!
|
|
261
|
+
|
|
262
|
+
## Getting Help
|
|
263
|
+
|
|
264
|
+
- 📚 [Full Documentation](https://docs.testdriver.ai)
|
|
265
|
+
- 💬 [Discord Community](https://discord.gg/testdriver)
|
|
266
|
+
- 🐛 [Report Issues](https://github.com/testdriverai/testdriverai/issues)
|