testdriverai 7.0.0 → 7.1.1

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 (324) hide show
  1. package/.env.example +2 -0
  2. package/.github/workflows/linux-tests.yml +28 -0
  3. package/README.md +126 -0
  4. package/agent/index.js +7 -9
  5. package/agent/interface.js +13 -2
  6. package/agent/lib/commands.js +795 -136
  7. package/agent/lib/redraw.js +124 -39
  8. package/agent/lib/sandbox.js +40 -3
  9. package/agent/lib/sdk.js +21 -0
  10. package/agent/lib/valid-version.js +2 -2
  11. package/debugger/index.html +1 -1
  12. package/docs/docs.json +86 -71
  13. package/docs/guide/best-practices-polling.mdx +154 -0
  14. package/docs/v6/getting-started/self-hosting.mdx +3 -2
  15. package/docs/v7/_drafts/agents.mdx +852 -0
  16. package/docs/v7/_drafts/auto-cache-key.mdx +167 -0
  17. package/docs/v7/_drafts/best-practices.mdx +486 -0
  18. package/docs/v7/_drafts/caching-ai.mdx +215 -0
  19. package/docs/v7/_drafts/caching-selectors.mdx +400 -0
  20. package/docs/v7/_drafts/caching.mdx +366 -0
  21. package/docs/v7/_drafts/cli-to-sdk-migration.mdx +425 -0
  22. package/docs/v7/_drafts/core.mdx +459 -0
  23. package/docs/v7/_drafts/dashcam-title-feature.mdx +89 -0
  24. package/docs/v7/_drafts/debugging.mdx +349 -0
  25. package/docs/v7/_drafts/error-handling.mdx +501 -0
  26. package/docs/v7/_drafts/faq.mdx +393 -0
  27. package/docs/v7/_drafts/hooks.mdx +360 -0
  28. package/docs/v7/_drafts/implementation-plan.mdx +994 -0
  29. package/docs/v7/_drafts/init-command.mdx +95 -0
  30. package/docs/v7/_drafts/optimal-sdk-design.mdx +1348 -0
  31. package/docs/v7/_drafts/performance.mdx +517 -0
  32. package/docs/v7/_drafts/presets.mdx +210 -0
  33. package/docs/v7/_drafts/progressive-disclosure.mdx +230 -0
  34. package/docs/v7/_drafts/provision.mdx +266 -0
  35. package/docs/{QUICK_START_TEST_RECORDING.md → v7/_drafts/quick-start-test-recording.mdx} +3 -3
  36. package/docs/v7/_drafts/sdk-v7-complete.mdx +345 -0
  37. package/docs/v7/{guides → _drafts}/self-hosting.mdx +1 -1
  38. package/docs/v7/_drafts/troubleshooting.mdx +526 -0
  39. package/docs/v7/_drafts/vitest-plugin.mdx +477 -0
  40. package/docs/v7/_drafts/vitest.mdx +535 -0
  41. package/docs/v7/api/{ai.mdx → act.mdx} +24 -24
  42. package/docs/v7/api/client.mdx +1 -1
  43. package/docs/v7/api/dashcam.mdx +497 -0
  44. package/docs/v7/api/doubleClick.mdx +102 -0
  45. package/docs/v7/api/elements.mdx +143 -41
  46. package/docs/v7/api/find.mdx +258 -0
  47. package/docs/v7/api/mouseDown.mdx +161 -0
  48. package/docs/v7/api/mouseUp.mdx +164 -0
  49. package/docs/v7/api/rightClick.mdx +123 -0
  50. package/docs/v7/api/type.mdx +51 -7
  51. package/docs/v7/features/ai-native.mdx +427 -0
  52. package/docs/v7/features/easy-to-write.mdx +351 -0
  53. package/docs/v7/features/enterprise.mdx +540 -0
  54. package/docs/v7/features/fast.mdx +424 -0
  55. package/docs/v7/features/observable.mdx +623 -0
  56. package/docs/v7/features/powerful.mdx +531 -0
  57. package/docs/v7/features/scalable.mdx +417 -0
  58. package/docs/v7/features/stable.mdx +514 -0
  59. package/docs/v7/getting-started/configuration.mdx +380 -0
  60. package/docs/v7/getting-started/generating-tests.mdx +525 -0
  61. package/docs/v7/getting-started/installation.mdx +486 -0
  62. package/docs/v7/getting-started/quickstart.mdx +320 -141
  63. package/docs/v7/getting-started/running-and-debugging.mdx +511 -0
  64. package/docs/v7/getting-started/setting-up-in-ci.mdx +612 -0
  65. package/docs/v7/getting-started/writing-tests.mdx +535 -0
  66. package/docs/v7/overview/what-is-testdriver.mdx +398 -0
  67. package/docs/v7/platforms/linux.mdx +308 -0
  68. package/docs/v7/platforms/macos.mdx +433 -0
  69. package/docs/v7/platforms/windows.mdx +430 -0
  70. package/docs/v7/playwright.mdx +3 -3
  71. package/docs/v7/presets/chrome-extension.mdx +223 -0
  72. package/docs/v7/presets/chrome.mdx +303 -0
  73. package/docs/v7/presets/electron.mdx +453 -0
  74. package/docs/v7/presets/vscode.mdx +417 -0
  75. package/docs/v7/presets/webapp.mdx +396 -0
  76. package/examples/run-tests-with-recording.sh +2 -2
  77. package/interfaces/cli/commands/init.js +358 -0
  78. package/interfaces/vitest-plugin.mjs +393 -103
  79. package/lib/core/Dashcam.js +506 -0
  80. package/lib/core/index.d.ts +150 -0
  81. package/lib/core/index.js +12 -0
  82. package/lib/presets/index.mjs +331 -0
  83. package/lib/vitest/hooks.d.ts +119 -0
  84. package/lib/vitest/hooks.mjs +316 -0
  85. package/lib/vitest/setup.mjs +44 -0
  86. package/package.json +13 -3
  87. package/sdk.d.ts +350 -44
  88. package/sdk.js +818 -105
  89. package/{self-hosted.yml → setup/aws/self-hosted.yml} +1 -1
  90. package/test/manual/test-console-logs.test.mjs +42 -0
  91. package/test/manual/test-init.sh +54 -0
  92. package/test/manual/test-provision-auth.mjs +22 -0
  93. package/test/testdriver/assert.test.mjs +41 -0
  94. package/test/testdriver/auto-cache-key-demo.test.mjs +56 -0
  95. package/test/testdriver/chrome-extension.test.mjs +89 -0
  96. package/{testdriver/acceptance-sdk → test/testdriver}/drag-and-drop.test.mjs +7 -19
  97. package/{testdriver/acceptance-sdk → test/testdriver}/element-not-found.test.mjs +6 -19
  98. package/{testdriver/acceptance-sdk → test/testdriver}/exec-js.test.mjs +6 -18
  99. package/{testdriver/acceptance-sdk → test/testdriver}/exec-output.test.mjs +9 -21
  100. package/{testdriver/acceptance-sdk → test/testdriver}/exec-pwsh.test.mjs +14 -26
  101. package/{testdriver/acceptance-sdk → test/testdriver}/focus-window.test.mjs +8 -20
  102. package/{testdriver/acceptance-sdk → test/testdriver}/formatted-logging.test.mjs +5 -20
  103. package/{testdriver/acceptance-sdk → test/testdriver}/hover-image.test.mjs +10 -19
  104. package/{testdriver/acceptance-sdk → test/testdriver}/hover-text-with-description.test.mjs +7 -19
  105. package/{testdriver/acceptance-sdk → test/testdriver}/hover-text.test.mjs +5 -19
  106. package/{testdriver/acceptance-sdk → test/testdriver}/match-image.test.mjs +7 -19
  107. package/{testdriver/acceptance-sdk → test/testdriver}/press-keys.test.mjs +5 -19
  108. package/{testdriver/acceptance-sdk → test/testdriver}/prompt.test.mjs +7 -19
  109. package/{testdriver/acceptance-sdk → test/testdriver}/scroll-keyboard.test.mjs +6 -20
  110. package/{testdriver/acceptance-sdk → test/testdriver}/scroll-until-image.test.mjs +6 -18
  111. package/test/testdriver/scroll-until-text.test.mjs +28 -0
  112. package/{testdriver/acceptance-sdk → test/testdriver}/scroll.test.mjs +12 -21
  113. package/test/testdriver/setup/lifecycleHelpers.mjs +262 -0
  114. package/{testdriver/acceptance-sdk → test/testdriver}/setup/testHelpers.mjs +25 -20
  115. package/test/testdriver/type.test.mjs +45 -0
  116. package/vitest.config.mjs +11 -56
  117. package/.github/dependabot.yml +0 -11
  118. package/.github/workflows/acceptance-linux.yml +0 -75
  119. package/.github/workflows/acceptance-sdk-tests.yml +0 -133
  120. package/.github/workflows/acceptance-tests.yml +0 -130
  121. package/.github/workflows/lint.yml +0 -27
  122. package/.github/workflows/publish-canary.yml +0 -40
  123. package/.github/workflows/publish-latest.yml +0 -61
  124. package/.github/workflows/test-install.yml +0 -29
  125. package/.vscode/extensions.json +0 -3
  126. package/.vscode/launch.json +0 -22
  127. package/.vscode/mcp.json +0 -9
  128. package/.vscode/settings.json +0 -14
  129. package/CODEOWNERS +0 -3
  130. package/MIGRATION.md +0 -389
  131. package/SDK_README.md +0 -1122
  132. package/_testdriver/acceptance/assert.yaml +0 -7
  133. package/_testdriver/acceptance/dashcam.yaml +0 -9
  134. package/_testdriver/acceptance/drag-and-drop.yaml +0 -49
  135. package/_testdriver/acceptance/embed.yaml +0 -9
  136. package/_testdriver/acceptance/exec-js.yaml +0 -29
  137. package/_testdriver/acceptance/exec-output.yaml +0 -43
  138. package/_testdriver/acceptance/exec-shell.yaml +0 -40
  139. package/_testdriver/acceptance/focus-window.yaml +0 -16
  140. package/_testdriver/acceptance/hover-image.yaml +0 -18
  141. package/_testdriver/acceptance/hover-text-with-description.yaml +0 -29
  142. package/_testdriver/acceptance/hover-text.yaml +0 -14
  143. package/_testdriver/acceptance/if-else.yaml +0 -31
  144. package/_testdriver/acceptance/match-image.yaml +0 -15
  145. package/_testdriver/acceptance/press-keys.yaml +0 -35
  146. package/_testdriver/acceptance/prompt.yaml +0 -11
  147. package/_testdriver/acceptance/remember.yaml +0 -27
  148. package/_testdriver/acceptance/screenshots/cart.png +0 -0
  149. package/_testdriver/acceptance/scroll-keyboard.yaml +0 -34
  150. package/_testdriver/acceptance/scroll-until-image.yaml +0 -26
  151. package/_testdriver/acceptance/scroll-until-text.yaml +0 -20
  152. package/_testdriver/acceptance/scroll.yaml +0 -33
  153. package/_testdriver/acceptance/snippets/login.yaml +0 -29
  154. package/_testdriver/acceptance/snippets/match-cart.yaml +0 -8
  155. package/_testdriver/acceptance/type.yaml +0 -29
  156. package/_testdriver/behavior/failure.yaml +0 -7
  157. package/_testdriver/behavior/hover-text.yaml +0 -13
  158. package/_testdriver/behavior/lifecycle/postrun.yaml +0 -10
  159. package/_testdriver/behavior/lifecycle/prerun.yaml +0 -8
  160. package/_testdriver/behavior/lifecycle/provision.yaml +0 -8
  161. package/_testdriver/behavior/secrets.yaml +0 -7
  162. package/_testdriver/edge-cases/dashcam-chrome.yaml +0 -8
  163. package/_testdriver/edge-cases/exec-pwsh-multiline.yaml +0 -10
  164. package/_testdriver/edge-cases/js-exception.yaml +0 -8
  165. package/_testdriver/edge-cases/js-promise.yaml +0 -19
  166. package/_testdriver/edge-cases/lifecycle/postrun.yaml +0 -10
  167. package/_testdriver/edge-cases/prompt-in-middle.yaml +0 -23
  168. package/_testdriver/edge-cases/prompt-nested.yaml +0 -7
  169. package/_testdriver/edge-cases/success-test.yaml +0 -9
  170. package/_testdriver/examples/android/example.yaml +0 -12
  171. package/_testdriver/examples/android/lifecycle/postrun.yaml +0 -11
  172. package/_testdriver/examples/android/lifecycle/provision.yaml +0 -47
  173. package/_testdriver/examples/android/readme.md +0 -7
  174. package/_testdriver/examples/chrome-extension/lifecycle/provision.yaml +0 -74
  175. package/_testdriver/examples/desktop/lifecycle/prerun.yaml +0 -0
  176. package/_testdriver/examples/desktop/lifecycle/provision.yaml +0 -64
  177. package/_testdriver/examples/vscode-extension/lifecycle/provision.yaml +0 -73
  178. package/_testdriver/examples/web/lifecycle/postrun.yaml +0 -7
  179. package/_testdriver/examples/web/lifecycle/prerun.yaml +0 -22
  180. package/_testdriver/lifecycle/postrun.yaml +0 -8
  181. package/_testdriver/lifecycle/prerun.yaml +0 -15
  182. package/_testdriver/lifecycle/provision.yaml +0 -25
  183. package/debug-screenshot-1763401388589.png +0 -0
  184. package/mcp-server/AI_GUIDELINES.md +0 -57
  185. package/scripts/view-test-results.mjs +0 -96
  186. package/styles/.vale-config/2-MDX.ini +0 -5
  187. package/styles/Microsoft/AMPM.yml +0 -9
  188. package/styles/Microsoft/Accessibility.yml +0 -30
  189. package/styles/Microsoft/Acronyms.yml +0 -64
  190. package/styles/Microsoft/Adverbs.yml +0 -272
  191. package/styles/Microsoft/Auto.yml +0 -11
  192. package/styles/Microsoft/Avoid.yml +0 -14
  193. package/styles/Microsoft/Contractions.yml +0 -50
  194. package/styles/Microsoft/Dashes.yml +0 -13
  195. package/styles/Microsoft/DateFormat.yml +0 -8
  196. package/styles/Microsoft/DateNumbers.yml +0 -40
  197. package/styles/Microsoft/DateOrder.yml +0 -8
  198. package/styles/Microsoft/Ellipses.yml +0 -9
  199. package/styles/Microsoft/FirstPerson.yml +0 -16
  200. package/styles/Microsoft/Foreign.yml +0 -13
  201. package/styles/Microsoft/Gender.yml +0 -8
  202. package/styles/Microsoft/GenderBias.yml +0 -42
  203. package/styles/Microsoft/GeneralURL.yml +0 -11
  204. package/styles/Microsoft/HeadingAcronyms.yml +0 -7
  205. package/styles/Microsoft/HeadingColons.yml +0 -8
  206. package/styles/Microsoft/HeadingPunctuation.yml +0 -13
  207. package/styles/Microsoft/Headings.yml +0 -28
  208. package/styles/Microsoft/Hyphens.yml +0 -14
  209. package/styles/Microsoft/Negative.yml +0 -13
  210. package/styles/Microsoft/Ordinal.yml +0 -13
  211. package/styles/Microsoft/OxfordComma.yml +0 -8
  212. package/styles/Microsoft/Passive.yml +0 -183
  213. package/styles/Microsoft/Percentages.yml +0 -7
  214. package/styles/Microsoft/Plurals.yml +0 -7
  215. package/styles/Microsoft/Quotes.yml +0 -7
  216. package/styles/Microsoft/RangeTime.yml +0 -13
  217. package/styles/Microsoft/Semicolon.yml +0 -8
  218. package/styles/Microsoft/SentenceLength.yml +0 -6
  219. package/styles/Microsoft/Spacing.yml +0 -8
  220. package/styles/Microsoft/Suspended.yml +0 -7
  221. package/styles/Microsoft/Terms.yml +0 -42
  222. package/styles/Microsoft/URLFormat.yml +0 -9
  223. package/styles/Microsoft/Units.yml +0 -16
  224. package/styles/Microsoft/Vocab.yml +0 -25
  225. package/styles/Microsoft/We.yml +0 -11
  226. package/styles/Microsoft/Wordiness.yml +0 -127
  227. package/styles/Microsoft/meta.json +0 -4
  228. package/styles/alex/Ablist.yml +0 -274
  229. package/styles/alex/Condescending.yml +0 -16
  230. package/styles/alex/Gendered.yml +0 -110
  231. package/styles/alex/LGBTQ.yml +0 -55
  232. package/styles/alex/OCD.yml +0 -10
  233. package/styles/alex/Press.yml +0 -12
  234. package/styles/alex/ProfanityLikely.yml +0 -1289
  235. package/styles/alex/ProfanityMaybe.yml +0 -282
  236. package/styles/alex/ProfanityUnlikely.yml +0 -251
  237. package/styles/alex/README.md +0 -27
  238. package/styles/alex/Race.yml +0 -85
  239. package/styles/alex/Suicide.yml +0 -26
  240. package/styles/alex/meta.json +0 -4
  241. package/styles/config/vocabularies/Docs/accept.txt +0 -47
  242. package/styles/config/vocabularies/Docs/reject.txt +0 -4
  243. package/styles/proselint/Airlinese.yml +0 -8
  244. package/styles/proselint/AnimalLabels.yml +0 -48
  245. package/styles/proselint/Annotations.yml +0 -9
  246. package/styles/proselint/Apologizing.yml +0 -8
  247. package/styles/proselint/Archaisms.yml +0 -52
  248. package/styles/proselint/But.yml +0 -8
  249. package/styles/proselint/Cliches.yml +0 -782
  250. package/styles/proselint/CorporateSpeak.yml +0 -30
  251. package/styles/proselint/Currency.yml +0 -5
  252. package/styles/proselint/Cursing.yml +0 -15
  253. package/styles/proselint/DateCase.yml +0 -7
  254. package/styles/proselint/DateMidnight.yml +0 -7
  255. package/styles/proselint/DateRedundancy.yml +0 -10
  256. package/styles/proselint/DateSpacing.yml +0 -7
  257. package/styles/proselint/DenizenLabels.yml +0 -52
  258. package/styles/proselint/Diacritical.yml +0 -95
  259. package/styles/proselint/GenderBias.yml +0 -45
  260. package/styles/proselint/GroupTerms.yml +0 -39
  261. package/styles/proselint/Hedging.yml +0 -8
  262. package/styles/proselint/Hyperbole.yml +0 -6
  263. package/styles/proselint/Jargon.yml +0 -11
  264. package/styles/proselint/LGBTOffensive.yml +0 -13
  265. package/styles/proselint/LGBTTerms.yml +0 -15
  266. package/styles/proselint/Malapropisms.yml +0 -8
  267. package/styles/proselint/Needless.yml +0 -358
  268. package/styles/proselint/Nonwords.yml +0 -38
  269. package/styles/proselint/Oxymorons.yml +0 -22
  270. package/styles/proselint/P-Value.yml +0 -6
  271. package/styles/proselint/RASSyndrome.yml +0 -30
  272. package/styles/proselint/README.md +0 -12
  273. package/styles/proselint/Skunked.yml +0 -13
  274. package/styles/proselint/Spelling.yml +0 -17
  275. package/styles/proselint/Typography.yml +0 -11
  276. package/styles/proselint/Uncomparables.yml +0 -50
  277. package/styles/proselint/Very.yml +0 -6
  278. package/styles/proselint/meta.json +0 -15
  279. package/styles/write-good/Cliches.yml +0 -702
  280. package/styles/write-good/E-Prime.yml +0 -32
  281. package/styles/write-good/Illusions.yml +0 -11
  282. package/styles/write-good/Passive.yml +0 -183
  283. package/styles/write-good/README.md +0 -27
  284. package/styles/write-good/So.yml +0 -5
  285. package/styles/write-good/ThereIs.yml +0 -6
  286. package/styles/write-good/TooWordy.yml +0 -221
  287. package/styles/write-good/Weasel.yml +0 -29
  288. package/styles/write-good/meta.json +0 -4
  289. package/test/mcp-example-test.yaml +0 -27
  290. package/test/test_parser.js +0 -47
  291. package/testdriver/acceptance-sdk/QUICK_REFERENCE.md +0 -61
  292. package/testdriver/acceptance-sdk/README.md +0 -128
  293. package/testdriver/acceptance-sdk/TEST_REPORTING.md +0 -245
  294. package/testdriver/acceptance-sdk/assert.test.mjs +0 -44
  295. package/testdriver/acceptance-sdk/scroll-until-text.test.mjs +0 -42
  296. package/testdriver/acceptance-sdk/setup/lifecycleHelpers.mjs +0 -239
  297. package/testdriver/acceptance-sdk/type-checking-demo.js +0 -49
  298. package/testdriver/acceptance-sdk/type.test.mjs +0 -84
  299. package/vale.ini +0 -18
  300. package/vitest.config.example.js +0 -19
  301. package/vitest.config.mjs.bak +0 -44
  302. /package/docs/{ARCHITECTURE.md → v7/_drafts/architecture.mdx} +0 -0
  303. /package/docs/{AWESOME_LOGS_QUICK_REF.md → v7/_drafts/awesome-logs-quick-ref.mdx} +0 -0
  304. /package/{CONTRIBUTING.md → docs/v7/_drafts/contributing.mdx} +0 -0
  305. /package/docs/v7/{guides → _drafts}/migration.mdx +0 -0
  306. /package/{PLUGIN_MIGRATION.md → docs/v7/_drafts/plugin-migration.mdx} +0 -0
  307. /package/{PROMPT_CACHE.md → docs/v7/_drafts/prompt-cache.mdx} +0 -0
  308. /package/docs/{SDK_AWESOME_LOGS.md → v7/_drafts/sdk-awesome-logs.mdx} +0 -0
  309. /package/docs/{sdk-browser-rendering.md → v7/_drafts/sdk-browser-rendering.mdx} +0 -0
  310. /package/{SDK_LOGGING.md → docs/v7/_drafts/sdk-logging.mdx} +0 -0
  311. /package/{SDK_MIGRATION.md → docs/v7/_drafts/sdk-migration.mdx} +0 -0
  312. /package/docs/{TEST_RECORDING.md → v7/_drafts/test-recording.mdx} +0 -0
  313. /package/docs/v7/{README.md → overview/readme.mdx} +0 -0
  314. /package/{debug-locate-response.js → test/manual/debug-locate-response.js} +0 -0
  315. /package/{test-find-api.js → test/manual/test-find-api.js} +0 -0
  316. /package/{test-prompt-cache.js → test/manual/test-prompt-cache.js} +0 -0
  317. /package/{test-sandbox-render.js → test/manual/test-sandbox-render.js} +0 -0
  318. /package/{test-sdk-methods.js → test/manual/test-sdk-methods.js} +0 -0
  319. /package/{test-sdk-refactor.js → test/manual/test-sdk-refactor.js} +0 -0
  320. /package/{test-stack-trace.mjs → test/manual/test-stack-trace.mjs} +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}/setup/globalTeardown.mjs +0 -0
  324. /package/{testdriver/acceptance-sdk → test/testdriver}/setup/vitestSetup.mjs +0 -0
@@ -0,0 +1,486 @@
1
+ ---
2
+ title: "Installation"
3
+ description: "Install TestDriver and set up your first test in 2 minutes"
4
+ icon: "download"
5
+ ---
6
+
7
+ Get started with TestDriver in just a few steps. This guide will have you running your first AI-powered test in under 2 minutes.
8
+
9
+ <Note>
10
+ **Fastest Way to Get Started:** Use `testdriverai init` to scaffold a complete project automatically:
11
+
12
+ ```bash
13
+ npm install -g testdriverai
14
+ testdriverai init
15
+ ```
16
+
17
+ This creates everything you need: package.json, test files, Vitest config, GitHub Actions workflow, and prompts for your API key. Then just run `npm test`!
18
+
19
+ For manual setup, continue with the steps below.
20
+ </Note>
21
+
22
+ ## Prerequisites
23
+
24
+ <CardGroup cols={2}>
25
+ <Card title="Node.js" icon="node-js">
26
+ Node.js 18 or higher
27
+
28
+ ```bash
29
+ node --version
30
+ # v18.0.0 or higher
31
+ ```
32
+ </Card>
33
+
34
+ <Card title="Package Manager" icon="box">
35
+ npm, yarn, or pnpm
36
+
37
+ ```bash
38
+ npm --version
39
+ # or
40
+ yarn --version
41
+ # or
42
+ pnpm --version
43
+ ```
44
+ </Card>
45
+ </CardGroup>
46
+
47
+ ## Step 1: Install TestDriver
48
+
49
+ Install TestDriver and Vitest test runner:
50
+
51
+ <CodeGroup>
52
+ ```bash npm
53
+ npm install --save-dev testdriverai vitest
54
+ ```
55
+
56
+ ```bash yarn
57
+ yarn add --dev testdriverai vitest
58
+ ```
59
+
60
+ ```bash pnpm
61
+ pnpm add -D testdriverai vitest
62
+ ```
63
+ </CodeGroup>
64
+
65
+ <Tip>
66
+ TestDriver works with any test framework (Vitest, Jest, Mocha), but we recommend Vitest for the best experience.
67
+ </Tip>
68
+
69
+ ## Step 2: Get Your API Key
70
+
71
+ <Steps>
72
+ <Step title="Sign up">
73
+ Visit [console.testdriver.ai](https://console.testdriver.ai) and create a free account.
74
+ </Step>
75
+
76
+ <Step title="Generate API Key">
77
+ Navigate to Settings → API Keys and generate a new key.
78
+
79
+ The key will look like: `tdai-1234567890abcdef1234567890abcdef`
80
+ </Step>
81
+
82
+ <Step title="Save API Key">
83
+ Create a `.env` file in your project root:
84
+
85
+ ```bash .env
86
+ TD_API_KEY=tdai-your-api-key-here
87
+ ```
88
+
89
+ <Warning>
90
+ Add `.env` to your `.gitignore` to avoid committing secrets!
91
+ </Warning>
92
+ </Step>
93
+ </Steps>
94
+
95
+ ## Step 3: Create Your First Test
96
+
97
+ Create a test file `test.test.js`:
98
+
99
+ ```javascript test.test.js
100
+ import { test } from 'vitest';
101
+ import { chrome } from 'testdriverai/presets';
102
+
103
+ test('my first test', async (context) => {
104
+ const { testdriver } = await chrome(context, {
105
+ url: 'https://example.com'
106
+ // apiKey automatically read from process.env.TD_API_KEY
107
+ });
108
+
109
+ await testdriver.find('More information link').click();
110
+ await testdriver.assert('IANA page is visible');
111
+ });
112
+ ```
113
+
114
+ <Check>
115
+ That's it! TestDriver automatically handles authentication, browser launch, navigation, video recording, and cleanup.
116
+ </Check>
117
+
118
+ ## Step 4: Run Your Test
119
+
120
+ Run your test with Vitest:
121
+
122
+ ```bash
123
+ npx vitest run
124
+ ```
125
+
126
+ You should see output like:
127
+
128
+ ```
129
+ ✓ test.test.js (1)
130
+ ✓ my first test (12.3s)
131
+
132
+ Test Files 1 passed (1)
133
+ Tests 1 passed (1)
134
+ Duration 12.45s
135
+
136
+ 📹 Replay: https://console.testdriver.ai/dashcam/abc123
137
+ ```
138
+
139
+ <Tip>
140
+ Click the Dashcam replay URL to watch a video of your test execution!
141
+ </Tip>
142
+
143
+ ## Optional: Configure Vitest
144
+
145
+ For a better experience, create a `vitest.config.mjs`:
146
+
147
+ ```javascript vitest.config.mjs
148
+ import { defineConfig } from 'vitest/config';
149
+
150
+ export default defineConfig({
151
+ test: {
152
+ testTimeout: 120000, // 2 minutes per test (TestDriver tests can take longer)
153
+ hookTimeout: 120000, // 2 minutes for setup/teardown
154
+ },
155
+ });
156
+ ```
157
+
158
+ ## Installation Options
159
+
160
+ ### TypeScript Setup
161
+
162
+ TestDriver includes TypeScript definitions out of the box:
163
+
164
+ ```typescript test.test.ts
165
+ import { test } from 'vitest';
166
+ import { chrome } from 'testdriverai/presets';
167
+
168
+ test('typed test', async (context) => {
169
+ const { testdriver } = await chrome(context, {
170
+ url: 'https://example.com'
171
+ });
172
+
173
+ const element = await testdriver.find('button');
174
+ // element has full type information
175
+ console.log(element.coordinates.x);
176
+ });
177
+ ```
178
+
179
+ No additional setup needed!
180
+
181
+ ### Global Installation (Optional)
182
+
183
+ Install TestDriver CLI globally for project scaffolding and sandbox management:
184
+
185
+ ```bash
186
+ npm install -g testdriverai
187
+ ```
188
+
189
+ This gives you access to commands like:
190
+
191
+ ```bash
192
+ # Initialize a new project (recommended!)
193
+ testdriverai init
194
+
195
+ # Spawn a sandbox
196
+ testdriverai sandbox spawn
197
+
198
+ # List active sandboxes
199
+ testdriverai sandbox list
200
+
201
+ # Stop a sandbox
202
+ testdriverai sandbox stop i-abc123
203
+ ```
204
+
205
+ <Tip>
206
+ The `testdriverai init` command is the fastest way to start a new project. It creates:
207
+ - package.json with test scripts
208
+ - Vitest configuration with TestDriver plugin
209
+ - Example test file using the chrome preset
210
+ - GitHub Actions workflow for CI/CD
211
+ - .gitignore to protect secrets
212
+ - Installs all dependencies
213
+ - Prompts for your API key and saves to .env
214
+ </Tip>
215
+
216
+ [Learn more about sandbox management](/agents.md#sandbox-management)
217
+
218
+ ### Monorepo Setup
219
+
220
+ For monorepos, install TestDriver in the root and reference it from test packages:
221
+
222
+ ```json package.json (root)
223
+ {
224
+ "workspaces": ["packages/*"],
225
+ "devDependencies": {
226
+ "testdriverai": "^7.0.0",
227
+ "vitest": "^1.0.0"
228
+ }
229
+ }
230
+ ```
231
+
232
+ ```json packages/app/package.json
233
+ {
234
+ "scripts": {
235
+ "test": "vitest run"
236
+ }
237
+ }
238
+ ```
239
+
240
+ ## Alternative Test Frameworks
241
+
242
+ While we recommend Vitest, TestDriver works with any test framework:
243
+
244
+ <Tabs>
245
+ <Tab title="Vitest (Recommended)">
246
+ ```javascript
247
+ import { test } from 'vitest';
248
+ import { chrome } from 'testdriverai/presets';
249
+
250
+ test('my test', async (context) => {
251
+ const { testdriver } = await chrome(context, { url });
252
+ // Test code
253
+ });
254
+ ```
255
+ </Tab>
256
+
257
+ <Tab title="Jest">
258
+ ```javascript
259
+ import { chrome } from 'testdriverai/presets';
260
+
261
+ test('my test', async () => {
262
+ const { testdriver } = await chrome({ url });
263
+ // Test code
264
+ });
265
+ ```
266
+ </Tab>
267
+
268
+ <Tab title="Mocha">
269
+ ```javascript
270
+ import { chrome } from 'testdriverai/presets';
271
+
272
+ describe('My Suite', () => {
273
+ it('should work', async function() {
274
+ const { testdriver } = await chrome(this, { url });
275
+ // Test code
276
+ });
277
+ });
278
+ ```
279
+ </Tab>
280
+
281
+ <Tab title="Node (No Framework)">
282
+ ```javascript
283
+ import { TestDriver } from 'testdriverai';
284
+
285
+ async function runTest() {
286
+ const testdriver = new TestDriver({
287
+ apiKey: process.env.TD_API_KEY
288
+ });
289
+
290
+ await testdriver.connect();
291
+ // Test code
292
+ await testdriver.disconnect();
293
+ }
294
+
295
+ runTest();
296
+ ```
297
+ </Tab>
298
+ </Tabs>
299
+
300
+ ## Verify Installation
301
+
302
+ Run this quick verification to ensure everything is set up correctly:
303
+
304
+ ```javascript verify.test.js
305
+ import { test } from 'vitest';
306
+ import { chrome } from 'testdriverai/presets';
307
+
308
+ test('verify installation', async (context) => {
309
+ console.log('✓ TestDriver SDK imported');
310
+
311
+ const { testdriver, dashcam } = await chrome(context, {
312
+ url: 'https://example.com'
313
+ });
314
+ console.log('✓ Connected to TestDriver sandbox');
315
+ console.log('✓ Chrome browser launched');
316
+
317
+ const element = await testdriver.find('More information link');
318
+ console.log('✓ AI vision working');
319
+ console.log('✓ Element found:', element.text);
320
+
321
+ await element.click();
322
+ console.log('✓ Click action successful');
323
+
324
+ await testdriver.assert('IANA page is visible');
325
+ console.log('✓ AI assertion passed');
326
+
327
+ console.log('✓ Dashcam recording:', dashcam.url);
328
+ console.log('\n✅ Installation verified successfully!');
329
+ });
330
+ ```
331
+
332
+ Run it:
333
+
334
+ ```bash
335
+ npx vitest run verify.test.js
336
+ ```
337
+
338
+ ## Troubleshooting
339
+
340
+ <AccordionGroup>
341
+ <Accordion title="API Key Not Found">
342
+ **Error:** `TestDriver API key not found`
343
+
344
+ **Solutions:**
345
+ 1. Check `.env` file exists in project root
346
+ 2. Verify key format: `TD_API_KEY=tdai-...`
347
+ 3. Restart your terminal/IDE to reload environment
348
+ 4. Or pass API key directly:
349
+
350
+ ```javascript
351
+ const { testdriver } = await chrome(context, {
352
+ url: 'https://example.com',
353
+ apiKey: 'tdai-your-key-here'
354
+ });
355
+ ```
356
+ </Accordion>
357
+
358
+ <Accordion title="Module Not Found">
359
+ **Error:** `Cannot find module 'testdriverai'`
360
+
361
+ **Solutions:**
362
+ 1. Ensure you're in the correct directory
363
+ 2. Run `npm install` again
364
+ 3. Check `package.json` includes testdriverai
365
+ 4. Delete `node_modules` and reinstall:
366
+
367
+ ```bash
368
+ rm -rf node_modules package-lock.json
369
+ npm install
370
+ ```
371
+ </Accordion>
372
+
373
+ <Accordion title="Test Timeout">
374
+ **Error:** `Test timed out after 5000ms`
375
+
376
+ **Solution:** Increase timeout in vitest config:
377
+
378
+ ```javascript vitest.config.mjs
379
+ export default defineConfig({
380
+ test: {
381
+ testTimeout: 120000, // 2 minutes
382
+ },
383
+ });
384
+ ```
385
+
386
+ TestDriver tests can take longer than unit tests due to AI analysis and browser automation.
387
+ </Accordion>
388
+
389
+ <Accordion title="TypeScript Errors">
390
+ **Error:** `Cannot find type definitions`
391
+
392
+ **Solution:** TestDriver includes types by default, but ensure your `tsconfig.json` is correct:
393
+
394
+ ```json tsconfig.json
395
+ {
396
+ "compilerOptions": {
397
+ "module": "ESNext",
398
+ "moduleResolution": "node",
399
+ "esModuleInterop": true
400
+ }
401
+ }
402
+ ```
403
+ </Accordion>
404
+
405
+ <Accordion title="Network/Firewall Issues">
406
+ **Error:** `Failed to connect to TestDriver API`
407
+
408
+ **Solution:**
409
+ 1. Check your internet connection
410
+ 2. Verify firewall allows outbound HTTPS
411
+ 3. If behind corporate proxy, configure:
412
+
413
+ ```bash .env
414
+ HTTP_PROXY=http://proxy.company.com:8080
415
+ HTTPS_PROXY=http://proxy.company.com:8080
416
+ ```
417
+
418
+ For on-premise deployment, see [self-hosting guide](/v7/guides/self-hosting).
419
+ </Accordion>
420
+ </AccordionGroup>
421
+
422
+ ## Next Steps
423
+
424
+ Now that you have TestDriver installed:
425
+
426
+ <CardGroup cols={2}>
427
+ <Card
428
+ title="Write Your First Test"
429
+ icon="pencil"
430
+ href="/v7/getting-started/writing-tests"
431
+ >
432
+ Learn how to write effective TestDriver tests
433
+ </Card>
434
+
435
+ <Card
436
+ title="Generate Tests with AI"
437
+ icon="wand-magic-sparkles"
438
+ href="/v7/getting-started/generating-tests"
439
+ >
440
+ Use Claude to generate tests automatically
441
+ </Card>
442
+
443
+ <Card
444
+ title="View Examples"
445
+ icon="code"
446
+ href="/v7/presets/chrome"
447
+ >
448
+ See TestDriver in action with examples
449
+ </Card>
450
+
451
+ <Card
452
+ title="API Reference"
453
+ icon="book"
454
+ href="/v7/api/client"
455
+ >
456
+ Explore all available methods
457
+ </Card>
458
+ </CardGroup>
459
+
460
+ ## Getting Help
461
+
462
+ <CardGroup cols={3}>
463
+ <Card
464
+ title="Discord"
465
+ icon="discord"
466
+ href="https://discord.com/invite/cWDFW8DzPm"
467
+ >
468
+ Join our community
469
+ </Card>
470
+
471
+ <Card
472
+ title="GitHub"
473
+ icon="github"
474
+ href="https://github.com/testdriverai"
475
+ >
476
+ Report issues
477
+ </Card>
478
+
479
+ <Card
480
+ title="Documentation"
481
+ icon="book"
482
+ href="/v7/guides/troubleshooting"
483
+ >
484
+ Troubleshooting guide
485
+ </Card>
486
+ </CardGroup>