@testdriverai/agent 7.8.0-test.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,604 @@
1
+ ---
2
+ title: "Dashcam Replays"
3
+ description: "Complete visibility into test execution with replays, logs, and analytics"
4
+ icon: "video"
5
+ ---
6
+
7
+ Debugging test failures is effortless with TestDriver's comprehensive test replay features - video replays, detailed logs, network monitoring, and performance metrics.
8
+
9
+ ## Video Replays with Dashcam
10
+
11
+ Every test automatically records a video replay for easy debugging:
12
+
13
+ <Card title="Dashcam Features" icon="video">
14
+ **Every replay includes:**
15
+
16
+ - Full video recording of test execution
17
+ - Timeline with all actions marked
18
+ - Screenshots at key moments
19
+ - Console logs synchronized with video
20
+ - Network requests with timing
21
+ - Element highlights on interactions
22
+ - Slow-motion playback
23
+ - Frame-by-frame stepping
24
+ </Card>
25
+
26
+ [View all replays at app.testdriver.ai](https://app.testdriver.ai)
27
+
28
+ ## Replay Features
29
+
30
+ <Tabs>
31
+ <Tab title="Video Playback">
32
+ - **Full resolution** - Recorded at native screen resolution
33
+ - **Variable speed** - Play at 0.25x to 2x speed
34
+ - **Frame-by-frame** - Step through individual frames
35
+ - **Jump to action** - Click timeline to jump to any action
36
+ - **Download** - Save replay as MP4
37
+ </Tab>
38
+
39
+ <Tab title="Action Timeline">
40
+ ```
41
+ 00:00.000 Test started
42
+ 00:01.234 find('submit button')
43
+ 00:02.567 click()
44
+ 00:03.890 find('email input')
45
+ 00:04.123 type('user@example.com')
46
+ 00:05.456 find('password input')
47
+ 00:06.789 type('***') [secret]
48
+ 00:07.012 find('Login button')
49
+ 00:07.345 click()
50
+ 00:09.678 assert('Dashboard is visible')
51
+ 00:10.901 Test passed ✓
52
+ ```
53
+
54
+ Click any action to jump to that moment in the replay.
55
+ </Tab>
56
+
57
+ <Tab title="Element Highlights">
58
+ All interactions show visual highlights:
59
+
60
+ - **Green outline** - Element being located
61
+ - **Blue flash** - Click action
62
+ - **Yellow highlight** - Hover action
63
+ - **Red outline** - Failed assertion
64
+ - **Purple marker** - Type action
65
+ </Tab>
66
+
67
+ <Tab title="Sharing">
68
+ Share replays with your team:
69
+
70
+ ```javascript
71
+ // Public link (anyone with link can view)
72
+ console.log('Public replay:', dashcam.url);
73
+
74
+ // Team-only link (requires login)
75
+ console.log('Team replay:', dashcam.privateUrl);
76
+
77
+ // Embed in CI/CD
78
+ console.log('Embed:', dashcam.embedUrl);
79
+ ```
80
+
81
+ Replays can be:
82
+ - Shared via link
83
+ - Embedded in CI reports
84
+ - Downloaded as video
85
+ - Exported with logs
86
+ </Tab>
87
+ </Tabs>
88
+
89
+ ## Application Logs
90
+
91
+ Access all console output from your application:
92
+
93
+ ```javascript
94
+ test('with console logging', async (context) => {
95
+ const { testdriver } = await chrome(context, {
96
+ url: 'https://example.com',
97
+ captureConsole: true // Enable console capture
98
+ });
99
+
100
+ // Your test code
101
+ await testdriver.find('button').click();
102
+
103
+ // Application console logs are captured automatically
104
+ // View them in Dashcam replay
105
+ });
106
+ ```
107
+
108
+ <Accordion title="Captured Log Types">
109
+ **Browser Console:**
110
+ - `console.log()` - Debug messages
111
+ - `console.warn()` - Warnings
112
+ - `console.error()` - Errors
113
+ - `console.info()` - Info messages
114
+ - `console.debug()` - Debug messages
115
+
116
+ **Application Logs:**
117
+ - JavaScript errors and exceptions
118
+ - Unhandled promise rejections
119
+ - Network errors (404, 500, etc.)
120
+ - Security errors (CORS, CSP)
121
+ - React/Vue warnings
122
+ </Accordion>
123
+
124
+ ## Network Monitoring
125
+
126
+ Complete visibility into all network activity:
127
+
128
+ <Card title="Network Request Details" icon="network-wired">
129
+ **For every request, view:**
130
+
131
+ - URL and method (GET, POST, etc.)
132
+ - Request headers
133
+ - Request payload/body
134
+ - Response status code
135
+ - Response headers
136
+ - Response body
137
+ - Timing breakdown (DNS, Connect, TLS, Wait, Download)
138
+ - Size (request and response)
139
+ - Initiated by (script/user action)
140
+ </Card>
141
+
142
+ ```javascript
143
+ test('network monitoring', async (context) => {
144
+ const { testdriver } = await chrome(context, {
145
+ url: 'https://api.example.com',
146
+ captureNetwork: true
147
+ });
148
+
149
+ await testdriver.find('Load data button').click();
150
+
151
+ // Network requests are captured and shown in Dashcam
152
+ // Filter by:
153
+ // - XHR/Fetch
154
+ // - Images
155
+ // - Scripts
156
+ // - Stylesheets
157
+ // - Failed requests
158
+ });
159
+ ```
160
+
161
+ ### Network Waterfall
162
+
163
+ View request timing in a waterfall chart:
164
+
165
+ ```
166
+ GET /api/users ████████░░░░░░░░ 245ms
167
+ GET /api/posts ░░░░████████████ 412ms
168
+ GET /avatar.jpg ░░░░░░░░░░██░░░░ 87ms
169
+ POST /api/comment ░░░░░░░░░░░░████ 156ms
170
+ ```
171
+
172
+ ### Failed Requests
173
+
174
+ Easily identify failed network requests:
175
+
176
+ ```
177
+ ❌ GET /api/data 404 Not Found (234ms)
178
+ ❌ POST /api/submit 500 Internal Error (891ms)
179
+ ❌ GET /image.jpg Failed to fetch (timeout)
180
+ ```
181
+
182
+ ## Performance Metrics
183
+
184
+ Track application performance over time:
185
+
186
+ <Tabs>
187
+ <Tab title="Page Load Metrics">
188
+ ```javascript
189
+ test('measure performance', async (context) => {
190
+ const { testdriver } = await chrome(context, {
191
+ url: 'https://example.com',
192
+ capturePerformance: true
193
+ });
194
+
195
+ // Metrics automatically captured:
196
+ // - First Contentful Paint (FCP)
197
+ // - Largest Contentful Paint (LCP)
198
+ // - Time to Interactive (TTI)
199
+ // - Total Blocking Time (TBT)
200
+ // - Cumulative Layout Shift (CLS)
201
+ });
202
+ ```
203
+
204
+ View Core Web Vitals in Dashcam replay.
205
+ </Tab>
206
+
207
+ <Tab title="Resource Timing">
208
+ ```
209
+ Resource Performance:
210
+ - HTML: 234ms
211
+ - CSS: 456ms (3 files)
212
+ - JavaScript: 892ms (12 files)
213
+ - Images: 1.2s (45 files)
214
+ - Fonts: 234ms (2 files)
215
+ Total: 3.0s
216
+ ```
217
+
218
+ Identify slow resources in your application.
219
+ </Tab>
220
+
221
+ <Tab title="CPU Usage">
222
+ ```
223
+ CPU Usage During Test:
224
+ Average: 34%
225
+ Peak: 67% (at 00:05.234)
226
+ Idle: 15%
227
+
228
+ High CPU events:
229
+ - 00:05.234: JavaScript parsing (67%)
230
+ - 00:08.901: Animation rendering (54%)
231
+ ```
232
+
233
+ Available in enterprise plans.
234
+ </Tab>
235
+
236
+ <Tab title="Memory Usage">
237
+ ```
238
+ Memory Usage:
239
+ Start: 45MB
240
+ Peak: 187MB (at 00:12.456)
241
+ End: 92MB
242
+
243
+ Potential leaks:
244
+ - 00:15.000: +45MB (no corresponding release)
245
+ ```
246
+
247
+ Detect memory leaks in your application.
248
+ Available in enterprise plans.
249
+ </Tab>
250
+ </Tabs>
251
+
252
+ ## Debug Screenshots
253
+
254
+ Automatic screenshots on failures:
255
+
256
+ ```javascript
257
+ try {
258
+ await testdriver.find('missing element');
259
+ } catch (error) {
260
+ // Automatic debug screenshot
261
+ console.log('Screenshot:', error.debugScreenshot); // Base64 image
262
+ console.log('Similarity:', error.similarity); // How close we got
263
+ console.log('Confidence:', error.confidence); // AI confidence
264
+
265
+ // Screenshot shows:
266
+ // - Full page at time of failure
267
+ // - Highlighted search area
268
+ // - Similar elements (if any)
269
+ }
270
+ ```
271
+
272
+ <Card title="Debug Screenshot Features" icon="camera">
273
+ - Full page screenshot at failure point
274
+ - Annotated with attempted action
275
+ - Similar elements highlighted
276
+ - Bounding boxes for close matches
277
+ - Automatically attached to test report
278
+ </Card>
279
+
280
+ ## Test Reports
281
+
282
+ Generate comprehensive test reports:
283
+
284
+ <Tabs>
285
+ <Tab title="HTML Report">
286
+ ```bash
287
+ vitest run --reporter=html
288
+ ```
289
+
290
+ Generates interactive HTML report with:
291
+ - Pass/fail status for all tests
292
+ - Execution time per test
293
+ - Dashcam replay links
294
+ - Screenshots on failures
295
+ - Error messages and stack traces
296
+ </Tab>
297
+
298
+ <Tab title="JSON Report">
299
+ ```bash
300
+ vitest run --reporter=json > report.json
301
+ ```
302
+
303
+ ```json
304
+ {
305
+ "testResults": [
306
+ {
307
+ "name": "user can login",
308
+ "status": "passed",
309
+ "duration": 12345,
310
+ "dashcamUrl": "https://console.testdriver.ai/dashcam/abc123",
311
+ "assertions": 3
312
+ }
313
+ ]
314
+ }
315
+ ```
316
+ </Tab>
317
+
318
+ <Tab title="JUnit XML">
319
+ ```bash
320
+ vitest run --reporter=junit --outputFile=results.xml
321
+ ```
322
+
323
+ ```xml
324
+ <testsuite name="login.test.js" tests="3" failures="0">
325
+ <testcase name="user can login" time="12.345">
326
+ <system-out>
327
+ Dashcam: https://console.testdriver.ai/dashcam/abc123
328
+ </system-out>
329
+ </testcase>
330
+ </testsuite>
331
+ ```
332
+ </Tab>
333
+
334
+ <Tab title="Custom Report">
335
+ ```javascript
336
+ import { BaseReporter } from 'vitest/reporters';
337
+
338
+ class CustomReporter extends BaseReporter {
339
+ onTestEnd(test) {
340
+ // Send to your analytics system
341
+ analytics.track('test_complete', {
342
+ name: test.name,
343
+ status: test.result.state,
344
+ duration: test.result.duration,
345
+ dashcamUrl: test.context.dashcam?.url
346
+ });
347
+ }
348
+ }
349
+
350
+ export default {
351
+ test: {
352
+ reporters: [new CustomReporter()]
353
+ }
354
+ };
355
+ ```
356
+ </Tab>
357
+ </Tabs>
358
+
359
+ ## Analytics Dashboard
360
+
361
+ View test analytics at [console.testdriver.ai](https://console.testdriver.ai):
362
+
363
+ <CardGroup cols={2}>
364
+ <Card title="Test Trends" icon="chart-line">
365
+ - Pass/fail rate over time
366
+ - Average execution time
367
+ - Flaky test identification
368
+ - Most expensive tests
369
+ - Cache hit rates
370
+ </Card>
371
+
372
+ <Card title="Performance Trends" icon="gauge-high">
373
+ - Page load times
374
+ - Core Web Vitals
375
+ - Resource loading times
376
+ - API response times
377
+ - Performance regressions
378
+ </Card>
379
+
380
+ <Card title="Cost Analysis" icon="dollar-sign">
381
+ - Daily/weekly/monthly costs
382
+ - Cost per test
383
+ - Cost by team member
384
+ - Sandbox usage
385
+ - API call volume
386
+ </Card>
387
+
388
+ <Card title="Team Activity" icon="users">
389
+ - Tests run by user
390
+ - Most active tests
391
+ - Peak usage times
392
+ - Sandbox utilization
393
+ - Failed test hotspots
394
+ </Card>
395
+ </CardGroup>
396
+
397
+ ## Failure Analysis
398
+
399
+ Quickly identify and diagnose test failures:
400
+
401
+ ```javascript
402
+ // Failed test provides rich context
403
+ test('failing test', async (context) => {
404
+ const { testdriver, dashcam } = await chrome(context, {
405
+ url: 'https://example.com'
406
+ });
407
+
408
+ try {
409
+ await testdriver.find('missing button').click();
410
+ } catch (error) {
411
+ console.log('Failure details:', {
412
+ message: error.message,
413
+ dashcamUrl: dashcam.url,
414
+ screenshot: error.debugScreenshot,
415
+ similarity: error.similarity,
416
+ timestamp: error.timestamp,
417
+ sandboxId: context.sandboxId
418
+ });
419
+ throw error;
420
+ }
421
+ });
422
+ ```
423
+
424
+ ### Failure Report
425
+
426
+ ```
427
+ ❌ Test failed: user can login
428
+
429
+ Error: ElementNotFoundError: Could not find 'missing button'
430
+ at TestDriver.find (testdriver.js:123)
431
+ at login.test.js:15:24
432
+
433
+ Details:
434
+ - Similarity: 0.34 (no close match)
435
+ - Duration: 12.3s
436
+ - Dashcam: https://console.testdriver.ai/dashcam/abc123
437
+ - Screenshot: [attached]
438
+ - Sandbox: i-0abc123def456789
439
+
440
+ Recent actions:
441
+ 1. navigate to https://example.com ✓
442
+ 2. find('email input') ✓
443
+ 3. type('user@example.com') ✓
444
+ 4. find('missing button') ✗
445
+
446
+ Console errors:
447
+ - TypeError: Cannot read property 'x' of undefined (app.js:456)
448
+ - Warning: Missing key prop (React)
449
+
450
+ Network errors:
451
+ - 404: /api/user-settings (234ms)
452
+ ```
453
+
454
+ ## CI/CD Integration
455
+
456
+ Integrate test results into your CI/CD pipeline:
457
+
458
+ <Tabs>
459
+ <Tab title="GitHub Actions">
460
+ ```yaml
461
+ - name: Run tests
462
+ run: vitest run
463
+ env:
464
+ TD_API_KEY: ${{ secrets.TD_API_KEY }}
465
+
466
+ - name: Upload results
467
+ if: always()
468
+ uses: actions/upload-artifact@v3
469
+ with:
470
+ name: test-results
471
+ path: |
472
+ test-results.xml
473
+ .testdriver/dashcam-urls.txt
474
+
475
+ - name: Comment PR
476
+ if: failure()
477
+ uses: actions/github-script@v6
478
+ with:
479
+ script: |
480
+ const fs = require('fs');
481
+ const dashcamUrls = fs.readFileSync('.testdriver/dashcam-urls.txt', 'utf8');
482
+ github.rest.issues.createComment({
483
+ issue_number: context.issue.number,
484
+ body: `Tests failed. View replays:\n${dashcamUrls}`
485
+ });
486
+ ```
487
+ </Tab>
488
+
489
+ <Tab title="Slack Notifications">
490
+ ```javascript
491
+ // Post test results to Slack
492
+ import { WebClient } from '@slack/web-api';
493
+
494
+ test.afterEach(async (context) => {
495
+ if (context.task.result.state === 'fail') {
496
+ const slack = new WebClient(process.env.SLACK_TOKEN);
497
+
498
+ await slack.chat.postMessage({
499
+ channel: '#test-failures',
500
+ text: `Test failed: ${context.task.name}`,
501
+ attachments: [{
502
+ color: 'danger',
503
+ fields: [
504
+ { title: 'Test', value: context.task.name },
505
+ { title: 'Replay', value: context.dashcam.url },
506
+ { title: 'Error', value: context.task.result.error.message }
507
+ ]
508
+ }]
509
+ });
510
+ }
511
+ });
512
+ ```
513
+ </Tab>
514
+
515
+ <Tab title="Jira Integration">
516
+ ```javascript
517
+ // Automatically create Jira tickets for failures
518
+ import { JiraClient } from 'jira-client';
519
+
520
+ test.afterEach(async (context) => {
521
+ if (context.task.result.state === 'fail') {
522
+ const jira = new JiraClient({
523
+ host: 'company.atlassian.net',
524
+ apiVersion: '2'
525
+ });
526
+
527
+ await jira.addNewIssue({
528
+ fields: {
529
+ project: { key: 'TEST' },
530
+ summary: `Test failure: ${context.task.name}`,
531
+ description: `
532
+ Test failed: ${context.task.name}
533
+
534
+ Error: ${context.task.result.error.message}
535
+
536
+ Replay: ${context.dashcam.url}
537
+
538
+ Sandbox: ${context.sandboxId}
539
+ `,
540
+ issuetype: { name: 'Bug' }
541
+ }
542
+ });
543
+ }
544
+ });
545
+ ```
546
+ </Tab>
547
+ </Tabs>
548
+
549
+ ## Real-Time Monitoring
550
+
551
+ Monitor tests as they run:
552
+
553
+ ```bash
554
+ # Watch test execution in real-time
555
+ vitest --reporter=verbose
556
+
557
+ # Output:
558
+ ✓ login.test.js > user can login (12.3s)
559
+ → find('email input') (1.2s)
560
+ → type('user@example.com') (0.8s)
561
+ → find('password input') (0.9s)
562
+ → type('***') (0.7s) [secret]
563
+ → find('Login button') (1.1s)
564
+ → click() (0.4s)
565
+ → assert('Dashboard is visible') (7.2s)
566
+ ✓ Test passed
567
+ 📹 Replay: https://console.testdriver.ai/dashcam/abc123
568
+ ```
569
+
570
+ ## Learn More
571
+
572
+ <CardGroup cols={2}>
573
+ <Card
574
+ title="Dashcam API"
575
+ icon="video"
576
+ href="/v7/api/dashcam"
577
+ >
578
+ Complete Dashcam documentation
579
+ </Card>
580
+
581
+ <Card
582
+ title="Debugging Guide"
583
+ icon="bug"
584
+ href="/v7/guides/debugging"
585
+ >
586
+ Debug failing tests effectively
587
+ </Card>
588
+
589
+ <Card
590
+ title="View Replays"
591
+ icon="play"
592
+ href="https://console.testdriver.ai"
593
+ >
594
+ Access your test replays
595
+ </Card>
596
+
597
+ <Card
598
+ title="Performance Guide"
599
+ icon="gauge-high"
600
+ href="/v7/guides/performance"
601
+ >
602
+ Optimize test performance
603
+ </Card>
604
+ </CardGroup>