@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.
Files changed (528) hide show
  1. package/.claude/settings.local.json +7 -0
  2. package/.env.example +4 -0
  3. package/.prettierignore +4 -0
  4. package/.prettierrc +1 -0
  5. package/CHANGELOG.md +953 -0
  6. package/README.md +81 -0
  7. package/agent/events.js +135 -0
  8. package/agent/index.js +2450 -0
  9. package/agent/interface.js +35 -0
  10. package/agent/lib/analytics.js +22 -0
  11. package/agent/lib/censorship.js +75 -0
  12. package/agent/lib/commander.js +246 -0
  13. package/agent/lib/commands.js +1684 -0
  14. package/agent/lib/config.js +60 -0
  15. package/agent/lib/generator.js +91 -0
  16. package/agent/lib/http.js +144 -0
  17. package/agent/lib/logger.js +56 -0
  18. package/agent/lib/outputs.js +29 -0
  19. package/agent/lib/parser.js +209 -0
  20. package/agent/lib/redraw.js +386 -0
  21. package/agent/lib/resources/cursor-2.png +0 -0
  22. package/agent/lib/sandbox.js +1104 -0
  23. package/agent/lib/sdk.js +633 -0
  24. package/agent/lib/session.js +25 -0
  25. package/agent/lib/source-mapper.js +342 -0
  26. package/agent/lib/subimage/index.js +77 -0
  27. package/agent/lib/subimage/opencv.js +69 -0
  28. package/agent/lib/system.js +204 -0
  29. package/agent/lib/theme.js +14 -0
  30. package/agent/lib/valid-version.js +21 -0
  31. package/agent/lib/validation.js +169 -0
  32. package/ai/.claude-plugin/plugin.json +9 -0
  33. package/ai/agents/testdriver.md +638 -0
  34. package/ai/skills/testdriver-ai/SKILL.md +204 -0
  35. package/ai/skills/testdriver-assert/SKILL.md +315 -0
  36. package/ai/skills/testdriver-aws-setup/SKILL.md +448 -0
  37. package/ai/skills/testdriver-cache/SKILL.md +221 -0
  38. package/ai/skills/testdriver-caching/SKILL.md +124 -0
  39. package/ai/skills/testdriver-captcha/SKILL.md +158 -0
  40. package/ai/skills/testdriver-ci-cd/SKILL.md +602 -0
  41. package/ai/skills/testdriver-click/SKILL.md +286 -0
  42. package/ai/skills/testdriver-client/SKILL.md +477 -0
  43. package/ai/skills/testdriver-cloud/SKILL.md +119 -0
  44. package/ai/skills/testdriver-customizing-devices/SKILL.md +319 -0
  45. package/ai/skills/testdriver-dashcam/SKILL.md +418 -0
  46. package/ai/skills/testdriver-debugging-with-screenshots/SKILL.md +401 -0
  47. package/ai/skills/testdriver-device-config/SKILL.md +317 -0
  48. package/ai/skills/testdriver-double-click/SKILL.md +102 -0
  49. package/ai/skills/testdriver-elements/SKILL.md +605 -0
  50. package/ai/skills/testdriver-enterprise/SKILL.md +114 -0
  51. package/ai/skills/testdriver-errors/SKILL.md +246 -0
  52. package/ai/skills/testdriver-events/SKILL.md +356 -0
  53. package/ai/skills/testdriver-examples/SKILL.md +7 -0
  54. package/ai/skills/testdriver-exec/SKILL.md +317 -0
  55. package/ai/skills/testdriver-find/SKILL.md +829 -0
  56. package/ai/skills/testdriver-focus-application/SKILL.md +293 -0
  57. package/ai/skills/testdriver-generating-tests/SKILL.md +36 -0
  58. package/ai/skills/testdriver-hover/SKILL.md +278 -0
  59. package/ai/skills/testdriver-locating-elements/SKILL.md +71 -0
  60. package/ai/skills/testdriver-making-assertions/SKILL.md +32 -0
  61. package/ai/skills/testdriver-mcp/SKILL.md +7 -0
  62. package/ai/skills/testdriver-mcp-workflow/SKILL.md +410 -0
  63. package/ai/skills/testdriver-mouse-down/SKILL.md +161 -0
  64. package/ai/skills/testdriver-mouse-up/SKILL.md +164 -0
  65. package/ai/skills/testdriver-parse/SKILL.md +236 -0
  66. package/ai/skills/testdriver-performing-actions/SKILL.md +54 -0
  67. package/ai/skills/testdriver-press-keys/SKILL.md +348 -0
  68. package/ai/skills/testdriver-provision/SKILL.md +331 -0
  69. package/ai/skills/testdriver-quickstart/SKILL.md +144 -0
  70. package/ai/skills/testdriver-redraw/SKILL.md +214 -0
  71. package/ai/skills/testdriver-reusable-code/SKILL.md +249 -0
  72. package/ai/skills/testdriver-right-click/SKILL.md +123 -0
  73. package/ai/skills/testdriver-running-tests/SKILL.md +185 -0
  74. package/ai/skills/testdriver-screenshot/SKILL.md +248 -0
  75. package/ai/skills/testdriver-screenshots/SKILL.md +184 -0
  76. package/ai/skills/testdriver-scroll/SKILL.md +335 -0
  77. package/ai/skills/testdriver-secrets/SKILL.md +115 -0
  78. package/ai/skills/testdriver-self-hosted/SKILL.md +65 -0
  79. package/ai/skills/testdriver-test-writer/SKILL.md +448 -0
  80. package/ai/skills/testdriver-testdriver/SKILL.md +628 -0
  81. package/ai/skills/testdriver-testdriver-mechanic/SKILL.md +165 -0
  82. package/ai/skills/testdriver-type/SKILL.md +357 -0
  83. package/ai/skills/testdriver-variables/SKILL.md +111 -0
  84. package/ai/skills/testdriver-wait/SKILL.md +50 -0
  85. package/ai/skills/testdriver-waiting-for-elements/SKILL.md +90 -0
  86. package/ai/skills/testdriver-what-is-testdriver/SKILL.md +54 -0
  87. package/bin/testdriverai.js +22 -0
  88. package/debugger/bg.png +0 -0
  89. package/debugger/icon.png +0 -0
  90. package/debugger/index.html +469 -0
  91. package/debugger/td.png +0 -0
  92. package/debugger/tray-buffered.png +0 -0
  93. package/debugger/tray.png +0 -0
  94. package/docs/GITHUB_COMMENTS.md +330 -0
  95. package/docs/GITHUB_COMMENTS_ANNOUNCEMENT.md +167 -0
  96. package/docs/QUICK-START-GITHUB-COMMENTS.md +84 -0
  97. package/docs/TEST-GITHUB-COMMENTS.md +129 -0
  98. package/docs/_data/examples-manifest.json +177 -0
  99. package/docs/_data/examples-manifest.schema.json +41 -0
  100. package/docs/_scripts/extract-example-urls.js +165 -0
  101. package/docs/_scripts/generate-examples.js +560 -0
  102. package/docs/_scripts/generate-skills.js +154 -0
  103. package/docs/_scripts/link-replacer.js +164 -0
  104. package/docs/_scripts/upload-docs-to-openai.js +284 -0
  105. package/docs/changelog.mdx +161 -0
  106. package/docs/claude-mcp-plugin.mdx +160 -0
  107. package/docs/docs.json +442 -0
  108. package/docs/github-integration-setup.md +266 -0
  109. package/docs/guide/best-practices-polling.mdx +174 -0
  110. package/docs/images/content/account/newprojectsettings.png +0 -0
  111. package/docs/images/content/account/projectpage.png +0 -0
  112. package/docs/images/content/account/projectreplays.png +0 -0
  113. package/docs/images/content/account/team-manage.png +0 -0
  114. package/docs/images/content/account/teampage.png +0 -0
  115. package/docs/images/content/extension/cursor.svg +1 -0
  116. package/docs/images/content/extension/vscode.svg +57 -0
  117. package/docs/images/content/extension/windsurf.svg +3 -0
  118. package/docs/images/content/parse/output.png +0 -0
  119. package/docs/images/content/self-hosted/launchtemplateid.png +0 -0
  120. package/docs/images/content/side-by-side.png +0 -0
  121. package/docs/images/content/vscode/ide-full.png +0 -0
  122. package/docs/images/content/vscode/running.png +0 -0
  123. package/docs/images/content/vscode/v7-chat.png +0 -0
  124. package/docs/images/content/vscode/v7-choose-agent.png +0 -0
  125. package/docs/images/content/vscode/v7-full.png +0 -0
  126. package/docs/images/content/vscode/v7-onboarding.png +0 -0
  127. package/docs/images/content/vscode/vscode-2-assert.png +0 -0
  128. package/docs/images/content/vscode/vscode-agent-preview.png +0 -0
  129. package/docs/images/content/vscode/vscode-copilot-ask.png +0 -0
  130. package/docs/images/content/vscode/vscode-file-creation.png +0 -0
  131. package/docs/images/content/vscode/vscode-install.png +0 -0
  132. package/docs/images/content/vscode/vscode-overview.png +0 -0
  133. package/docs/images/content/vscode/vscode-setup-walkthrough.png +0 -0
  134. package/docs/images/content/vscode/vscode-stopchat.png +0 -0
  135. package/docs/images/content/vscode/vscode-stoptest.png +0 -0
  136. package/docs/images/content/vscode/vscode-tdservice.png +0 -0
  137. package/docs/images/content/vscode/vscode-test-output.png +0 -0
  138. package/docs/images/content/vscode/vscode-testhistory.png +0 -0
  139. package/docs/images/content/vscode/vscode-testpane-runtests.png +0 -0
  140. package/docs/images/content/vscode/vscode-testpane.png +0 -0
  141. package/docs/images/template/dark.png +0 -0
  142. package/docs/images/template/icon.png +0 -0
  143. package/docs/images/template/light.png +0 -0
  144. package/docs/snippets/calendar-link.mdx +4 -0
  145. package/docs/snippets/gitignore-warning.mdx +7 -0
  146. package/docs/snippets/lifecycle-warning.mdx +6 -0
  147. package/docs/snippets/test-prereqs.mdx +12 -0
  148. package/docs/snippets/tests/assert-replay.mdx +7 -0
  149. package/docs/snippets/tests/assert-yaml.mdx +8 -0
  150. package/docs/snippets/tests/exec-js-replay.mdx +7 -0
  151. package/docs/snippets/tests/exec-js-yaml.mdx +32 -0
  152. package/docs/snippets/tests/exec-shell-replay.mdx +7 -0
  153. package/docs/snippets/tests/exec-shell-yaml.mdx +15 -0
  154. package/docs/snippets/tests/hover-image-replay.mdx +7 -0
  155. package/docs/snippets/tests/hover-image-yaml.mdx +17 -0
  156. package/docs/snippets/tests/hover-text-replay.mdx +7 -0
  157. package/docs/snippets/tests/hover-text-with-description-replay.mdx +7 -0
  158. package/docs/snippets/tests/hover-text-with-description-yaml.mdx +24 -0
  159. package/docs/snippets/tests/hover-text-yaml.mdx +14 -0
  160. package/docs/snippets/tests/match-image-replay.mdx +7 -0
  161. package/docs/snippets/tests/match-image-yaml.mdx +17 -0
  162. package/docs/snippets/tests/press-keys-replay.mdx +7 -0
  163. package/docs/snippets/tests/press-keys-yaml.mdx +36 -0
  164. package/docs/snippets/tests/remember-replay.mdx +7 -0
  165. package/docs/snippets/tests/remember-yaml.mdx +28 -0
  166. package/docs/snippets/tests/scroll-replay.mdx +7 -0
  167. package/docs/snippets/tests/scroll-until-image-replay.mdx +7 -0
  168. package/docs/snippets/tests/scroll-until-image-yaml.mdx +14 -0
  169. package/docs/snippets/tests/scroll-until-text-replay.mdx +7 -0
  170. package/docs/snippets/tests/scroll-until-text-yaml.mdx +17 -0
  171. package/docs/snippets/tests/scroll-yaml.mdx +30 -0
  172. package/docs/snippets/tests/type-repeated-replay.mdx +7 -0
  173. package/docs/snippets/tests/type-repeated-yaml.mdx +22 -0
  174. package/docs/snippets/tests/type-replay.mdx +7 -0
  175. package/docs/snippets/tests/type-yaml.mdx +28 -0
  176. package/docs/snippets/tests/wait-for-image-replay.mdx +7 -0
  177. package/docs/snippets/tests/wait-for-image-yaml.mdx +18 -0
  178. package/docs/snippets/tests/wait-for-text-replay.mdx +7 -0
  179. package/docs/snippets/tests/wait-for-text-yaml.mdx +18 -0
  180. package/docs/snippets/tests/wait-replay.mdx +7 -0
  181. package/docs/snippets/tests/wait-yaml.mdx +13 -0
  182. package/docs/styles.css +65 -0
  183. package/docs/v6/account/dashboard.mdx +16 -0
  184. package/docs/v6/account/enterprise.mdx +110 -0
  185. package/docs/v6/account/pricing.mdx +33 -0
  186. package/docs/v6/account/projects.mdx +33 -0
  187. package/docs/v6/account/team.mdx +35 -0
  188. package/docs/v6/action/ami.mdx +109 -0
  189. package/docs/v6/action/performance.mdx +105 -0
  190. package/docs/v6/action/secrets.mdx +93 -0
  191. package/docs/v6/apps/chrome-extensions.mdx +48 -0
  192. package/docs/v6/apps/desktop-apps.mdx +93 -0
  193. package/docs/v6/apps/mobile-apps.mdx +26 -0
  194. package/docs/v6/apps/static-websites.mdx +54 -0
  195. package/docs/v6/apps/tauri-apps.mdx +361 -0
  196. package/docs/v6/bugs/jira.mdx +232 -0
  197. package/docs/v6/cli/overview.mdx +66 -0
  198. package/docs/v6/commands/assert.mdx +45 -0
  199. package/docs/v6/commands/exec.mdx +276 -0
  200. package/docs/v6/commands/focus-application.mdx +44 -0
  201. package/docs/v6/commands/hover-image.mdx +69 -0
  202. package/docs/v6/commands/hover-text.mdx +47 -0
  203. package/docs/v6/commands/if.mdx +53 -0
  204. package/docs/v6/commands/match-image.mdx +67 -0
  205. package/docs/v6/commands/press-keys.mdx +87 -0
  206. package/docs/v6/commands/remember.mdx +49 -0
  207. package/docs/v6/commands/run.mdx +44 -0
  208. package/docs/v6/commands/scroll-until-image.mdx +66 -0
  209. package/docs/v6/commands/scroll-until-text.mdx +60 -0
  210. package/docs/v6/commands/scroll.mdx +69 -0
  211. package/docs/v6/commands/type.mdx +45 -0
  212. package/docs/v6/commands/wait-for-image.mdx +54 -0
  213. package/docs/v6/commands/wait-for-text.mdx +48 -0
  214. package/docs/v6/commands/wait.mdx +45 -0
  215. package/docs/v6/exporting/junit.mdx +218 -0
  216. package/docs/v6/exporting/playwright.mdx +197 -0
  217. package/docs/v6/features/auto-healing.mdx +144 -0
  218. package/docs/v6/features/generation.mdx +116 -0
  219. package/docs/v6/features/parallel-testing.mdx +151 -0
  220. package/docs/v6/features/reusable-snippets.mdx +131 -0
  221. package/docs/v6/features/selectorless.mdx +80 -0
  222. package/docs/v6/features/visual-assertions.mdx +139 -0
  223. package/docs/v6/getting-started/ci.mdx +146 -0
  224. package/docs/v6/getting-started/cli.mdx +91 -0
  225. package/docs/v6/getting-started/editing.mdx +100 -0
  226. package/docs/v6/getting-started/playwright.mdx +342 -0
  227. package/docs/v6/getting-started/running.mdx +48 -0
  228. package/docs/v6/getting-started/self-hosting.mdx +408 -0
  229. package/docs/v6/getting-started/vscode.mdx +88 -0
  230. package/docs/v6/guide/assertions.mdx +189 -0
  231. package/docs/v6/guide/authentication.mdx +136 -0
  232. package/docs/v6/guide/code.mdx +65 -0
  233. package/docs/v6/guide/dashcam.mdx +118 -0
  234. package/docs/v6/guide/environment-variables.mdx +26 -0
  235. package/docs/v6/guide/lifecycle.mdx +242 -0
  236. package/docs/v6/guide/locating.mdx +141 -0
  237. package/docs/v6/guide/protips.mdx +43 -0
  238. package/docs/v6/guide/variables.mdx +143 -0
  239. package/docs/v6/guide/waiting.mdx +130 -0
  240. package/docs/v6/importing/csv.mdx +196 -0
  241. package/docs/v6/importing/gherkin.mdx +143 -0
  242. package/docs/v6/importing/jira.mdx +164 -0
  243. package/docs/v6/importing/testrail.mdx +162 -0
  244. package/docs/v6/integrations/electron.mdx +146 -0
  245. package/docs/v6/integrations/netlify.mdx +100 -0
  246. package/docs/v6/integrations/vercel.mdx +125 -0
  247. package/docs/v6/interactive/explore.mdx +99 -0
  248. package/docs/v6/interactive/run.mdx +52 -0
  249. package/docs/v6/interactive/save.mdx +63 -0
  250. package/docs/v6/overview/comparison.mdx +101 -0
  251. package/docs/v6/overview/faq.mdx +162 -0
  252. package/docs/v6/overview/performance.mdx +52 -0
  253. package/docs/v6/overview/quickstart.mdx +137 -0
  254. package/docs/v6/overview/what-is-testdriver.mdx +85 -0
  255. package/docs/v6/scenarios/ai-chatbot.mdx +28 -0
  256. package/docs/v6/scenarios/cookie-banner.mdx +32 -0
  257. package/docs/v6/scenarios/file-upload.mdx +33 -0
  258. package/docs/v6/scenarios/form-filling.mdx +32 -0
  259. package/docs/v6/scenarios/log-in.mdx +75 -0
  260. package/docs/v6/scenarios/pdf-generation.mdx +25 -0
  261. package/docs/v6/scenarios/spell-check.mdx +22 -0
  262. package/docs/v6/security/action.mdx +84 -0
  263. package/docs/v6/security/agent.mdx +73 -0
  264. package/docs/v6/security/platform.mdx +77 -0
  265. package/docs/v6/tutorials/advanced-test.mdx +81 -0
  266. package/docs/v6/tutorials/basic-test.mdx +45 -0
  267. package/docs/v7/_drafts/agents.mdx +843 -0
  268. package/docs/v7/_drafts/architecture.mdx +399 -0
  269. package/docs/v7/_drafts/auto-cache-key.mdx +167 -0
  270. package/docs/v7/_drafts/awesome-logs-quick-ref.mdx +100 -0
  271. package/docs/v7/_drafts/best-practices.mdx +486 -0
  272. package/docs/v7/_drafts/caching-ai.mdx +215 -0
  273. package/docs/v7/_drafts/caching-selectors.mdx +424 -0
  274. package/docs/v7/_drafts/caching.mdx +366 -0
  275. package/docs/v7/_drafts/cli-to-sdk-migration.mdx +425 -0
  276. package/docs/v7/_drafts/commands/assert.mdx +45 -0
  277. package/docs/v7/_drafts/commands/exec.mdx +276 -0
  278. package/docs/v7/_drafts/commands/focus-application.mdx +44 -0
  279. package/docs/v7/_drafts/commands/hover-image.mdx +69 -0
  280. package/docs/v7/_drafts/commands/hover-text.mdx +47 -0
  281. package/docs/v7/_drafts/commands/if.mdx +53 -0
  282. package/docs/v7/_drafts/commands/match-image.mdx +67 -0
  283. package/docs/v7/_drafts/commands/press-keys.mdx +87 -0
  284. package/docs/v7/_drafts/commands/remember.mdx +49 -0
  285. package/docs/v7/_drafts/commands/run.mdx +44 -0
  286. package/docs/v7/_drafts/commands/scroll-until-image.mdx +66 -0
  287. package/docs/v7/_drafts/commands/scroll-until-text.mdx +60 -0
  288. package/docs/v7/_drafts/commands/scroll.mdx +69 -0
  289. package/docs/v7/_drafts/commands/type.mdx +45 -0
  290. package/docs/v7/_drafts/commands/wait-for-image.mdx +54 -0
  291. package/docs/v7/_drafts/commands/wait-for-text.mdx +48 -0
  292. package/docs/v7/_drafts/commands/wait.mdx +45 -0
  293. package/docs/v7/_drafts/configuration.mdx +378 -0
  294. package/docs/v7/_drafts/contributing.mdx +174 -0
  295. package/docs/v7/_drafts/core.mdx +458 -0
  296. package/docs/v7/_drafts/dashcam-title-feature.mdx +89 -0
  297. package/docs/v7/_drafts/debugging.mdx +349 -0
  298. package/docs/v7/_drafts/error-handling.mdx +501 -0
  299. package/docs/v7/_drafts/faq.mdx +393 -0
  300. package/docs/v7/_drafts/hooks.mdx +360 -0
  301. package/docs/v7/_drafts/init-command.mdx +95 -0
  302. package/docs/v7/_drafts/installation.mdx +420 -0
  303. package/docs/v7/_drafts/migration.mdx +562 -0
  304. package/docs/v7/_drafts/observable.mdx +604 -0
  305. package/docs/v7/_drafts/playwright.mdx +342 -0
  306. package/docs/v7/_drafts/plugin-migration.mdx +220 -0
  307. package/docs/v7/_drafts/powerful.mdx +419 -0
  308. package/docs/v7/_drafts/presets.mdx +210 -0
  309. package/docs/v7/_drafts/progressive-disclosure.mdx +230 -0
  310. package/docs/v7/_drafts/prompt-cache.mdx +200 -0
  311. package/docs/v7/_drafts/provision.mdx +390 -0
  312. package/docs/v7/_drafts/quick-start-test-recording.mdx +214 -0
  313. package/docs/v7/_drafts/readme.mdx +135 -0
  314. package/docs/v7/_drafts/reports.mdx +414 -0
  315. package/docs/v7/_drafts/scalable.mdx +763 -0
  316. package/docs/v7/_drafts/screenshot.mdx +155 -0
  317. package/docs/v7/_drafts/sdk-awesome-logs.mdx +468 -0
  318. package/docs/v7/_drafts/sdk-browser-rendering.mdx +167 -0
  319. package/docs/v7/_drafts/sdk-migration.mdx +474 -0
  320. package/docs/v7/_drafts/sdk-v7-complete.mdx +345 -0
  321. package/docs/v7/_drafts/self-hosting.mdx +369 -0
  322. package/docs/v7/_drafts/test-recording.mdx +382 -0
  323. package/docs/v7/_drafts/troubleshooting.mdx +526 -0
  324. package/docs/v7/_drafts/vitest-plugin.mdx +477 -0
  325. package/docs/v7/_drafts/vitest.mdx +535 -0
  326. package/docs/v7/_drafts/writing-tests.mdx +25 -0
  327. package/docs/v7/ai.mdx +205 -0
  328. package/docs/v7/assert.mdx +316 -0
  329. package/docs/v7/aws-setup.mdx +449 -0
  330. package/docs/v7/cache.mdx +223 -0
  331. package/docs/v7/caching.mdx +128 -0
  332. package/docs/v7/captcha.mdx +159 -0
  333. package/docs/v7/ci-cd.mdx +603 -0
  334. package/docs/v7/click.mdx +287 -0
  335. package/docs/v7/client.mdx +478 -0
  336. package/docs/v7/copilot/auto-healing.mdx +265 -0
  337. package/docs/v7/copilot/creating-tests.mdx +156 -0
  338. package/docs/v7/copilot/github.mdx +143 -0
  339. package/docs/v7/copilot/running-tests.mdx +149 -0
  340. package/docs/v7/copilot/setup.mdx +143 -0
  341. package/docs/v7/customizing-devices.mdx +319 -0
  342. package/docs/v7/dashcam.mdx +419 -0
  343. package/docs/v7/debugging-with-screenshots.mdx +402 -0
  344. package/docs/v7/device-config.mdx +317 -0
  345. package/docs/v7/double-click.mdx +102 -0
  346. package/docs/v7/elements.mdx +606 -0
  347. package/docs/v7/enterprise.mdx +9 -0
  348. package/docs/v7/errors.mdx +248 -0
  349. package/docs/v7/events.mdx +358 -0
  350. package/docs/v7/examples/ai.mdx +72 -0
  351. package/docs/v7/examples/assert.mdx +72 -0
  352. package/docs/v7/examples/captcha-api.mdx +92 -0
  353. package/docs/v7/examples/chrome-extension.mdx +132 -0
  354. package/docs/v7/examples/drag-and-drop.mdx +100 -0
  355. package/docs/v7/examples/element-not-found.mdx +67 -0
  356. package/docs/v7/examples/exec-output.mdx +85 -0
  357. package/docs/v7/examples/exec-pwsh.mdx +83 -0
  358. package/docs/v7/examples/focus-window.mdx +62 -0
  359. package/docs/v7/examples/hover-image.mdx +94 -0
  360. package/docs/v7/examples/hover-text.mdx +69 -0
  361. package/docs/v7/examples/installer.mdx +91 -0
  362. package/docs/v7/examples/launch-vscode-linux.mdx +101 -0
  363. package/docs/v7/examples/match-image.mdx +96 -0
  364. package/docs/v7/examples/press-keys.mdx +92 -0
  365. package/docs/v7/examples/scroll-keyboard.mdx +79 -0
  366. package/docs/v7/examples/scroll-until-image.mdx +81 -0
  367. package/docs/v7/examples/scroll-until-text.mdx +109 -0
  368. package/docs/v7/examples/scroll.mdx +81 -0
  369. package/docs/v7/examples/type.mdx +92 -0
  370. package/docs/v7/examples/windows-installer.mdx +89 -0
  371. package/docs/v7/exec.mdx +318 -0
  372. package/docs/v7/find.mdx +830 -0
  373. package/docs/v7/focus-application.mdx +294 -0
  374. package/docs/v7/generating-tests.mdx +36 -0
  375. package/docs/v7/hosted.mdx +158 -0
  376. package/docs/v7/hover.mdx +279 -0
  377. package/docs/v7/locating-elements.mdx +71 -0
  378. package/docs/v7/making-assertions.mdx +32 -0
  379. package/docs/v7/mcp.mdx +9 -0
  380. package/docs/v7/mouse-down.mdx +161 -0
  381. package/docs/v7/mouse-up.mdx +164 -0
  382. package/docs/v7/parse.mdx +237 -0
  383. package/docs/v7/performing-actions.mdx +54 -0
  384. package/docs/v7/press-keys.mdx +349 -0
  385. package/docs/v7/provision.mdx +333 -0
  386. package/docs/v7/quickstart.mdx +173 -0
  387. package/docs/v7/redraw.mdx +216 -0
  388. package/docs/v7/reusable-code.mdx +249 -0
  389. package/docs/v7/right-click.mdx +123 -0
  390. package/docs/v7/running-tests.mdx +185 -0
  391. package/docs/v7/screenshot.mdx +249 -0
  392. package/docs/v7/screenshots.mdx +186 -0
  393. package/docs/v7/scroll.mdx +336 -0
  394. package/docs/v7/secrets.mdx +115 -0
  395. package/docs/v7/self-hosted.mdx +149 -0
  396. package/docs/v7/type.mdx +358 -0
  397. package/docs/v7/variables.mdx +111 -0
  398. package/docs/v7/wait.mdx +52 -0
  399. package/docs/v7/waiting-for-elements.mdx +90 -0
  400. package/docs/v7/what-is-testdriver.mdx +54 -0
  401. package/eslint.config.js +67 -0
  402. package/examples/ai.test.mjs +31 -0
  403. package/examples/assert.test.mjs +47 -0
  404. package/examples/chrome-extension.test.mjs +97 -0
  405. package/examples/config.mjs +5 -0
  406. package/examples/element-not-found.test.mjs +27 -0
  407. package/examples/exec-output.test.mjs +60 -0
  408. package/examples/exec-pwsh.test.mjs +58 -0
  409. package/examples/findall-coffee-icons.test.mjs +42 -0
  410. package/examples/focus-window.test.mjs +37 -0
  411. package/examples/formatted-logging.test.mjs +27 -0
  412. package/examples/hover-image.test.mjs +53 -0
  413. package/examples/hover-text-with-description.test.mjs +57 -0
  414. package/examples/hover-text.test.mjs +28 -0
  415. package/examples/installer.test.mjs +50 -0
  416. package/examples/launch-vscode-linux.test.mjs +55 -0
  417. package/examples/match-image.test.mjs +55 -0
  418. package/examples/parse.test.mjs +19 -0
  419. package/examples/press-keys.test.mjs +44 -0
  420. package/examples/prompt.test.mjs +34 -0
  421. package/examples/scroll-keyboard.test.mjs +38 -0
  422. package/examples/scroll-until-image.test.mjs +40 -0
  423. package/examples/scroll.test.mjs +42 -0
  424. package/examples/type.test.mjs +46 -0
  425. package/examples/windows-installer.test.mjs +54 -0
  426. package/index.js +2 -0
  427. package/interfaces/cli/commands/init.js +438 -0
  428. package/interfaces/cli/commands/setup.js +382 -0
  429. package/interfaces/cli/lib/base.js +285 -0
  430. package/interfaces/cli.js +20 -0
  431. package/interfaces/junit-reporter.js +290 -0
  432. package/interfaces/logger.js +388 -0
  433. package/interfaces/readline.js +234 -0
  434. package/interfaces/shared-test-state.mjs +64 -0
  435. package/interfaces/vitest-plugin.d.ts +115 -0
  436. package/interfaces/vitest-plugin.mjs +1698 -0
  437. package/lib/captcha/solver.js +358 -0
  438. package/lib/core/Dashcam.js +533 -0
  439. package/lib/core/index.d.ts +172 -0
  440. package/lib/core/index.js +12 -0
  441. package/lib/environments.json +18 -0
  442. package/lib/github-comment-formatter.js +263 -0
  443. package/lib/github-comment.mjs +452 -0
  444. package/lib/init-project.js +575 -0
  445. package/lib/presets/index.mjs +331 -0
  446. package/lib/resolve-channel.js +46 -0
  447. package/lib/sentry.js +417 -0
  448. package/lib/vitest/hooks.d.ts +57 -0
  449. package/lib/vitest/hooks.mjs +674 -0
  450. package/lib/vitest/setup-aws.mjs +247 -0
  451. package/lib/vitest/setup-self-hosted.mjs +151 -0
  452. package/lib/vitest/setup.mjs +46 -0
  453. package/manual/captcha-api.test.mjs +51 -0
  454. package/manual/drag-and-drop.test.mjs +59 -0
  455. package/manual/flake-diffthreshold-001.test.mjs +9 -0
  456. package/manual/flake-diffthreshold-01.test.mjs +9 -0
  457. package/manual/flake-diffthreshold-05.test.mjs +9 -0
  458. package/manual/flake-noredraw-cache.test.mjs +9 -0
  459. package/manual/flake-noredraw-nocache.test.mjs +9 -0
  460. package/manual/flake-redraw-cache.test.mjs +9 -0
  461. package/manual/flake-redraw-nocache.test.mjs +9 -0
  462. package/manual/flake-rocket-match.test.mjs +30 -0
  463. package/manual/flake-shared.mjs +51 -0
  464. package/manual/no-provision.test.mjs +31 -0
  465. package/manual/packer-hover-image.test.mjs +176 -0
  466. package/manual/scroll-until-text.test.mjs +68 -0
  467. package/manual/test-init-command.js +223 -0
  468. package/mcp-server/README.md +322 -0
  469. package/mcp-server/dist/codegen.d.ts +9 -0
  470. package/mcp-server/dist/codegen.js +165 -0
  471. package/mcp-server/dist/mcp-app.html +114 -0
  472. package/mcp-server/dist/package.json +1 -0
  473. package/mcp-server/dist/provision-types.d.ts +290 -0
  474. package/mcp-server/dist/provision-types.js +174 -0
  475. package/mcp-server/dist/server.d.ts +6 -0
  476. package/mcp-server/dist/server.mjs +1925 -0
  477. package/mcp-server/dist/session.d.ts +85 -0
  478. package/mcp-server/dist/session.js +152 -0
  479. package/mcp-server/mcp-app.html +28 -0
  480. package/mcp-server/mcp-config.example.json +19 -0
  481. package/mcp-server/package-lock.json +4027 -0
  482. package/mcp-server/package.json +31 -0
  483. package/mcp-server/src/codegen.ts +189 -0
  484. package/mcp-server/src/mcp-app.css +360 -0
  485. package/mcp-server/src/mcp-app.ts +547 -0
  486. package/mcp-server/src/provision-types.ts +209 -0
  487. package/mcp-server/src/server.ts +2391 -0
  488. package/mcp-server/src/session.ts +194 -0
  489. package/mcp-server/tsconfig.json +16 -0
  490. package/mcp-server/vite.config.ts +23 -0
  491. package/package.json +158 -0
  492. package/schema.json +1046 -0
  493. package/scripts/generate-skills.js +94 -0
  494. package/sdk-log-formatter.js +1157 -0
  495. package/sdk.d.ts +1486 -0
  496. package/sdk.js +4336 -0
  497. package/setup/aws/cloudformation.yaml +463 -0
  498. package/setup/aws/disable-defender.sh +42 -0
  499. package/setup/aws/install-dev-runner.sh +79 -0
  500. package/setup/aws/spawn-runner.sh +289 -0
  501. package/test/captcha-solver.test.mjs +152 -0
  502. package/test/chrome-remote-debugging.test.mjs +66 -0
  503. package/test/duckduckgo/experiment.test.mjs +28 -0
  504. package/test/duckduckgo/setup.test.mjs +29 -0
  505. package/test/manual/debug-locate-response.js +82 -0
  506. package/test/manual/reconnect-provision.test.mjs +49 -0
  507. package/test/manual/test-console-logs.test.mjs +42 -0
  508. package/test/manual/test-find-api.js +73 -0
  509. package/test/manual/test-init.sh +54 -0
  510. package/test/manual/test-prompt-cache.js +97 -0
  511. package/test/manual/test-provision-auth.mjs +22 -0
  512. package/test/manual/test-sandbox-render.js +29 -0
  513. package/test/manual/test-sdk-methods.js +15 -0
  514. package/test/manual/test-sdk-refactor.js +53 -0
  515. package/test/manual/test-stack-trace.mjs +57 -0
  516. package/test/manual/verify-element-api.js +89 -0
  517. package/test/manual/verify-types.js +0 -0
  518. package/test/manual-unawaited-promise.test.mjs +31 -0
  519. package/vitest.config.mjs +58 -0
  520. package/vitest.runner.config.mjs +33 -0
  521. package/vscode-extension/.vscodeignore +12 -0
  522. package/vscode-extension/README.md +94 -0
  523. package/vscode-extension/media/icon.png +0 -0
  524. package/vscode-extension/package-lock.json +4126 -0
  525. package/vscode-extension/package.json +86 -0
  526. package/vscode-extension/src/extension.ts +829 -0
  527. package/vscode-extension/testdriverai-0.1.0.vsix +0 -0
  528. package/vscode-extension/tsconfig.json +16 -0
@@ -0,0 +1,265 @@
1
+ ---
2
+ title: "Auto-Healing Tests"
3
+ sidebarTitle: "Auto-Healing"
4
+ description: "Set up automatic test repair in CI using GitHub Copilot and TestDriver"
5
+ icon: "bandage"
6
+ ---
7
+
8
+ Auto-healing tests automatically fix themselves when your application changes. By integrating GitHub Copilot with TestDriver in your CI pipeline, you can have AI investigate test failures and propose fixes.
9
+
10
+ ## How It Works
11
+
12
+ When a test fails in CI:
13
+
14
+ 1. **GitHub Actions detects the failure**
15
+ 2. **Copilot spawns the TestDriver agent** with access to the MCP server
16
+ 3. **The agent investigates** by running the failing test and analyzing what changed
17
+ 4. **Copilot creates a fix** by updating the test code
18
+ 5. **A pull request is opened** with the proposed changes for review
19
+
20
+ ## Setting Up Auto-Healing
21
+
22
+ <Steps>
23
+ <Step title="Add Repository Secrets">
24
+ Add your TestDriver API key to your repository secrets:
25
+
26
+ 1. Go to **Settings → Secrets and variables → Actions**
27
+ 2. Click **New repository secret**
28
+ 3. Add `TD_API_KEY` with your API key value
29
+ </Step>
30
+
31
+ <Step title="Create the Auto-Heal Workflow">
32
+ Add a GitHub Actions workflow that triggers on test failures:
33
+
34
+ ```yaml .github/workflows/auto-heal.yml
35
+ name: Auto-Heal Tests
36
+
37
+ on:
38
+ workflow_run:
39
+ workflows: ["Tests"] # Your main test workflow
40
+ types: [completed]
41
+ branches: [main]
42
+
43
+ jobs:
44
+ auto-heal:
45
+ if: ${{ github.event.workflow_run.conclusion == 'failure' }}
46
+ runs-on: ubuntu-latest
47
+ permissions:
48
+ contents: write
49
+ pull-requests: write
50
+
51
+ steps:
52
+ - uses: actions/checkout@v4
53
+
54
+ - name: Setup Node.js
55
+ uses: actions/setup-node@v4
56
+ with:
57
+ node-version: "20"
58
+
59
+ - name: Install dependencies
60
+ run: npm ci
61
+
62
+ - name: Run failing tests and capture output
63
+ id: tests
64
+ continue-on-error: true
65
+ run: |
66
+ vitest run 2>&1 | tee test-output.txt
67
+ echo "output<<EOF" >> $GITHUB_OUTPUT
68
+ cat test-output.txt >> $GITHUB_OUTPUT
69
+ echo "EOF" >> $GITHUB_OUTPUT
70
+ env:
71
+ TD_API_KEY: ${{ secrets.TD_API_KEY }}
72
+
73
+ - name: Invoke Copilot to fix tests
74
+ uses: github/copilot-action@v1
75
+ with:
76
+ prompt: |
77
+ @testdriver The following tests failed:
78
+
79
+ ${{ steps.tests.outputs.output }}
80
+
81
+ Please investigate each failure by:
82
+ 1. Running the failing test
83
+ 2. Analyzing what changed in the UI or behavior
84
+ 3. Updating the test code to fix the issue
85
+
86
+ Create a commit with your changes.
87
+ env:
88
+ TD_API_KEY: ${{ secrets.TD_API_KEY }}
89
+
90
+ - name: Create Pull Request
91
+ uses: peter-evans/create-pull-request@v5
92
+ with:
93
+ title: "Auto-heal: Fix failing tests"
94
+ body: |
95
+ This PR was automatically generated by the auto-heal workflow.
96
+
97
+ ## Changes
98
+ The following tests were updated to fix failures detected in CI.
99
+
100
+ ## Review
101
+ Please review the changes carefully before merging.
102
+ branch: auto-heal/${{ github.run_id }}
103
+ commit-message: "fix: auto-heal failing tests"
104
+ ```
105
+ </Step>
106
+
107
+ <Step title="Configure Test Workflow">
108
+ Make sure your main test workflow has a name that matches the `workflows` trigger:
109
+
110
+ ```yaml .github/workflows/tests.yml
111
+ name: Tests # Must match the workflow_run trigger
112
+
113
+ on:
114
+ push:
115
+ branches: [main]
116
+ pull_request:
117
+
118
+ jobs:
119
+ test:
120
+ runs-on: ubuntu-latest
121
+ steps:
122
+ - uses: actions/checkout@v4
123
+ - uses: actions/setup-node@v4
124
+ with:
125
+ node-version: "20"
126
+ - run: npm ci
127
+ - run: vitest run
128
+ env:
129
+ TD_API_KEY: ${{ secrets.TD_API_KEY }}
130
+ ```
131
+ </Step>
132
+ </Steps>
133
+
134
+ ## Example: Button Text Change
135
+
136
+ Here's what auto-healing looks like when a button's text changes:
137
+
138
+ <Steps>
139
+ <Step title="Application Changes">
140
+ A developer changes a button's text from "Submit" to "Send":
141
+
142
+ ```html
143
+ <!-- Before -->
144
+ <button>Submit</button>
145
+
146
+ <!-- After -->
147
+ <button>Send</button>
148
+ ```
149
+ </Step>
150
+
151
+ <Step title="Test Fails">
152
+ The test fails because it's looking for the old text:
153
+
154
+ ```javascript
155
+ // This now fails
156
+ const submitButton = await testdriver.find("Submit button");
157
+ ```
158
+ </Step>
159
+
160
+ <Step title="Auto-Heal Triggers">
161
+ The auto-heal workflow runs, and Copilot investigates:
162
+
163
+ ```
164
+ The test is looking for a "Submit button" but I see a "Send button"
165
+ on the page. The button functionality is the same, just the text changed.
166
+ I'll update the test to use the new text.
167
+ ```
168
+ </Step>
169
+
170
+ <Step title="PR Created">
171
+ A pull request is opened with the fix:
172
+
173
+ ```javascript
174
+ // Updated by auto-heal
175
+ const submitButton = await testdriver.find("Send button");
176
+ ```
177
+ </Step>
178
+ </Steps>
179
+
180
+ ## Configuration Options
181
+
182
+ ### Selective Auto-Healing
183
+
184
+ You can limit auto-healing to specific test files or patterns:
185
+
186
+ ```yaml
187
+ - name: Run failing tests
188
+ run: |
189
+ # Only heal tests in the e2e directory
190
+ vitest run tests/e2e/ 2>&1 | tee test-output.txt
191
+ ```
192
+
193
+ ### Manual Approval
194
+
195
+ For safety, you can require manual approval before auto-heal runs:
196
+
197
+ ```yaml
198
+ jobs:
199
+ auto-heal:
200
+ environment: auto-heal # Requires approval
201
+ ```
202
+
203
+ Configure the environment in **Settings → Environments** with required reviewers.
204
+
205
+ ### Limiting Changes
206
+
207
+ Add instructions to constrain what the AI can change:
208
+
209
+ ```yaml
210
+ - name: Invoke Copilot to fix tests
211
+ uses: github/copilot-action@v1
212
+ with:
213
+ prompt: |
214
+ @testdriver Fix the failing tests.
215
+
216
+ Rules:
217
+ - Only update element selectors and text matching
218
+ - Do not change test logic or assertions
219
+ - Do not add or remove tests
220
+ - Keep changes minimal
221
+ ```
222
+
223
+ ## Best Practices
224
+
225
+ <AccordionGroup>
226
+ <Accordion title="Always review auto-heal PRs">
227
+ Auto-heal is a tool, not a replacement for human judgment. Review all changes before merging to ensure the test still validates what you intended.
228
+ </Accordion>
229
+
230
+ <Accordion title="Use descriptive element descriptions">
231
+ Tests with clear, semantic descriptions are easier for the AI to heal:
232
+ ```javascript
233
+ // ✅ Good - describes purpose
234
+ await testdriver.find("primary call-to-action button in the hero section");
235
+
236
+ // ❌ Bad - too vague
237
+ await testdriver.find("button");
238
+ ```
239
+ </Accordion>
240
+
241
+ <Accordion title="Set up notifications">
242
+ Configure GitHub notifications or Slack integration to be alerted when auto-heal PRs are created.
243
+ </Accordion>
244
+
245
+ <Accordion title="Track heal rate">
246
+ Monitor how often tests need healing. High heal rates may indicate:
247
+ - Tests are too brittle
248
+ - Application is changing rapidly
249
+ - Element descriptions need improvement
250
+ </Accordion>
251
+ </AccordionGroup>
252
+
253
+ ## Limitations
254
+
255
+ Auto-healing works best for:
256
+ - Element text changes
257
+ - Layout and styling updates
258
+ - Minor UI restructuring
259
+
260
+ It may struggle with:
261
+ - Major workflow changes
262
+ - New features requiring new assertions
263
+ - Complex multi-step interactions
264
+
265
+ For significant changes, create new tests manually using the [TestDriver agent](/v7/copilot/creating-tests).
@@ -0,0 +1,156 @@
1
+ ---
2
+ title: "Creating Tests"
3
+ sidebarTitle: "Creating Tests"
4
+ description: "Use the TestDriver agent and MCP to create tests through natural language"
5
+ icon: "wand-magic-sparkles"
6
+ ---
7
+
8
+ With GitHub Copilot and TestDriver's MCP server, you can create tests by chatting with an AI agent. The agent spawns a virtual machine, executes actions, and writes test code for you.
9
+
10
+ ## Start a Conversation
11
+
12
+ Open GitHub Copilot Chat in VS Code. If your project has no other agents configured, the TestDriver agent is used by default. Otherwise, select **testdriver** from the agent dropdown in the chat panel.
13
+
14
+ Describe what you want to test:
15
+
16
+ ```
17
+ Create a test that logs into my app at https://myapp.com
18
+ ```
19
+
20
+ The agent will:
21
+ 1. Start a new session and spawn a Linux virtual machine
22
+ 2. Launch Chrome and navigate to your URL
23
+ 3. Execute actions based on your instructions
24
+ 4. Write the test code to a `.test.mjs` file
25
+
26
+ <Note>
27
+ The TestDriver agent appears in the agent selection dropdown if you have other agents configured (like `copilot-instructions.md` or other `.agent.md` files). Make sure to select **testdriver** to use TestDriver's MCP tools.
28
+ </Note>
29
+
30
+ ## Live Preview Panel
31
+
32
+ When the agent starts a session, a **live preview panel** opens in VS Code. This lets you:
33
+
34
+ - **Watch tests execute** in real-time
35
+ - **Interact with the VM** — click, type, and navigate manually
36
+ - **Debug issues** — see exactly what the AI sees
37
+
38
+ <Note>
39
+ The live preview panel requires the TestDriver VS Code extension. Set `TD_PREVIEW=ide` in your MCP configuration to enable it. See the [device configuration docs](/v7/device-config) for all preview options.
40
+ </Note>
41
+
42
+ ## Interactive Workflow
43
+
44
+ The recommended workflow for creating tests:
45
+
46
+ <Steps>
47
+ <Step title="Describe Your Test">
48
+ Tell the agent what you want to test:
49
+
50
+ ```
51
+ Test the checkout flow on https://shop.example.com
52
+ ```
53
+ </Step>
54
+
55
+ <Step title="Watch and Guide">
56
+ The agent will start executing. Watch the preview panel and provide guidance if needed:
57
+
58
+ ```
59
+ The login modal appeared. Use test@example.com and password123
60
+ ```
61
+ </Step>
62
+
63
+ <Step title="Add Assertions">
64
+ Ask the agent to verify specific conditions:
65
+
66
+ ```
67
+ Assert that the order confirmation page is shown with the order number
68
+ ```
69
+ </Step>
70
+
71
+ <Step title="Review the Code">
72
+ The agent writes test code as it works. Review the generated `.test.mjs` file and make any adjustments.
73
+ </Step>
74
+ </Steps>
75
+
76
+ ## Example Conversation
77
+
78
+ Here's a complete example of creating a login test:
79
+
80
+ ```
81
+ You: Create a test for the login flow at https://console.testdriver.ai
82
+
83
+ Agent: I'll create a test for the login flow. Starting a session...
84
+ [Screenshot: Login page loaded]
85
+
86
+ I can see the login page. Let me find the email input.
87
+ [Screenshot: Email input highlighted]
88
+
89
+ Now I'll type the email and find the password field...
90
+
91
+ You: Use test@example.com for the email
92
+
93
+ Agent: Got it. Typing test@example.com...
94
+ [Screenshot: Email entered]
95
+
96
+ Now entering the password and clicking Sign In...
97
+ [Screenshot: Dashboard loaded]
98
+
99
+ ✅ Login successful! I've written the test to tests/login.test.mjs
100
+ ```
101
+
102
+ ## Generated Test Code
103
+
104
+ The agent generates standard Vitest test files:
105
+
106
+ ```javascript tests/login.test.mjs
107
+ import { describe, expect, it } from "vitest";
108
+ import { TestDriver } from "testdriverai/vitest/hooks";
109
+
110
+ describe("Login Flow", () => {
111
+ it("should log in successfully", async (context) => {
112
+ const testdriver = TestDriver(context);
113
+
114
+ await testdriver.provision.chrome({
115
+ url: "https://console.testdriver.ai"
116
+ });
117
+
118
+ const emailInput = await testdriver.find("email input field");
119
+ await emailInput.click();
120
+ await testdriver.type("test@example.com");
121
+
122
+ const passwordInput = await testdriver.find("password input field");
123
+ await passwordInput.click();
124
+ await testdriver.type("password123");
125
+
126
+ const signInButton = await testdriver.find("Sign In button");
127
+ await signInButton.click();
128
+
129
+ const result = await testdriver.assert("dashboard is visible");
130
+ expect(result).toBeTruthy();
131
+ });
132
+ });
133
+ ```
134
+
135
+ ## Tips for Better Tests
136
+
137
+ <AccordionGroup>
138
+ <Accordion title="Be specific with element descriptions">
139
+ Instead of "click the button", say "click the blue Sign In button in the header". More context helps the AI find the right element.
140
+ </Accordion>
141
+ <Accordion title="Add waits for dynamic content">
142
+ If your app has animations or loading states, tell the agent to wait:
143
+ ```
144
+ Wait for the loading spinner to disappear before continuing
145
+ ```
146
+ </Accordion>
147
+ <Accordion title="Use assertions liberally">
148
+ Add assertions after each major action to catch regressions early:
149
+ ```
150
+ Assert that the product was added to the cart
151
+ ```
152
+ </Accordion>
153
+ <Accordion title="Break complex flows into steps">
154
+ For long workflows, create the test incrementally and verify each step works before moving on.
155
+ </Accordion>
156
+ </AccordionGroup>
@@ -0,0 +1,143 @@
1
+ ---
2
+ title: "GitHub Integration"
3
+ sidebarTitle: "GitHub"
4
+ description: "Use TestDriver from GitHub's web interface and mobile app"
5
+ icon: "github"
6
+ ---
7
+
8
+ TestDriver works directly in GitHub's web interface and mobile app. The same MCP server that powers VS Code integration also works in GitHub, letting you create and manage tests from anywhere.
9
+
10
+ ## How It Works
11
+
12
+ When you add a TestDriver agent file to your repository at `.github/agents/testdriver.agent.md`, GitHub Copilot can use TestDriver's MCP tools directly in:
13
+
14
+ - GitHub.com (web browser)
15
+ - GitHub Mobile app (iOS/Android)
16
+ - Pull request conversations
17
+ - Issue comments
18
+
19
+ ## Using TestDriver in GitHub Web
20
+
21
+ <Steps>
22
+ <Step title="Navigate to Your Repository">
23
+ Open your repository on GitHub.com. Make sure you have the TestDriver agent file at `.github/agents/testdriver.agent.md`.
24
+ </Step>
25
+
26
+ <Step title="Start a Copilot Chat">
27
+ Click the **Copilot icon** in the GitHub interface to open a chat. You can find this in:
28
+ - The repository's Code tab
29
+ - Pull request pages
30
+ - Issue pages
31
+ </Step>
32
+
33
+ <Step title="Invoke the TestDriver Agent">
34
+ Start your message with `@testdriver`:
35
+
36
+ ```
37
+ @testdriver Create a test that verifies the homepage loads correctly at https://myapp.com
38
+ ```
39
+
40
+ The agent will spawn a sandbox environment and begin executing, just like in VS Code.
41
+ </Step>
42
+
43
+ <Step title="View Screenshots in Chat">
44
+ As the test runs, screenshots appear directly in the chat. You can see what the AI sees and provide guidance if needed.
45
+ </Step>
46
+ </Steps>
47
+
48
+ ## Creating Tests from PR Comments
49
+
50
+ You can create tests directly from pull request reviews. Comment on a PR and mention Copilot:
51
+
52
+ ```
53
+ @copilot create a TestDriver test that verifies this new feature works.
54
+ Test the checkout flow with a guest user.
55
+ ```
56
+
57
+ Copilot will:
58
+ 1. Use the TestDriver MCP server
59
+ 2. Create a test based on your description
60
+ 3. Commit the test file to the PR branch
61
+
62
+ This is useful for:
63
+ - Adding test coverage during code review
64
+ - Verifying bug fixes before merging
65
+ - Creating regression tests for new features
66
+
67
+ ## Creating Tests from Issues
68
+
69
+ You can also create tests from issue comments:
70
+
71
+ ```
72
+ @copilot Use TestDriver to create a test that reproduces this bug.
73
+ Navigate to /settings, change the theme, and verify it persists after refresh.
74
+ ```
75
+
76
+ The test will be created in a new branch and linked to the issue.
77
+
78
+ ## Mobile App Support
79
+
80
+ The GitHub Mobile app supports Copilot chat, which means you can use TestDriver from your phone:
81
+
82
+ 1. Open the GitHub app
83
+ 2. Navigate to your repository
84
+ 3. Tap the Copilot icon
85
+ 4. Type `@testdriver` followed by your request
86
+
87
+ Screenshots and test progress appear in the chat, letting you create and debug tests on the go.
88
+
89
+ ## Example: PR Review Workflow
90
+
91
+ Here's a complete workflow for adding tests during code review:
92
+
93
+ <Steps>
94
+ <Step title="Developer Opens PR">
95
+ A developer opens a pull request with a new feature.
96
+ </Step>
97
+
98
+ <Step title="Reviewer Requests Tests">
99
+ The reviewer comments:
100
+ ```
101
+ @copilot Create a TestDriver test for this user registration flow.
102
+ Test both successful registration and validation errors.
103
+ ```
104
+ </Step>
105
+
106
+ <Step title="Copilot Creates Tests">
107
+ Copilot spawns TestDriver, creates the tests, and commits them to the PR branch.
108
+ </Step>
109
+
110
+ <Step title="Tests Run in CI">
111
+ The new tests run automatically in CI, validating the feature works as expected.
112
+ </Step>
113
+ </Steps>
114
+
115
+ ## Agent File Reference
116
+
117
+ The agent file at `.github/agents/testdriver.agent.md` contains the configuration for GitHub Copilot to use TestDriver. Here's the structure:
118
+
119
+ ```yaml
120
+ ---
121
+ name: testdriver
122
+ description: An expert at creating and refining automated tests using TestDriver.ai
123
+ mcp-servers:
124
+ testdriver:
125
+ command: npx
126
+ args:
127
+ - -p
128
+ - testdriverai
129
+ - testdriverai-mcp
130
+ env:
131
+ TD_API_KEY: ${TD_API_KEY}
132
+ ---
133
+
134
+ # TestDriver Expert
135
+
136
+ You are an expert at writing automated tests using TestDriver...
137
+ ```
138
+
139
+ The `TD_API_KEY` is pulled from your repository secrets when running in GitHub Actions or from your environment when using the web interface.
140
+
141
+ <Warning>
142
+ Make sure `TD_API_KEY` is set in your repository secrets for CI workflows. Go to **Settings → Secrets and variables → Actions** to add it.
143
+ </Warning>
@@ -0,0 +1,149 @@
1
+ ---
2
+ title: "Running Tests"
3
+ sidebarTitle: "Running Tests"
4
+ description: "Re-run tests with Vitest and use GUI mode for visual debugging"
5
+ icon: "play"
6
+ ---
7
+
8
+ After creating tests with the TestDriver agent, you can re-run them without starting a new MCP session. Tests are saved as standard Vitest files that run independently.
9
+
10
+ ## Running from VS Code (GUI Mode)
11
+
12
+ For a visual testing experience, use the **Vitest extension**:
13
+
14
+ <Steps>
15
+ <Step title="Open Test Explorer">
16
+ Click the **beaker icon** in the VS Code sidebar to open the Test Explorer. This shows all your test files and test cases.
17
+ </Step>
18
+
19
+ <Step title="Run Tests">
20
+ Click the **play button** next to any test file or individual test to run it. You can also:
21
+ - Run all tests with the "Run All" button
22
+ - Debug tests with the "Debug" button
23
+ </Step>
24
+
25
+ <Step title="View Results">
26
+ Test results appear inline:
27
+ - ✅ Green checkmark for passing tests
28
+ - ❌ Red X for failing tests
29
+ - Click on a failing test to see error details
30
+ </Step>
31
+ </Steps>
32
+
33
+ <Warning>
34
+ VS Code's Test Explorer only shows output for **failing tests**. To see output from passing tests (including screenshots and console logs), run tests from the terminal instead.
35
+ </Warning>
36
+
37
+ ## Running from Terminal
38
+
39
+ Use Vitest to run your tests from the command line to see full output:
40
+
41
+ ```bash
42
+ # Run all tests
43
+ vitest run
44
+
45
+ # Run a specific test file
46
+ vitest run tests/login.test.mjs
47
+
48
+ # Run in watch mode (re-runs on file changes)
49
+ vitest
50
+ ```
51
+
52
+ See the [running tests guide](/v7/running-tests) for more CLI options and configuration.
53
+
54
+ ## Iterating on Tests
55
+
56
+ When tests fail or need updates, you have two options:
57
+
58
+ ### Option 1: Ask the MCP Agent (Recommended)
59
+
60
+ For discovering updated element descriptions or debugging failures, chat with the TestDriver agent:
61
+
62
+ ```
63
+ The login test is failing because the form layout changed.
64
+ Update tests/login.test.mjs to work with the new design.
65
+ ```
66
+
67
+ The agent will:
68
+ 1. Start a new session
69
+ 2. Navigate to the page
70
+ 3. Analyze the current state
71
+ 4. Update the test code
72
+
73
+ This is the best approach when:
74
+ - Element text or layout has changed
75
+ - You need to see what's currently on screen
76
+ - The failure reason isn't obvious from the error message
77
+
78
+ ### Option 2: Edit the Code Directly
79
+
80
+ For simple changes, edit the test files directly:
81
+
82
+ ```javascript
83
+ // Change the element description
84
+ const button = await testdriver.find("Submit Order button");
85
+
86
+ // Add a wait
87
+ await testdriver.wait(2000);
88
+
89
+ // Update assertions
90
+ const result = await testdriver.assert("order confirmation shows order ID");
91
+ ```
92
+
93
+ This is faster for:
94
+ - Updating text strings
95
+ - Adjusting timeouts
96
+ - Fixing typos
97
+
98
+ ## Test Configuration
99
+
100
+ ### Timeouts
101
+
102
+ TestDriver tests require longer timeouts than typical unit tests. Your `vitest.config.mjs` should have:
103
+
104
+ ```javascript vitest.config.mjs
105
+ import { defineConfig } from "vitest/config";
106
+
107
+ export default defineConfig({
108
+ test: {
109
+ testTimeout: 900000, // 15 minutes
110
+ hookTimeout: 900000, // 15 minutes for setup/teardown
111
+ },
112
+ });
113
+ ```
114
+
115
+ ### Environment Variables
116
+
117
+ Tests use the `TD_API_KEY` environment variable. Set it in your `.env` file:
118
+
119
+ ```env .env
120
+ TD_API_KEY=your-api-key-here
121
+ ```
122
+
123
+ Or pass it when running tests:
124
+
125
+ ```bash
126
+ TD_API_KEY=your-key vitest run
127
+ ```
128
+
129
+ ## Viewing Test Reports
130
+
131
+ After each test run, TestDriver provides a link to the full test report:
132
+
133
+ ```
134
+ TESTDRIVER_RUN_URL=https://console.testdriver.ai/runs/abc123
135
+ ```
136
+
137
+ The report includes:
138
+ - Video recording of the test
139
+ - Screenshots at each step
140
+ - Network logs and performance metrics
141
+ - Console output and errors
142
+
143
+ <Card
144
+ title="View Test Reports"
145
+ icon="chart-line"
146
+ href="https://console.testdriver.ai"
147
+ >
148
+ Access all your test runs and recordings in the TestDriver console
149
+ </Card>