testdriverai 7.1.0 → 7.1.2

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 (325) hide show
  1. package/.env.example +2 -0
  2. package/.github/workflows/linux-tests.yml +28 -0
  3. package/agent/index.js +18 -45
  4. package/agent/interface.js +13 -2
  5. package/agent/lib/commands.js +1 -1
  6. package/agent/lib/redraw.js +1 -1
  7. package/agent/lib/sandbox.js +30 -2
  8. package/agent/lib/valid-version.js +2 -2
  9. package/debugger/index.html +1 -1
  10. package/docs/docs.json +140 -131
  11. package/docs/v6/getting-started/self-hosting.mdx +3 -2
  12. package/docs/v7/_drafts/agents.mdx +852 -0
  13. package/docs/v7/_drafts/auto-cache-key.mdx +167 -0
  14. package/docs/v7/{guides → _drafts}/caching-selectors.mdx +125 -17
  15. package/docs/v7/_drafts/dashcam-title-feature.mdx +89 -0
  16. package/docs/v7/_drafts/error-handling.mdx +501 -0
  17. package/docs/v7/_drafts/implementation-plan.mdx +994 -0
  18. package/docs/v7/_drafts/init-command.mdx +95 -0
  19. package/docs/v7/_drafts/optimal-sdk-design.mdx +1348 -0
  20. package/docs/v7/_drafts/plugin-migration.mdx +222 -0
  21. package/docs/v7/_drafts/prompt-cache.mdx +200 -0
  22. package/docs/{QUICK_START_TEST_RECORDING.md → v7/_drafts/quick-start-test-recording.mdx} +3 -3
  23. package/docs/v7/_drafts/sdk-logging.mdx +222 -0
  24. package/docs/v7/_drafts/sdk-migration.mdx +474 -0
  25. package/docs/v7/_drafts/sdk-v7-complete.mdx +345 -0
  26. package/docs/v7/{guides → _drafts}/self-hosting.mdx +1 -1
  27. package/docs/v7/{guides → _drafts}/troubleshooting.mdx +2 -2
  28. package/docs/v7/{guides → _drafts}/vitest-plugin.mdx +4 -4
  29. package/docs/v7/api/{ai.mdx → act.mdx} +24 -24
  30. package/docs/v7/api/client.mdx +1 -1
  31. package/docs/v7/api/dashcam.mdx +2 -2
  32. package/docs/v7/api/elements.mdx +143 -41
  33. package/docs/v7/api/find.mdx +258 -0
  34. package/docs/v7/api/type.mdx +51 -7
  35. package/docs/v7/features/ai-native.mdx +427 -0
  36. package/docs/v7/features/easy-to-write.mdx +351 -0
  37. package/docs/v7/features/enterprise.mdx +540 -0
  38. package/docs/v7/features/fast.mdx +424 -0
  39. package/docs/v7/features/observable.mdx +623 -0
  40. package/docs/v7/features/powerful.mdx +531 -0
  41. package/docs/v7/features/scalable.mdx +417 -0
  42. package/docs/v7/features/stable.mdx +514 -0
  43. package/docs/v7/getting-started/configuration.mdx +1 -1
  44. package/docs/v7/getting-started/generating-tests.mdx +525 -0
  45. package/docs/v7/getting-started/installation.mdx +486 -0
  46. package/docs/v7/getting-started/quickstart.mdx +51 -5
  47. package/docs/v7/getting-started/running-and-debugging.mdx +511 -0
  48. package/docs/v7/getting-started/setting-up-in-ci.mdx +612 -0
  49. package/docs/v7/getting-started/writing-tests.mdx +535 -0
  50. package/docs/v7/overview/what-is-testdriver.mdx +398 -0
  51. package/docs/v7/playwright.mdx +3 -3
  52. package/docs/v7/presets/chrome.mdx +16 -0
  53. package/docs/v7/presets/electron.mdx +18 -0
  54. package/docs/v7/presets/vscode.mdx +19 -0
  55. package/examples/run-tests-with-recording.sh +70 -0
  56. package/examples/screenshot-example.js +63 -0
  57. package/examples/sdk-awesome-logs-demo.js +177 -0
  58. package/examples/sdk-cache-thresholds.js +96 -0
  59. package/examples/sdk-element-properties.js +155 -0
  60. package/examples/sdk-simple-example.js +65 -0
  61. package/examples/test-recording-example.test.js +166 -0
  62. package/interfaces/cli/commands/init.js +358 -0
  63. package/interfaces/vitest-plugin.mjs +214 -10
  64. package/{src → lib}/core/Dashcam.js +41 -4
  65. package/{src → lib}/vitest/hooks.mjs +118 -100
  66. package/lib/vitest/setup.mjs +44 -0
  67. package/package.json +9 -10
  68. package/sdk.d.ts +15 -2
  69. package/sdk.js +72 -17
  70. package/{self-hosted.yml → setup/aws/self-hosted.yml} +1 -1
  71. package/{testdriver/acceptance-sdk → test/manual}/test-console-logs.test.mjs +1 -1
  72. package/test/manual/test-find-api.js +73 -0
  73. package/test/manual/test-init.sh +54 -0
  74. package/test/manual/test-prompt-cache.js +96 -0
  75. package/test/manual/test-provision-auth.mjs +22 -0
  76. package/test/manual/test-sandbox-render.js +28 -0
  77. package/test/manual/test-sdk-methods.js +15 -0
  78. package/test/manual/test-sdk-refactor.js +53 -0
  79. package/test/manual/test-stack-trace.mjs +57 -0
  80. package/test/testdriver/assert.test.mjs +41 -0
  81. package/{testdriver/acceptance-sdk → test/testdriver}/auto-cache-key-demo.test.mjs +1 -1
  82. package/{testdriver/acceptance-sdk → test/testdriver}/drag-and-drop.test.mjs +1 -1
  83. package/{testdriver/acceptance-sdk → test/testdriver}/element-not-found.test.mjs +1 -1
  84. package/{testdriver/acceptance-sdk → test/testdriver}/exec-js.test.mjs +1 -1
  85. package/{testdriver/acceptance-sdk → test/testdriver}/exec-output.test.mjs +3 -3
  86. package/{testdriver/acceptance-sdk → test/testdriver}/exec-pwsh.test.mjs +3 -3
  87. package/{testdriver/acceptance-sdk → test/testdriver}/focus-window.test.mjs +1 -1
  88. package/{testdriver/acceptance-sdk → test/testdriver}/formatted-logging.test.mjs +1 -1
  89. package/{testdriver/acceptance-sdk → test/testdriver}/hover-image.test.mjs +1 -1
  90. package/{testdriver/acceptance-sdk → test/testdriver}/hover-text-with-description.test.mjs +1 -1
  91. package/{testdriver/acceptance-sdk → test/testdriver}/hover-text.test.mjs +1 -1
  92. package/{testdriver/acceptance-sdk → test/testdriver}/match-image.test.mjs +1 -1
  93. package/{testdriver/acceptance-sdk → test/testdriver}/press-keys.test.mjs +1 -1
  94. package/{testdriver/acceptance-sdk → test/testdriver}/prompt.test.mjs +2 -2
  95. package/{testdriver/acceptance-sdk → test/testdriver}/scroll-keyboard.test.mjs +1 -1
  96. package/{testdriver/acceptance-sdk → test/testdriver}/scroll-until-image.test.mjs +1 -1
  97. package/{testdriver/acceptance-sdk → test/testdriver}/scroll-until-text.test.mjs +1 -1
  98. package/{testdriver/acceptance-sdk → test/testdriver}/scroll.test.mjs +1 -1
  99. package/{src/vitest/lifecycle.mjs → test/testdriver/setup/lifecycleHelpers.mjs} +84 -99
  100. package/test/testdriver/setup/testHelpers.mjs +653 -0
  101. package/{testdriver/acceptance-sdk → test/testdriver}/type.test.mjs +1 -1
  102. package/vitest.config.mjs +8 -59
  103. package/.github/dependabot.yml +0 -11
  104. package/.github/workflows/acceptance-linux.yml +0 -75
  105. package/.github/workflows/acceptance-sdk-tests.yml +0 -133
  106. package/.github/workflows/acceptance-tests.yml +0 -130
  107. package/.github/workflows/lint.yml +0 -27
  108. package/.github/workflows/publish-canary.yml +0 -40
  109. package/.github/workflows/publish-latest.yml +0 -61
  110. package/.github/workflows/test-install.yml +0 -29
  111. package/.vscode/extensions.json +0 -3
  112. package/.vscode/launch.json +0 -22
  113. package/.vscode/settings.json +0 -14
  114. package/AGENTS.md +0 -550
  115. package/CODEOWNERS +0 -2
  116. package/_testdriver/acceptance/assert.yaml +0 -7
  117. package/_testdriver/acceptance/dashcam.yaml +0 -9
  118. package/_testdriver/acceptance/drag-and-drop.yaml +0 -49
  119. package/_testdriver/acceptance/embed.yaml +0 -9
  120. package/_testdriver/acceptance/exec-js.yaml +0 -29
  121. package/_testdriver/acceptance/exec-output.yaml +0 -43
  122. package/_testdriver/acceptance/exec-shell.yaml +0 -40
  123. package/_testdriver/acceptance/focus-window.yaml +0 -16
  124. package/_testdriver/acceptance/hover-image.yaml +0 -18
  125. package/_testdriver/acceptance/hover-text-with-description.yaml +0 -29
  126. package/_testdriver/acceptance/hover-text.yaml +0 -14
  127. package/_testdriver/acceptance/if-else.yaml +0 -31
  128. package/_testdriver/acceptance/match-image.yaml +0 -15
  129. package/_testdriver/acceptance/press-keys.yaml +0 -35
  130. package/_testdriver/acceptance/prompt.yaml +0 -11
  131. package/_testdriver/acceptance/remember.yaml +0 -27
  132. package/_testdriver/acceptance/screenshots/cart.png +0 -0
  133. package/_testdriver/acceptance/scroll-keyboard.yaml +0 -34
  134. package/_testdriver/acceptance/scroll-until-image.yaml +0 -26
  135. package/_testdriver/acceptance/scroll-until-text.yaml +0 -20
  136. package/_testdriver/acceptance/scroll.yaml +0 -33
  137. package/_testdriver/acceptance/snippets/login.yaml +0 -29
  138. package/_testdriver/acceptance/snippets/match-cart.yaml +0 -8
  139. package/_testdriver/acceptance/type.yaml +0 -29
  140. package/_testdriver/behavior/failure.yaml +0 -7
  141. package/_testdriver/behavior/hover-text.yaml +0 -13
  142. package/_testdriver/behavior/lifecycle/postrun.yaml +0 -10
  143. package/_testdriver/behavior/lifecycle/prerun.yaml +0 -8
  144. package/_testdriver/behavior/lifecycle/provision.yaml +0 -8
  145. package/_testdriver/behavior/secrets.yaml +0 -7
  146. package/_testdriver/edge-cases/dashcam-chrome.yaml +0 -8
  147. package/_testdriver/edge-cases/exec-pwsh-multiline.yaml +0 -10
  148. package/_testdriver/edge-cases/js-exception.yaml +0 -8
  149. package/_testdriver/edge-cases/js-promise.yaml +0 -19
  150. package/_testdriver/edge-cases/lifecycle/postrun.yaml +0 -10
  151. package/_testdriver/edge-cases/prompt-in-middle.yaml +0 -23
  152. package/_testdriver/edge-cases/prompt-nested.yaml +0 -7
  153. package/_testdriver/edge-cases/success-test.yaml +0 -9
  154. package/_testdriver/examples/android/example.yaml +0 -12
  155. package/_testdriver/examples/android/lifecycle/postrun.yaml +0 -11
  156. package/_testdriver/examples/android/lifecycle/provision.yaml +0 -47
  157. package/_testdriver/examples/android/readme.md +0 -7
  158. package/_testdriver/examples/chrome-extension/lifecycle/provision.yaml +0 -74
  159. package/_testdriver/examples/desktop/lifecycle/prerun.yaml +0 -0
  160. package/_testdriver/examples/desktop/lifecycle/provision.yaml +0 -64
  161. package/_testdriver/examples/vscode-extension/lifecycle/provision.yaml +0 -73
  162. package/_testdriver/examples/web/lifecycle/postrun.yaml +0 -7
  163. package/_testdriver/examples/web/lifecycle/prerun.yaml +0 -22
  164. package/_testdriver/lifecycle/postrun.yaml +0 -8
  165. package/_testdriver/lifecycle/prerun.yaml +0 -15
  166. package/_testdriver/lifecycle/provision.yaml +0 -25
  167. package/docs/v7/guides/ci-cd/azure.mdx +0 -587
  168. package/docs/v7/guides/ci-cd/circleci.mdx +0 -523
  169. package/docs/v7/guides/ci-cd/github-actions.mdx +0 -457
  170. package/docs/v7/guides/ci-cd/gitlab.mdx +0 -498
  171. package/docs/v7/guides/ci-cd/jenkins.mdx +0 -664
  172. package/docs/v7/guides/ci-cd/travis.mdx +0 -438
  173. package/scripts/view-test-results.mjs +0 -96
  174. package/src/vitest/extended.mjs +0 -108
  175. package/src/vitest/index.mjs +0 -64
  176. package/src/vitest/utils.mjs +0 -150
  177. package/styles/.vale-config/2-MDX.ini +0 -5
  178. package/styles/Microsoft/AMPM.yml +0 -9
  179. package/styles/Microsoft/Accessibility.yml +0 -30
  180. package/styles/Microsoft/Acronyms.yml +0 -64
  181. package/styles/Microsoft/Adverbs.yml +0 -272
  182. package/styles/Microsoft/Auto.yml +0 -11
  183. package/styles/Microsoft/Avoid.yml +0 -14
  184. package/styles/Microsoft/Contractions.yml +0 -50
  185. package/styles/Microsoft/Dashes.yml +0 -13
  186. package/styles/Microsoft/DateFormat.yml +0 -8
  187. package/styles/Microsoft/DateNumbers.yml +0 -40
  188. package/styles/Microsoft/DateOrder.yml +0 -8
  189. package/styles/Microsoft/Ellipses.yml +0 -9
  190. package/styles/Microsoft/FirstPerson.yml +0 -16
  191. package/styles/Microsoft/Foreign.yml +0 -13
  192. package/styles/Microsoft/Gender.yml +0 -8
  193. package/styles/Microsoft/GenderBias.yml +0 -42
  194. package/styles/Microsoft/GeneralURL.yml +0 -11
  195. package/styles/Microsoft/HeadingAcronyms.yml +0 -7
  196. package/styles/Microsoft/HeadingColons.yml +0 -8
  197. package/styles/Microsoft/HeadingPunctuation.yml +0 -13
  198. package/styles/Microsoft/Headings.yml +0 -28
  199. package/styles/Microsoft/Hyphens.yml +0 -14
  200. package/styles/Microsoft/Negative.yml +0 -13
  201. package/styles/Microsoft/Ordinal.yml +0 -13
  202. package/styles/Microsoft/OxfordComma.yml +0 -8
  203. package/styles/Microsoft/Passive.yml +0 -183
  204. package/styles/Microsoft/Percentages.yml +0 -7
  205. package/styles/Microsoft/Plurals.yml +0 -7
  206. package/styles/Microsoft/Quotes.yml +0 -7
  207. package/styles/Microsoft/RangeTime.yml +0 -13
  208. package/styles/Microsoft/Semicolon.yml +0 -8
  209. package/styles/Microsoft/SentenceLength.yml +0 -6
  210. package/styles/Microsoft/Spacing.yml +0 -8
  211. package/styles/Microsoft/Suspended.yml +0 -7
  212. package/styles/Microsoft/Terms.yml +0 -42
  213. package/styles/Microsoft/URLFormat.yml +0 -9
  214. package/styles/Microsoft/Units.yml +0 -16
  215. package/styles/Microsoft/Vocab.yml +0 -25
  216. package/styles/Microsoft/We.yml +0 -11
  217. package/styles/Microsoft/Wordiness.yml +0 -127
  218. package/styles/Microsoft/meta.json +0 -4
  219. package/styles/alex/Ablist.yml +0 -274
  220. package/styles/alex/Condescending.yml +0 -16
  221. package/styles/alex/Gendered.yml +0 -110
  222. package/styles/alex/LGBTQ.yml +0 -55
  223. package/styles/alex/OCD.yml +0 -10
  224. package/styles/alex/Press.yml +0 -12
  225. package/styles/alex/ProfanityLikely.yml +0 -1289
  226. package/styles/alex/ProfanityMaybe.yml +0 -282
  227. package/styles/alex/ProfanityUnlikely.yml +0 -251
  228. package/styles/alex/README.md +0 -27
  229. package/styles/alex/Race.yml +0 -85
  230. package/styles/alex/Suicide.yml +0 -26
  231. package/styles/alex/meta.json +0 -4
  232. package/styles/config/vocabularies/Docs/accept.txt +0 -47
  233. package/styles/config/vocabularies/Docs/reject.txt +0 -4
  234. package/styles/proselint/Airlinese.yml +0 -8
  235. package/styles/proselint/AnimalLabels.yml +0 -48
  236. package/styles/proselint/Annotations.yml +0 -9
  237. package/styles/proselint/Apologizing.yml +0 -8
  238. package/styles/proselint/Archaisms.yml +0 -52
  239. package/styles/proselint/But.yml +0 -8
  240. package/styles/proselint/Cliches.yml +0 -782
  241. package/styles/proselint/CorporateSpeak.yml +0 -30
  242. package/styles/proselint/Currency.yml +0 -5
  243. package/styles/proselint/Cursing.yml +0 -15
  244. package/styles/proselint/DateCase.yml +0 -7
  245. package/styles/proselint/DateMidnight.yml +0 -7
  246. package/styles/proselint/DateRedundancy.yml +0 -10
  247. package/styles/proselint/DateSpacing.yml +0 -7
  248. package/styles/proselint/DenizenLabels.yml +0 -52
  249. package/styles/proselint/Diacritical.yml +0 -95
  250. package/styles/proselint/GenderBias.yml +0 -45
  251. package/styles/proselint/GroupTerms.yml +0 -39
  252. package/styles/proselint/Hedging.yml +0 -8
  253. package/styles/proselint/Hyperbole.yml +0 -6
  254. package/styles/proselint/Jargon.yml +0 -11
  255. package/styles/proselint/LGBTOffensive.yml +0 -13
  256. package/styles/proselint/LGBTTerms.yml +0 -15
  257. package/styles/proselint/Malapropisms.yml +0 -8
  258. package/styles/proselint/Needless.yml +0 -358
  259. package/styles/proselint/Nonwords.yml +0 -38
  260. package/styles/proselint/Oxymorons.yml +0 -22
  261. package/styles/proselint/P-Value.yml +0 -6
  262. package/styles/proselint/RASSyndrome.yml +0 -30
  263. package/styles/proselint/README.md +0 -12
  264. package/styles/proselint/Skunked.yml +0 -13
  265. package/styles/proselint/Spelling.yml +0 -17
  266. package/styles/proselint/Typography.yml +0 -11
  267. package/styles/proselint/Uncomparables.yml +0 -50
  268. package/styles/proselint/Very.yml +0 -6
  269. package/styles/proselint/meta.json +0 -15
  270. package/styles/write-good/Cliches.yml +0 -702
  271. package/styles/write-good/E-Prime.yml +0 -32
  272. package/styles/write-good/Illusions.yml +0 -11
  273. package/styles/write-good/Passive.yml +0 -183
  274. package/styles/write-good/README.md +0 -27
  275. package/styles/write-good/So.yml +0 -5
  276. package/styles/write-good/ThereIs.yml +0 -6
  277. package/styles/write-good/TooWordy.yml +0 -221
  278. package/styles/write-good/Weasel.yml +0 -29
  279. package/styles/write-good/meta.json +0 -4
  280. package/test/dashcam.test.js +0 -137
  281. package/test/mcp-example-test.yaml +0 -27
  282. package/test/test_parser.js +0 -47
  283. package/testdriver/acceptance-sdk/QUICK_REFERENCE.md +0 -61
  284. package/testdriver/acceptance-sdk/README.md +0 -128
  285. package/testdriver/acceptance-sdk/TEST_REPORTING.md +0 -245
  286. package/testdriver/acceptance-sdk/assert.test.mjs +0 -26
  287. package/testdriver/acceptance-sdk/hooks-example.test.mjs +0 -38
  288. package/testdriver/acceptance-sdk/presets-example.test.mjs +0 -87
  289. package/testdriver/acceptance-sdk/setup/testHelpers.mjs +0 -420
  290. package/testdriver/acceptance-sdk/sully-ai.test.mjs +0 -234
  291. package/testdriver/acceptance-sdk/type-checking-demo.js +0 -49
  292. package/vale.ini +0 -18
  293. package/vitest.config.example.js +0 -19
  294. package/vitest.config.mjs.bak +0 -44
  295. /package/docs/{ARCHITECTURE.md → v7/_drafts/architecture.mdx} +0 -0
  296. /package/docs/{AWESOME_LOGS_QUICK_REF.md → v7/_drafts/awesome-logs-quick-ref.mdx} +0 -0
  297. /package/docs/v7/{guides → _drafts}/best-practices.mdx +0 -0
  298. /package/docs/v7/{guides → _drafts}/caching-ai.mdx +0 -0
  299. /package/docs/v7/{guides → _drafts}/caching.mdx +0 -0
  300. /package/docs/{MIGRATION.md → v7/_drafts/cli-to-sdk-migration.mdx} +0 -0
  301. /package/{CONTRIBUTING.md → docs/v7/_drafts/contributing.mdx} +0 -0
  302. /package/docs/v7/{progressive-apis/CORE.md → _drafts/core.mdx} +0 -0
  303. /package/docs/v7/{guides → _drafts}/debugging.mdx +0 -0
  304. /package/docs/v7/{guides → _drafts}/faq.mdx +0 -0
  305. /package/docs/v7/{progressive-apis/HOOKS.md → _drafts/hooks.mdx} +0 -0
  306. /package/docs/v7/{guides → _drafts}/migration.mdx +0 -0
  307. /package/docs/v7/{guides → _drafts}/performance.mdx +0 -0
  308. /package/docs/{PRESETS.md → v7/_drafts/presets.mdx} +0 -0
  309. /package/docs/v7/{progressive-apis/PROGRESSIVE_DISCLOSURE.md → _drafts/progressive-disclosure.mdx} +0 -0
  310. /package/docs/v7/{progressive-apis/PROVISION.md → _drafts/provision.mdx} +0 -0
  311. /package/docs/{SDK_AWESOME_LOGS.md → v7/_drafts/sdk-awesome-logs.mdx} +0 -0
  312. /package/docs/{sdk-browser-rendering.md → v7/_drafts/sdk-browser-rendering.mdx} +0 -0
  313. /package/docs/{TEST_RECORDING.md → v7/_drafts/test-recording.mdx} +0 -0
  314. /package/docs/v7/{guides → _drafts}/vitest.mdx +0 -0
  315. /package/docs/v7/{README.md → overview/readme.mdx} +0 -0
  316. /package/{src → lib}/core/index.d.ts +0 -0
  317. /package/{src → lib}/core/index.js +0 -0
  318. /package/{src → lib}/presets/index.mjs +0 -0
  319. /package/{src → lib}/vitest/hooks.d.ts +0 -0
  320. /package/{debug-locate-response.js → test/manual/debug-locate-response.js} +0 -0
  321. /package/{verify-element-api.js → test/manual/verify-element-api.js} +0 -0
  322. /package/{verify-types.js → test/manual/verify-types.js} +0 -0
  323. /package/{testdriver/acceptance-sdk → test/testdriver}/chrome-extension.test.mjs +0 -0
  324. /package/{testdriver/acceptance-sdk → test/testdriver}/setup/globalTeardown.mjs +0 -0
  325. /package/{testdriver/acceptance-sdk → test/testdriver}/setup/vitestSetup.mjs +0 -0
@@ -0,0 +1,511 @@
1
+ ---
2
+ title: "Running & Debugging Tests"
3
+ description: "Run tests with Vitest and debug failures with Dashcam replays"
4
+ icon: "play"
5
+ ---
6
+
7
+ Learn how to run TestDriver tests efficiently and debug failures using video replays, logs, and error analysis.
8
+
9
+ ## Running Tests
10
+
11
+ TestDriver works with Vitest's powerful test runner:
12
+
13
+ <Tabs>
14
+ <Tab title="Run All Tests">
15
+ ```bash
16
+ # Run all tests once
17
+ npx vitest run
18
+
19
+ # Run in watch mode
20
+ npx vitest
21
+
22
+ # Run with coverage
23
+ npx vitest run --coverage
24
+ ```
25
+ </Tab>
26
+
27
+ <Tab title="Run Specific Tests">
28
+ ```bash
29
+ # Run specific file
30
+ npx vitest run login.test.js
31
+
32
+ # Run multiple files
33
+ npx vitest run login.test.js checkout.test.js
34
+
35
+ # Run tests matching pattern
36
+ npx vitest run --grep "login"
37
+
38
+ # Run tests in specific folder
39
+ npx vitest run tests/e2e/
40
+ ```
41
+ </Tab>
42
+
43
+ <Tab title="Watch Mode">
44
+ ```bash
45
+ # Watch mode - reruns on file changes
46
+ npx vitest
47
+
48
+ # Watch only changed tests
49
+ npx vitest --changed
50
+
51
+ # Watch specific file
52
+ npx vitest login.test.js
53
+ ```
54
+ </Tab>
55
+
56
+ <Tab title="Parallel Execution">
57
+ ```bash
58
+ # Control concurrency
59
+ npx vitest run --maxConcurrency=5
60
+
61
+ # Run with specific thread count
62
+ npx vitest run --threads --minThreads=2 --maxThreads=8
63
+ ```
64
+ </Tab>
65
+ </Tabs>
66
+
67
+ ## Test Output
68
+
69
+ Understanding test output:
70
+
71
+ ```bash
72
+ $ npx vitest run
73
+
74
+ ✓ login.test.js (3) 23.4s
75
+ ✓ user can login with valid credentials 12.3s
76
+ ✓ shows error for invalid email 5.6s
77
+ ✓ shows error for wrong password 5.5s
78
+
79
+ ✓ checkout.test.js (2) 34.7s
80
+ ✓ user can complete checkout 28.9s
81
+ ✓ validates credit card format 5.8s
82
+
83
+ Test Files 2 passed (2)
84
+ Tests 5 passed (5)
85
+ Duration 58.12s
86
+
87
+ 📹 Dashcam Replays:
88
+ - https://console.testdriver.ai/dashcam/abc123
89
+ - https://console.testdriver.ai/dashcam/def456
90
+ ```
91
+
92
+ <Tip>
93
+ Click the Dashcam URLs to watch video replays of your tests!
94
+ </Tip>
95
+
96
+ ## Debugging with Dashcam
97
+
98
+ Every test automatically records a video replay:
99
+
100
+ <Steps>
101
+ <Step title="Get Replay URL">
102
+ ```javascript
103
+ test('my test', async (context) => {
104
+ const { testdriver, dashcam } = await chrome(context, { url });
105
+
106
+ // Your test code
107
+
108
+ console.log('Replay:', dashcam.url);
109
+ });
110
+ ```
111
+
112
+ Or find URLs in test output.
113
+ </Step>
114
+
115
+ <Step title="Open Replay">
116
+ Visit [console.testdriver.ai](https://console.testdriver.ai) or click the URL directly.
117
+ </Step>
118
+
119
+ <Step title="Analyze Replay">
120
+ Dashcam shows:
121
+ - Full video of test execution
122
+ - Timeline of all actions
123
+ - Console logs synchronized
124
+ - Network requests
125
+ - Element highlights
126
+ - Screenshots at key moments
127
+ </Step>
128
+ </Steps>
129
+
130
+ <Card title="Dashcam Features" icon="video" href="/v7/features/observable">
131
+ - Play/pause, speed control
132
+ - Jump to any action via timeline
133
+ - Frame-by-frame stepping
134
+ - Download as MP4
135
+ - Share with team
136
+ - View network waterfall
137
+ - See console logs
138
+
139
+ [Complete observability guide](/v7/features/observable)
140
+ </Card>
141
+
142
+ ## Understanding Failures
143
+
144
+ When a test fails, TestDriver provides rich debugging information:
145
+
146
+ ```javascript
147
+ try {
148
+ await testdriver.find('submit button').click();
149
+ } catch (error) {
150
+ console.log('Error:', error.message);
151
+ console.log('Type:', error.name); // 'ElementNotFoundError'
152
+ console.log('Similarity:', error.similarity); // 0.72 (how close it got)
153
+ console.log('Screenshot:', error.debugScreenshot); // Base64 image
154
+ console.log('Cache info:', error.cacheInfo);
155
+ }
156
+ ```
157
+
158
+ ### Typical Error Output
159
+
160
+ ```
161
+ ElementNotFoundError: Could not find 'submit button'
162
+
163
+ Debug information:
164
+ - Similarity: 0.72 (partial match found)
165
+ - Timeout: 30000ms
166
+ - Retry attempts: 60
167
+ - Cache hit: false
168
+
169
+ Screenshot saved: .testdriver/debug-screenshots/test-001.png
170
+ Dashcam: https://console.testdriver.ai/dashcam/abc123
171
+
172
+ Recent actions:
173
+ 1. ✓ navigate to https://example.com (2.1s)
174
+ 2. ✓ find('email input') (1.3s)
175
+ 3. ✓ type('user@example.com') (0.8s)
176
+ 4. ✗ find('submit button') (30.0s) FAILED
177
+
178
+ Suggestions:
179
+ - Try more specific selector: 'blue submit button in bottom right'
180
+ - Check if button is visible on screen
181
+ - Verify button loaded (check network tab)
182
+ - View Dashcam replay to see what happened
183
+ ```
184
+
185
+ ## Common Debugging Scenarios
186
+
187
+ <AccordionGroup>
188
+ <Accordion title="Element Not Found">
189
+ **Error:** `ElementNotFoundError: Could not find 'button'`
190
+
191
+ **Debug steps:**
192
+
193
+ 1. **Watch Dashcam replay** - See what's on screen
194
+ 2. **Check similarity score:**
195
+ - `> 0.8` - Close match, be more specific
196
+ - `0.5-0.8` - Partial match, adjust selector
197
+ - `< 0.5` - No match, element might not be present
198
+
199
+ 3. **Try variations:**
200
+ ```javascript
201
+ const selectors = [
202
+ 'submit button',
203
+ 'blue submit button',
204
+ 'button in bottom right',
205
+ 'primary action button'
206
+ ];
207
+
208
+ for (const selector of selectors) {
209
+ try {
210
+ await testdriver.find(selector).click();
211
+ break;
212
+ } catch (error) {
213
+ console.log(`Failed: ${selector} (${error.similarity})`);
214
+ }
215
+ }
216
+ ```
217
+
218
+ 4. **Check timing** - Element might load later:
219
+ ```javascript
220
+ await testdriver.find('submit button', { timeout: 60000 });
221
+ ```
222
+ </Accordion>
223
+
224
+ <Accordion title="Assertion Failures">
225
+ **Error:** `AssertionError: 'welcome message is visible' failed`
226
+
227
+ **Debug steps:**
228
+
229
+ 1. **Watch Dashcam** - Verify what's actually displayed
230
+ 2. **Simplify assertion:**
231
+ ```javascript
232
+ // Instead of:
233
+ await testdriver.assert('welcome message says "Hello John"');
234
+
235
+ // Try:
236
+ await testdriver.assert('welcome message is visible');
237
+ ```
238
+
239
+ 3. **Check timing:**
240
+ ```javascript
241
+ // Wait longer for async content
242
+ await testdriver.assert('message is visible', { timeout: 60000 });
243
+ ```
244
+
245
+ 4. **Use find() instead:**
246
+ ```javascript
247
+ const element = await testdriver.find('welcome message');
248
+ console.log('Message text:', element.text);
249
+ ```
250
+ </Accordion>
251
+
252
+ <Accordion title="Test Timeout">
253
+ **Error:** `Test timed out after 120000ms`
254
+
255
+ **Debug steps:**
256
+
257
+ 1. **Increase timeout:**
258
+ ```javascript vitest.config.mjs
259
+ export default defineConfig({
260
+ test: {
261
+ testTimeout: 180000, // 3 minutes
262
+ },
263
+ });
264
+ ```
265
+
266
+ 2. **Check sandbox logs** - Look for network issues
267
+ 3. **Watch Dashcam** - See where test got stuck
268
+ 4. **Add checkpoints:**
269
+ ```javascript
270
+ await testdriver.find('button').click();
271
+ console.log('Clicked button');
272
+
273
+ await testdriver.assert('page loaded');
274
+ console.log('Page loaded');
275
+ ```
276
+ </Accordion>
277
+
278
+ <Accordion title="Flaky Tests">
279
+ **Issue:** Test passes sometimes, fails other times
280
+
281
+ **Solutions:**
282
+
283
+ 1. **Check Dashcam replays** - Compare passing vs failing runs
284
+ 2. **Increase stability delay:**
285
+ ```javascript
286
+ await testdriver.find('element', {
287
+ stabilityDelay: 500 // Wait 500ms for stability
288
+ });
289
+ ```
290
+
291
+ 3. **Wait for network:**
292
+ ```javascript
293
+ await testdriver.find('button').click();
294
+ // TestDriver automatically waits for network requests
295
+ await testdriver.assert('content loaded');
296
+ ```
297
+
298
+ 4. **Disable animations in test mode:**
299
+ ```javascript
300
+ await testdriver.exec('js', `
301
+ document.querySelectorAll('*').forEach(el => {
302
+ el.style.transition = 'none';
303
+ el.style.animation = 'none';
304
+ });
305
+ `, 5000);
306
+ ```
307
+
308
+ [Learn more about stability](/v7/features/stable)
309
+ </Accordion>
310
+ </AccordionGroup>
311
+
312
+ ## Debugging Tools
313
+
314
+ ### 1. Console Logging
315
+
316
+ ```javascript
317
+ test('debug test', async (context) => {
318
+ const { testdriver } = await chrome(context, { url });
319
+
320
+ console.log('Starting test...');
321
+
322
+ const element = await testdriver.find('button');
323
+ console.log('Found element:', {
324
+ text: element.text,
325
+ coordinates: element.coordinates,
326
+ confidence: element.confidence,
327
+ cacheHit: element.cacheHit
328
+ });
329
+
330
+ await element.click();
331
+ console.log('Clicked element');
332
+ });
333
+ ```
334
+
335
+ ### 2. Screenshots
336
+
337
+ ```javascript
338
+ // Capture debug screenshot
339
+ try {
340
+ await testdriver.find('element');
341
+ } catch (error) {
342
+ // Save debug screenshot
343
+ const fs = require('fs');
344
+ const buffer = Buffer.from(error.debugScreenshot, 'base64');
345
+ fs.writeFileSync('debug.png', buffer);
346
+ console.log('Screenshot saved to debug.png');
347
+ }
348
+ ```
349
+
350
+ ### 3. Step-by-Step Execution
351
+
352
+ ```javascript
353
+ test('step by step', async (context) => {
354
+ const { testdriver } = await chrome(context, { url });
355
+
356
+ console.log('Step 1: Find email input');
357
+ const email = await testdriver.find('email input');
358
+ console.log('✓ Found:', email);
359
+
360
+ console.log('Step 2: Type email');
361
+ await email.type('user@example.com');
362
+ console.log('✓ Typed');
363
+
364
+ console.log('Step 3: Find button');
365
+ const button = await testdriver.find('submit button');
366
+ console.log('✓ Found:', button);
367
+
368
+ console.log('Step 4: Click button');
369
+ await button.click();
370
+ console.log('✓ Clicked');
371
+ });
372
+ ```
373
+
374
+ ### 4. Network Inspection
375
+
376
+ ```javascript
377
+ // View network activity in Dashcam replay
378
+ test('check network', async (context) => {
379
+ const { testdriver } = await chrome(context, {
380
+ url,
381
+ captureNetwork: true // Enable network capture
382
+ });
383
+
384
+ await testdriver.find('load data button').click();
385
+
386
+ // Network requests appear in Dashcam replay
387
+ // Filter by XHR, images, scripts, etc.
388
+ });
389
+ ```
390
+
391
+ ## Performance Profiling
392
+
393
+ Identify slow tests:
394
+
395
+ ```bash
396
+ # Run with reporter showing timing
397
+ npx vitest run --reporter=verbose
398
+
399
+ # Output shows duration per test:
400
+ ✓ slow-test.test.js > user can checkout (34.7s)
401
+ → find('product') (2.1s)
402
+ → click() (0.4s)
403
+ → find('add to cart') (1.8s)
404
+ → click() (0.3s)
405
+ → find('checkout') (28.9s) ← SLOW!
406
+ → click() (0.5s)
407
+ ```
408
+
409
+ Optimize slow operations:
410
+
411
+ 1. **Enable caching** - First run is slow, subsequent runs are fast
412
+ 2. **Use parallel execution** - Run tests concurrently
413
+ 3. **Check network delays** - Look for slow API calls in Dashcam
414
+ 4. **Optimize selectors** - More specific = faster matching
415
+
416
+ [Performance optimization guide](/v7/guides/performance)
417
+
418
+ ## Debugging in CI/CD
419
+
420
+ When tests fail in CI:
421
+
422
+ <Steps>
423
+ <Step title="Get Dashcam URL">
424
+ CI output includes replay URLs:
425
+
426
+ ```
427
+ Tests failed!
428
+ Dashcam replay: https://console.testdriver.ai/dashcam/abc123
429
+ ```
430
+ </Step>
431
+
432
+ <Step title="Download Artifacts">
433
+ Save debug screenshots and logs:
434
+
435
+ ```yaml .github/workflows/test.yml
436
+ - uses: actions/upload-artifact@v3
437
+ if: failure()
438
+ with:
439
+ name: test-artifacts
440
+ path: |
441
+ .testdriver/debug-screenshots/
442
+ .testdriver/dashcam-urls.txt
443
+ ```
444
+ </Step>
445
+
446
+ <Step title="Reconnect to Sandbox">
447
+ If test failed, reconnect to same sandbox to debug:
448
+
449
+ ```bash
450
+ # Get sandbox ID from CI logs
451
+ export TESTDRIVER_SANDBOX_ID=i-abc123def
452
+
453
+ # Run tests locally against same sandbox
454
+ npx vitest run
455
+ ```
456
+
457
+ [Sandbox management guide](/agents.md#sandbox-management)
458
+ </Step>
459
+ </Steps>
460
+
461
+ ## Vitest UI
462
+
463
+ Use Vitest UI for interactive debugging:
464
+
465
+ ```bash
466
+ # Start Vitest UI
467
+ npx vitest --ui
468
+ ```
469
+
470
+ Open http://localhost:51204 to see:
471
+ - Test file tree
472
+ - Test status and duration
473
+ - Console output
474
+ - Re-run individual tests
475
+ - Filter and search tests
476
+
477
+ ## Next Steps
478
+
479
+ <CardGroup cols={2}>
480
+ <Card
481
+ title="Setting Up in CI"
482
+ icon="arrows-spin"
483
+ href="/v7/getting-started/setting-up-in-ci"
484
+ >
485
+ Run tests in CI/CD pipelines
486
+ </Card>
487
+
488
+ <Card
489
+ title="Debugging Guide"
490
+ icon="bug"
491
+ href="/v7/guides/debugging"
492
+ >
493
+ Advanced debugging techniques
494
+ </Card>
495
+
496
+ <Card
497
+ title="Observable Features"
498
+ icon="microscope"
499
+ href="/v7/features/observable"
500
+ >
501
+ Complete observability guide
502
+ </Card>
503
+
504
+ <Card
505
+ title="Troubleshooting"
506
+ icon="wrench"
507
+ href="/v7/guides/troubleshooting"
508
+ >
509
+ Common issues and solutions
510
+ </Card>
511
+ </CardGroup>