testdriverai 6.2.2 → 7.1.0

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 (300) hide show
  1. package/.github/workflows/acceptance-linux.yml +75 -0
  2. package/.github/workflows/acceptance-sdk-tests.yml +133 -0
  3. package/.vscode/settings.json +5 -1
  4. package/AGENTS.md +550 -0
  5. package/CODEOWNERS +0 -1
  6. package/README.md +126 -0
  7. package/{testdriver → _testdriver}/acceptance/drag-and-drop.yaml +2 -2
  8. package/{testdriver → _testdriver}/acceptance/snippets/login.yaml +1 -1
  9. package/_testdriver/examples/desktop/lifecycle/prerun.yaml +0 -0
  10. package/{testdriver → _testdriver}/examples/web/lifecycle/prerun.yaml +6 -1
  11. package/{testdriver → _testdriver}/lifecycle/postrun.yaml +3 -2
  12. package/_testdriver/lifecycle/prerun.yaml +15 -0
  13. package/{testdriver → _testdriver}/lifecycle/provision.yaml +7 -2
  14. package/agent/index.js +300 -85
  15. package/agent/interface.js +15 -0
  16. package/agent/lib/cache.js +142 -0
  17. package/agent/lib/commander.js +1 -39
  18. package/agent/lib/commands.js +910 -296
  19. package/agent/lib/redraw.js +129 -41
  20. package/agent/lib/sandbox.js +29 -6
  21. package/agent/lib/sdk.js +22 -0
  22. package/agent/lib/system.js +0 -3
  23. package/agent/lib/validation.js +1 -7
  24. package/debug-locate-response.js +82 -0
  25. package/debugger/index.html +15 -4
  26. package/docs/ARCHITECTURE.md +424 -0
  27. package/docs/AWESOME_LOGS_QUICK_REF.md +100 -0
  28. package/docs/MIGRATION.md +425 -0
  29. package/docs/PRESETS.md +210 -0
  30. package/docs/QUICK_START_TEST_RECORDING.md +215 -0
  31. package/docs/SDK_AWESOME_LOGS.md +468 -0
  32. package/docs/TEST_RECORDING.md +388 -0
  33. package/docs/docs.json +286 -152
  34. package/docs/guide/best-practices-polling.mdx +154 -0
  35. package/docs/sdk-browser-rendering.md +167 -0
  36. package/docs/v6/getting-started/self-hosting.mdx +407 -0
  37. package/docs/{guide → v6/guide}/dashcam.mdx +1 -1
  38. package/docs/{guide → v6/guide}/environment-variables.mdx +4 -5
  39. package/docs/{guide → v6/guide}/lifecycle.mdx +1 -1
  40. package/docs/v6/overview/comparison.mdx +101 -0
  41. package/docs/v7/README.md +135 -0
  42. package/docs/v7/api/ai.mdx +205 -0
  43. package/docs/v7/api/assert.mdx +285 -0
  44. package/docs/v7/api/assertions.mdx +403 -0
  45. package/docs/v7/api/click.mdx +287 -0
  46. package/docs/v7/api/client.mdx +322 -0
  47. package/docs/v7/api/dashcam.mdx +497 -0
  48. package/docs/v7/api/doubleClick.mdx +102 -0
  49. package/docs/v7/api/elements.mdx +479 -0
  50. package/docs/v7/api/exec.mdx +346 -0
  51. package/docs/v7/api/find.mdx +316 -0
  52. package/docs/v7/api/focusApplication.mdx +294 -0
  53. package/docs/v7/api/hover.mdx +279 -0
  54. package/docs/v7/api/mouseDown.mdx +161 -0
  55. package/docs/v7/api/mouseUp.mdx +164 -0
  56. package/docs/v7/api/pressKeys.mdx +349 -0
  57. package/docs/v7/api/rightClick.mdx +123 -0
  58. package/docs/v7/api/sandbox.mdx +404 -0
  59. package/docs/v7/api/scroll.mdx +300 -0
  60. package/docs/v7/api/type.mdx +314 -0
  61. package/docs/v7/commands/assert.mdx +45 -0
  62. package/docs/v7/commands/exec.mdx +282 -0
  63. package/docs/v7/commands/focus-application.mdx +44 -0
  64. package/docs/v7/commands/hover-image.mdx +69 -0
  65. package/docs/v7/commands/hover-text.mdx +47 -0
  66. package/docs/v7/commands/if.mdx +53 -0
  67. package/docs/v7/commands/match-image.mdx +67 -0
  68. package/docs/v7/commands/press-keys.mdx +87 -0
  69. package/docs/v7/commands/remember.mdx +49 -0
  70. package/docs/v7/commands/run.mdx +44 -0
  71. package/docs/v7/commands/scroll-until-image.mdx +66 -0
  72. package/docs/v7/commands/scroll-until-text.mdx +60 -0
  73. package/docs/v7/commands/scroll.mdx +69 -0
  74. package/docs/v7/commands/type.mdx +45 -0
  75. package/docs/v7/commands/wait-for-image.mdx +54 -0
  76. package/docs/v7/commands/wait-for-text.mdx +48 -0
  77. package/docs/v7/commands/wait.mdx +45 -0
  78. package/docs/v7/getting-started/configuration.mdx +380 -0
  79. package/docs/v7/getting-started/quickstart.mdx +332 -0
  80. package/docs/v7/guides/best-practices.mdx +486 -0
  81. package/docs/v7/guides/caching-ai.mdx +215 -0
  82. package/docs/v7/guides/caching-selectors.mdx +292 -0
  83. package/docs/v7/guides/caching.mdx +366 -0
  84. package/docs/v7/guides/ci-cd/azure.mdx +587 -0
  85. package/docs/v7/guides/ci-cd/circleci.mdx +523 -0
  86. package/docs/v7/guides/ci-cd/github-actions.mdx +457 -0
  87. package/docs/v7/guides/ci-cd/gitlab.mdx +498 -0
  88. package/docs/v7/guides/ci-cd/jenkins.mdx +664 -0
  89. package/docs/v7/guides/ci-cd/travis.mdx +438 -0
  90. package/docs/v7/guides/debugging.mdx +349 -0
  91. package/docs/v7/guides/faq.mdx +393 -0
  92. package/docs/v7/guides/migration.mdx +562 -0
  93. package/docs/v7/guides/performance.mdx +517 -0
  94. package/docs/{getting-started → v7/guides}/self-hosting.mdx +11 -12
  95. package/docs/v7/guides/troubleshooting.mdx +526 -0
  96. package/docs/v7/guides/vitest-plugin.mdx +477 -0
  97. package/docs/v7/guides/vitest.mdx +535 -0
  98. package/docs/v7/platforms/linux.mdx +308 -0
  99. package/docs/v7/platforms/macos.mdx +433 -0
  100. package/docs/v7/platforms/windows.mdx +430 -0
  101. package/docs/v7/playwright.mdx +342 -0
  102. package/docs/v7/presets/chrome-extension.mdx +223 -0
  103. package/docs/v7/presets/chrome.mdx +287 -0
  104. package/docs/v7/presets/electron.mdx +435 -0
  105. package/docs/v7/presets/vscode.mdx +398 -0
  106. package/docs/v7/presets/webapp.mdx +396 -0
  107. package/docs/v7/progressive-apis/CORE.md +459 -0
  108. package/docs/v7/progressive-apis/HOOKS.md +360 -0
  109. package/docs/v7/progressive-apis/PROGRESSIVE_DISCLOSURE.md +230 -0
  110. package/docs/v7/progressive-apis/PROVISION.md +266 -0
  111. package/eslint.config.js +19 -1
  112. package/interfaces/cli/lib/base.js +10 -4
  113. package/interfaces/logger.js +2 -1
  114. package/interfaces/shared-test-state.mjs +69 -0
  115. package/interfaces/vitest-plugin.mjs +830 -0
  116. package/package.json +29 -5
  117. package/schema.json +8 -29
  118. package/scripts/view-test-results.mjs +96 -0
  119. package/sdk-log-formatter.js +714 -0
  120. package/sdk.d.ts +1028 -0
  121. package/sdk.js +2567 -0
  122. package/{.github/workflows/self-hosted.yml → self-hosted.yml} +13 -4
  123. package/setup/aws/cloudformation.yaml +9 -2
  124. package/src/core/Dashcam.js +469 -0
  125. package/src/core/index.d.ts +150 -0
  126. package/src/core/index.js +12 -0
  127. package/src/presets/index.mjs +331 -0
  128. package/src/vitest/extended.mjs +108 -0
  129. package/src/vitest/hooks.d.ts +119 -0
  130. package/src/vitest/hooks.mjs +298 -0
  131. package/src/vitest/index.mjs +64 -0
  132. package/src/vitest/lifecycle.mjs +277 -0
  133. package/src/vitest/utils.mjs +150 -0
  134. package/test/dashcam.test.js +137 -0
  135. package/test/mcp-example-test.yaml +27 -0
  136. package/testdriver/acceptance-sdk/QUICK_REFERENCE.md +61 -0
  137. package/testdriver/acceptance-sdk/README.md +128 -0
  138. package/testdriver/acceptance-sdk/TEST_REPORTING.md +245 -0
  139. package/testdriver/acceptance-sdk/assert.test.mjs +26 -0
  140. package/testdriver/acceptance-sdk/auto-cache-key-demo.test.mjs +56 -0
  141. package/testdriver/acceptance-sdk/chrome-extension.test.mjs +89 -0
  142. package/testdriver/acceptance-sdk/drag-and-drop.test.mjs +58 -0
  143. package/testdriver/acceptance-sdk/element-not-found.test.mjs +25 -0
  144. package/testdriver/acceptance-sdk/exec-js.test.mjs +43 -0
  145. package/testdriver/acceptance-sdk/exec-output.test.mjs +59 -0
  146. package/testdriver/acceptance-sdk/exec-pwsh.test.mjs +57 -0
  147. package/testdriver/acceptance-sdk/focus-window.test.mjs +36 -0
  148. package/testdriver/acceptance-sdk/formatted-logging.test.mjs +26 -0
  149. package/testdriver/acceptance-sdk/hooks-example.test.mjs +38 -0
  150. package/testdriver/acceptance-sdk/hover-image.test.mjs +34 -0
  151. package/testdriver/acceptance-sdk/hover-text-with-description.test.mjs +38 -0
  152. package/testdriver/acceptance-sdk/hover-text.test.mjs +27 -0
  153. package/testdriver/acceptance-sdk/match-image.test.mjs +36 -0
  154. package/testdriver/acceptance-sdk/presets-example.test.mjs +87 -0
  155. package/testdriver/acceptance-sdk/press-keys.test.mjs +50 -0
  156. package/testdriver/acceptance-sdk/prompt.test.mjs +33 -0
  157. package/testdriver/acceptance-sdk/scroll-keyboard.test.mjs +38 -0
  158. package/testdriver/acceptance-sdk/scroll-until-image.test.mjs +39 -0
  159. package/testdriver/acceptance-sdk/scroll-until-text.test.mjs +28 -0
  160. package/testdriver/acceptance-sdk/scroll.test.mjs +41 -0
  161. package/testdriver/acceptance-sdk/setup/globalTeardown.mjs +11 -0
  162. package/testdriver/acceptance-sdk/setup/testHelpers.mjs +420 -0
  163. package/testdriver/acceptance-sdk/setup/vitestSetup.mjs +40 -0
  164. package/testdriver/acceptance-sdk/sully-ai.test.mjs +234 -0
  165. package/testdriver/acceptance-sdk/test-console-logs.test.mjs +42 -0
  166. package/testdriver/acceptance-sdk/type-checking-demo.js +49 -0
  167. package/testdriver/acceptance-sdk/type.test.mjs +45 -0
  168. package/verify-element-api.js +89 -0
  169. package/verify-types.js +0 -0
  170. package/vitest.config.example.js +19 -0
  171. package/vitest.config.mjs +66 -0
  172. package/vitest.config.mjs.bak +44 -0
  173. package/.github/workflows/acceptance-v6.yml +0 -169
  174. package/.vscode/mcp.json +0 -9
  175. package/docs/overview/comparison.mdx +0 -82
  176. package/testdriver/lifecycle/prerun.yaml +0 -17
  177. /package/{testdriver/examples/desktop/lifecycle/prerun.yaml → .env.example} +0 -0
  178. /package/{testdriver → _testdriver}/acceptance/assert.yaml +0 -0
  179. /package/{testdriver → _testdriver}/acceptance/dashcam.yaml +0 -0
  180. /package/{testdriver → _testdriver}/acceptance/embed.yaml +0 -0
  181. /package/{testdriver → _testdriver}/acceptance/exec-js.yaml +0 -0
  182. /package/{testdriver → _testdriver}/acceptance/exec-output.yaml +0 -0
  183. /package/{testdriver → _testdriver}/acceptance/exec-shell.yaml +0 -0
  184. /package/{testdriver → _testdriver}/acceptance/focus-window.yaml +0 -0
  185. /package/{testdriver → _testdriver}/acceptance/hover-image.yaml +0 -0
  186. /package/{testdriver → _testdriver}/acceptance/hover-text-with-description.yaml +0 -0
  187. /package/{testdriver → _testdriver}/acceptance/hover-text.yaml +0 -0
  188. /package/{testdriver → _testdriver}/acceptance/if-else.yaml +0 -0
  189. /package/{testdriver → _testdriver}/acceptance/match-image.yaml +0 -0
  190. /package/{testdriver → _testdriver}/acceptance/press-keys.yaml +0 -0
  191. /package/{testdriver → _testdriver}/acceptance/prompt.yaml +0 -0
  192. /package/{testdriver → _testdriver}/acceptance/remember.yaml +0 -0
  193. /package/{testdriver → _testdriver}/acceptance/screenshots/cart.png +0 -0
  194. /package/{testdriver → _testdriver}/acceptance/scroll-keyboard.yaml +0 -0
  195. /package/{testdriver → _testdriver}/acceptance/scroll-until-image.yaml +0 -0
  196. /package/{testdriver → _testdriver}/acceptance/scroll-until-text.yaml +0 -0
  197. /package/{testdriver → _testdriver}/acceptance/scroll.yaml +0 -0
  198. /package/{testdriver → _testdriver}/acceptance/snippets/match-cart.yaml +0 -0
  199. /package/{testdriver → _testdriver}/acceptance/type.yaml +0 -0
  200. /package/{testdriver → _testdriver}/behavior/failure.yaml +0 -0
  201. /package/{testdriver → _testdriver}/behavior/hover-text.yaml +0 -0
  202. /package/{testdriver → _testdriver}/behavior/lifecycle/postrun.yaml +0 -0
  203. /package/{testdriver → _testdriver}/behavior/lifecycle/prerun.yaml +0 -0
  204. /package/{testdriver → _testdriver}/behavior/lifecycle/provision.yaml +0 -0
  205. /package/{testdriver → _testdriver}/behavior/secrets.yaml +0 -0
  206. /package/{testdriver → _testdriver}/edge-cases/dashcam-chrome.yaml +0 -0
  207. /package/{testdriver → _testdriver}/edge-cases/exec-pwsh-multiline.yaml +0 -0
  208. /package/{testdriver → _testdriver}/edge-cases/js-exception.yaml +0 -0
  209. /package/{testdriver → _testdriver}/edge-cases/js-promise.yaml +0 -0
  210. /package/{testdriver → _testdriver}/edge-cases/lifecycle/postrun.yaml +0 -0
  211. /package/{testdriver → _testdriver}/edge-cases/prompt-in-middle.yaml +0 -0
  212. /package/{testdriver → _testdriver}/edge-cases/prompt-nested.yaml +0 -0
  213. /package/{testdriver → _testdriver}/edge-cases/success-test.yaml +0 -0
  214. /package/{testdriver → _testdriver}/examples/android/example.yaml +0 -0
  215. /package/{testdriver → _testdriver}/examples/android/lifecycle/postrun.yaml +0 -0
  216. /package/{testdriver → _testdriver}/examples/android/lifecycle/provision.yaml +0 -0
  217. /package/{testdriver → _testdriver}/examples/android/readme.md +0 -0
  218. /package/{testdriver → _testdriver}/examples/chrome-extension/lifecycle/provision.yaml +0 -0
  219. /package/{testdriver → _testdriver}/examples/desktop/lifecycle/provision.yaml +0 -0
  220. /package/{testdriver → _testdriver}/examples/vscode-extension/lifecycle/provision.yaml +0 -0
  221. /package/{testdriver → _testdriver}/examples/web/lifecycle/postrun.yaml +0 -0
  222. /package/docs/{account → v6/account}/dashboard.mdx +0 -0
  223. /package/docs/{account → v6/account}/enterprise.mdx +0 -0
  224. /package/docs/{account → v6/account}/pricing.mdx +0 -0
  225. /package/docs/{account → v6/account}/projects.mdx +0 -0
  226. /package/docs/{account → v6/account}/team.mdx +0 -0
  227. /package/docs/{action → v6/action}/ami.mdx +0 -0
  228. /package/docs/{action → v6/action}/performance.mdx +0 -0
  229. /package/docs/{action → v6/action}/secrets.mdx +0 -0
  230. /package/docs/{apps → v6/apps}/chrome-extensions.mdx +0 -0
  231. /package/docs/{apps → v6/apps}/desktop-apps.mdx +0 -0
  232. /package/docs/{apps → v6/apps}/mobile-apps.mdx +0 -0
  233. /package/docs/{apps → v6/apps}/static-websites.mdx +0 -0
  234. /package/docs/{apps → v6/apps}/tauri-apps.mdx +0 -0
  235. /package/docs/{bugs → v6/bugs}/jira.mdx +0 -0
  236. /package/docs/{cli → v6/cli}/overview.mdx +0 -0
  237. /package/docs/{commands → v6/commands}/assert.mdx +0 -0
  238. /package/docs/{commands → v6/commands}/exec.mdx +0 -0
  239. /package/docs/{commands → v6/commands}/focus-application.mdx +0 -0
  240. /package/docs/{commands → v6/commands}/hover-image.mdx +0 -0
  241. /package/docs/{commands → v6/commands}/hover-text.mdx +0 -0
  242. /package/docs/{commands → v6/commands}/if.mdx +0 -0
  243. /package/docs/{commands → v6/commands}/match-image.mdx +0 -0
  244. /package/docs/{commands → v6/commands}/press-keys.mdx +0 -0
  245. /package/docs/{commands → v6/commands}/remember.mdx +0 -0
  246. /package/docs/{commands → v6/commands}/run.mdx +0 -0
  247. /package/docs/{commands → v6/commands}/scroll-until-image.mdx +0 -0
  248. /package/docs/{commands → v6/commands}/scroll-until-text.mdx +0 -0
  249. /package/docs/{commands → v6/commands}/scroll.mdx +0 -0
  250. /package/docs/{commands → v6/commands}/type.mdx +0 -0
  251. /package/docs/{commands → v6/commands}/wait-for-image.mdx +0 -0
  252. /package/docs/{commands → v6/commands}/wait-for-text.mdx +0 -0
  253. /package/docs/{commands → v6/commands}/wait.mdx +0 -0
  254. /package/docs/{exporting → v6/exporting}/junit.mdx +0 -0
  255. /package/docs/{exporting → v6/exporting}/playwright.mdx +0 -0
  256. /package/docs/{features → v6/features}/auto-healing.mdx +0 -0
  257. /package/docs/{features → v6/features}/generation.mdx +0 -0
  258. /package/docs/{features → v6/features}/parallel-testing.mdx +0 -0
  259. /package/docs/{features → v6/features}/reusable-snippets.mdx +0 -0
  260. /package/docs/{features → v6/features}/selectorless.mdx +0 -0
  261. /package/docs/{features → v6/features}/visual-assertions.mdx +0 -0
  262. /package/docs/{getting-started → v6/getting-started}/ci.mdx +0 -0
  263. /package/docs/{getting-started → v6/getting-started}/cli.mdx +0 -0
  264. /package/docs/{getting-started → v6/getting-started}/editing.mdx +0 -0
  265. /package/docs/{getting-started → v6/getting-started}/playwright.mdx +0 -0
  266. /package/docs/{getting-started → v6/getting-started}/running.mdx +0 -0
  267. /package/docs/{getting-started → v6/getting-started}/vscode.mdx +0 -0
  268. /package/docs/{guide → v6/guide}/assertions.mdx +0 -0
  269. /package/docs/{guide → v6/guide}/authentication.mdx +0 -0
  270. /package/docs/{guide → v6/guide}/code.mdx +0 -0
  271. /package/docs/{guide → v6/guide}/locating.mdx +0 -0
  272. /package/docs/{guide → v6/guide}/protips.mdx +0 -0
  273. /package/docs/{guide → v6/guide}/variables.mdx +0 -0
  274. /package/docs/{guide → v6/guide}/waiting.mdx +0 -0
  275. /package/docs/{importing → v6/importing}/csv.mdx +0 -0
  276. /package/docs/{importing → v6/importing}/gherkin.mdx +0 -0
  277. /package/docs/{importing → v6/importing}/jira.mdx +0 -0
  278. /package/docs/{importing → v6/importing}/testrail.mdx +0 -0
  279. /package/docs/{integrations → v6/integrations}/electron.mdx +0 -0
  280. /package/docs/{integrations → v6/integrations}/netlify.mdx +0 -0
  281. /package/docs/{integrations → v6/integrations}/vercel.mdx +0 -0
  282. /package/docs/{interactive → v6/interactive}/explore.mdx +0 -0
  283. /package/docs/{interactive → v6/interactive}/run.mdx +0 -0
  284. /package/docs/{interactive → v6/interactive}/save.mdx +0 -0
  285. /package/docs/{overview → v6/overview}/faq.mdx +0 -0
  286. /package/docs/{overview → v6/overview}/performance.mdx +0 -0
  287. /package/docs/{overview → v6/overview}/quickstart.mdx +0 -0
  288. /package/docs/{overview → v6/overview}/what-is-testdriver.mdx +0 -0
  289. /package/docs/{scenarios → v6/scenarios}/ai-chatbot.mdx +0 -0
  290. /package/docs/{scenarios → v6/scenarios}/cookie-banner.mdx +0 -0
  291. /package/docs/{scenarios → v6/scenarios}/file-upload.mdx +0 -0
  292. /package/docs/{scenarios → v6/scenarios}/form-filling.mdx +0 -0
  293. /package/docs/{scenarios → v6/scenarios}/log-in.mdx +0 -0
  294. /package/docs/{scenarios → v6/scenarios}/pdf-generation.mdx +0 -0
  295. /package/docs/{scenarios → v6/scenarios}/spell-check.mdx +0 -0
  296. /package/docs/{security → v6/security}/action.mdx +0 -0
  297. /package/docs/{security → v6/security}/agent.mdx +0 -0
  298. /package/docs/{security → v6/security}/platform.mdx +0 -0
  299. /package/docs/{tutorials → v6/tutorials}/advanced-test.mdx +0 -0
  300. /package/docs/{tutorials → v6/tutorials}/basic-test.mdx +0 -0
@@ -0,0 +1,101 @@
1
+ ---
2
+ title: Comparison
3
+ sidebarTitle: "Comparison"
4
+ description: "TestDriver vs Playwright vs Selenium"
5
+ icon: boxing-glove
6
+ ---
7
+
8
+ ## Application support
9
+
10
+ TestDriver operates a full desktop environment, so it can run any application.
11
+
12
+ <div className="comparison-table">
13
+ | Application | TestDriver | Playwright | Selenium |
14
+ |:-----------------:|:---------:|:-----------:|:--------:|
15
+ | Web Apps | ✅ | ✅ | ✅ |
16
+ | Mobile Apps | ✅ | ✅ | ✅ |
17
+ | VS Code Plugins | ✅ | | |
18
+ | Desktop Apps | ✅ | | |
19
+ | Chrome Extensions | ✅ | | |
20
+ </div>
21
+
22
+ ## Testing features
23
+
24
+ TestDriver is AI first.
25
+
26
+ <div className="comparison-table">
27
+ | Feature | TestDriver | Playwright | Selenium |
28
+ |:--------------------:|:----------:|:----------:|:--------:|
29
+ | Test Generation | ✅ | | |
30
+ | Adaptive Testing | ✅ | | |
31
+ | Visual Assertions | ✅ | | |
32
+ | Self Healing | ✅ | | |
33
+ | Application Switching| ✅ | | |
34
+ | GitHub Actions | ✅ | ✅ | |
35
+ | Team Dashboard | ✅ | | |
36
+ | Team Collaboration | ✅ | | |
37
+ </div>
38
+
39
+ ## Test coverage
40
+
41
+ TestDriver has more coverage than selector-based frameworks.
42
+
43
+ <div className="comparison-table">
44
+ | Feature | TestDriver | Playwright | Selenium |
45
+ |:------------------:|:----------:|:----------:|:--------:|
46
+ | Browser Viewport | ✅ | ✅ | ✅ |
47
+ | Browser App | ✅ | | |
48
+ | Operating System | ✅ | | |
49
+ | PDFs | ✅ | | |
50
+ | File System | ✅ | | |
51
+ | Push Notifications | ✅ | | |
52
+ | Image Content | ✅ | | |
53
+ | Video Content | ✅ | | |
54
+ | `<iframe>` | ✅ | | |
55
+ | `<canvas>` | ✅ | | |
56
+ | `<video>` | ✅ | | |
57
+ </div>
58
+
59
+ ## Debugging features
60
+
61
+ Debugging features are powered by [Dashcam.io](https://dashcam.io).
62
+
63
+ <div className="comparison-table">
64
+ | Feature | TestDriver | Playwright | Selenium |
65
+ |:--------------------:|:----------:|:----------:|:--------:|
66
+ | AI Summary | ✅ | | |
67
+ | Video Replay | ✅ | ✅ | |
68
+ | Browser Logs | ✅ | ✅ | |
69
+ | Desktop Logs | ✅ | | |
70
+ | Network Requests | ✅ | ✅ | |
71
+ | Team Dashboard | ✅ | | |
72
+ | Team Collaboration | ✅ | | |
73
+ </div>
74
+
75
+ ## Web browser support
76
+
77
+ TestDriver is browser agnostic and supports any version of any browser.
78
+
79
+ <div className="comparison-table">
80
+ | Feature | TestDriver | Playwright | Selenium |
81
+ |:--------:|:----------:|:----------:|:--------:|
82
+ | Chrome | ✅ | ✅ | ✅ |
83
+ | Firefox | ✅ | ✅ | ✅ |
84
+ | Webkit | ✅ | ✅ | ✅ |
85
+ | IE | ✅ | | ✅ |
86
+ | Edge | ✅ | ✅ | ✅ |
87
+ | Opera | ✅ | | ✅ |
88
+ | Safari | ✅ | | ✅ |
89
+ </div>
90
+
91
+ ## Operating system support
92
+
93
+ TestDriver currently supports all the three major operating systems!
94
+
95
+ <div className="comparison-table">
96
+ | Feature | TestDriver | Playwright | Selenium |
97
+ |:--------:|:----------:|:----------:|:--------:|
98
+ | Windows | ✅ | ✅ | ✅ |
99
+ | Mac | ✅ | ✅ | ✅ |
100
+ | Linux | ✅ | ✅ | ✅ |
101
+ </div>
@@ -0,0 +1,135 @@
1
+ # TestDriver v7 SDK Documentation
2
+
3
+ This directory contains the documentation for TestDriver v7, which introduces the JavaScript SDK as the primary interface for writing tests.
4
+
5
+ ## Structure
6
+
7
+ ```
8
+ v7/
9
+ ├── getting-started/
10
+ │ └── quickstart.mdx # Quick start guide for the SDK
11
+ ├── api/
12
+ │ ├── client.mdx # TestDriver client initialization and connection
13
+ │ ├── elements.mdx # Element finding and interaction
14
+ │ ├── sandbox.mdx # Sandbox management and script execution
15
+ │ ├── interactions.mdx # Keyboard, mouse, and scrolling
16
+ │ └── assertions.mdx # AI-powered assertions and testing
17
+ └── guides/
18
+ └── migration.mdx # Migration guide from YAML to SDK
19
+ ```
20
+
21
+ ## Documentation Coverage
22
+
23
+ ### Getting Started
24
+ - **Quickstart**: Complete setup and first test example using the `assert.test.mjs` pattern
25
+ - Installation
26
+ - Authentication
27
+ - Basic test structure with Vitest
28
+ - Sandbox connection
29
+
30
+ ### API Reference
31
+
32
+ #### Client (`/v7/api/client.mdx`)
33
+ - Constructor and initialization
34
+ - `auth()` - Authentication
35
+ - `connect()` - Sandbox connection with all options
36
+ - `disconnect()` - Cleanup
37
+ - Instance management (`getInstance()`, `getSessionId()`)
38
+ - Logging and events (`setLogging()`, `getEmitter()`)
39
+
40
+ #### Elements (`/v7/api/elements.mdx`)
41
+ - `find()` - AI-powered element location
42
+ - Element class methods:
43
+ - `found()` - Check if located
44
+ - `click()`, `hover()`, `doubleClick()`, `rightClick()`
45
+ - `mouseDown()`, `mouseUp()` - For drag operations
46
+ - Element properties:
47
+ - Coordinates (`x`, `y`, `centerX`, `centerY`)
48
+ - Visual data (`screenshot`, `width`, `height`, `boundingBox`)
49
+ - Content (`text`, `label`, `confidence`)
50
+ - Polling patterns for dynamic elements
51
+
52
+ #### Sandbox (`/v7/api/sandbox.mdx`)
53
+ - `exec()` - Execute code in sandbox
54
+ - JavaScript execution (browser context)
55
+ - PowerShell execution (Windows commands)
56
+ - `focusApplication()` - Window management
57
+ - Common operations:
58
+ - Software installation
59
+ - File operations
60
+ - Environment variables
61
+ - Network operations
62
+ - Process management
63
+ - Browser automation
64
+
65
+ #### Interactions (`/v7/api/interactions.mdx`)
66
+ - `type()` - Text input
67
+ - `pressKeys()` - Keyboard shortcuts and special keys
68
+ - `click()` / `hover()` - Coordinate-based mouse actions
69
+ - `scroll()` - Page scrolling
70
+ - `scrollUntilText()` / `scrollUntilImage()` - Scroll until found
71
+ - Keyboard key reference
72
+
73
+ #### Assertions (`/v7/api/assertions.mdx`)
74
+ - `assert()` - AI-powered assertions
75
+ - Basic assertions
76
+ - Negative assertions (invert parameter)
77
+ - Async assertions
78
+ - `remember()` - Extract information from screen
79
+ - Testing patterns:
80
+ - Polling assertions
81
+ - Multi-step validation
82
+ - Soft assertions
83
+ - Best practices
84
+
85
+ ### Guides
86
+
87
+ #### Migration (`/v7/guides/migration.mdx`)
88
+ - Why migrate from YAML to SDK
89
+ - Basic structure comparison
90
+ - Complete command mapping:
91
+ - Element location
92
+ - Typing and keyboard
93
+ - Scrolling
94
+ - Assertions
95
+ - Code execution
96
+ - Application focus
97
+ - Advanced patterns:
98
+ - Variables and data reuse
99
+ - Conditional logic
100
+ - Loops
101
+ - Data-driven tests
102
+ - Lifecycle hooks comparison
103
+ - Migration checklist
104
+ - Common pitfalls
105
+ - Complete example migration
106
+
107
+ ## Integration with docs.json
108
+
109
+ The v7 documentation is integrated into `docs/docs.json` under the "Computer-Use SDK" tab with version "7.0.0 (SDK)", distinguishing it from the YAML-based "6.X.X (YAML)" documentation.
110
+
111
+ ## Examples Used
112
+
113
+ The documentation uses examples from:
114
+ - `testdriver/acceptance-sdk/assert.test.mjs` - Basic assertion test
115
+ - `testdriver/acceptance-sdk/type.test.mjs` - Typing and form interaction
116
+ - `testdriver/acceptance-sdk/focus-window.test.mjs` - Application focus
117
+ - Other SDK test files for complete examples
118
+
119
+ ## Key Documentation Features
120
+
121
+ 1. **Practical Examples**: Every method includes working code examples
122
+ 2. **Best Practices**: Accordion sections with tips and patterns
123
+ 3. **Migration Support**: Complete YAML-to-SDK migration guide
124
+ 4. **Type Safety**: Parameter documentation with types
125
+ 5. **Real Test Patterns**: Examples based on actual test files
126
+ 6. **Comprehensive Coverage**: All major SDK features documented
127
+
128
+ ## Next Steps
129
+
130
+ Consider adding:
131
+ - `/v7/guides/best-practices.mdx` - Detailed best practices
132
+ - `/v7/guides/examples.mdx` - Complete test suite examples
133
+ - `/v7/guides/debugging.mdx` - Debugging techniques
134
+ - `/v7/guides/ci-cd.mdx` - CI/CD integration guide
135
+ - `/v7/api/keyboard-keys.mdx` - Complete keyboard key reference
@@ -0,0 +1,205 @@
1
+ ---
2
+ title: "ai()"
3
+ sidebarTitle: "ai"
4
+ description: "Execute natural language tasks using AI"
5
+ icon: "wand-magic-sparkles"
6
+ ---
7
+
8
+ ## Overview
9
+
10
+ The `ai()` method allows you to execute complex tasks using natural language descriptions. TestDriver's AI will figure out the steps needed to accomplish the task.
11
+
12
+ ## Syntax
13
+
14
+ ```javascript
15
+ await testdriver.ai(task, options)
16
+ ```
17
+
18
+ ## Parameters
19
+
20
+ <ParamField path="task" type="string" required>
21
+ Natural language description of what to do
22
+ </ParamField>
23
+
24
+ <ParamField path="options" type="object">
25
+ Execution options
26
+
27
+ <Expandable title="properties">
28
+ <ParamField path="validateAndLoop" type="boolean" default="false">
29
+ Whether to validate completion and retry if incomplete
30
+ </ParamField>
31
+ </Expandable>
32
+ </ParamField>
33
+
34
+ ## Returns
35
+
36
+ `Promise<string | void>` - Final AI response if `validateAndLoop` is true
37
+
38
+ ## Examples
39
+
40
+ ### Basic Usage
41
+
42
+ ```javascript
43
+ // Simple task execution
44
+ await testdriver.ai('Click the submit button');
45
+
46
+ // Complex multi-step task
47
+ await testdriver.ai('Fill out the contact form and submit it');
48
+
49
+ // Navigation task
50
+ await testdriver.ai('Go to the settings page and enable notifications');
51
+ ```
52
+
53
+ ### With Validation
54
+
55
+ ```javascript
56
+ // AI will verify the task completed successfully
57
+ const result = await testdriver.ai('Complete the checkout process', {
58
+ validateAndLoop: true
59
+ });
60
+
61
+ console.log('Task result:', result);
62
+ ```
63
+
64
+ ### Multi-Step Workflows
65
+
66
+ ```javascript
67
+ // The AI will break down complex tasks
68
+ await testdriver.ai('Search for "laptop", add the first result to cart, and proceed to checkout');
69
+
70
+ // UI exploration
71
+ await testdriver.ai('Find and click all menu items to explore the application');
72
+ ```
73
+
74
+ ## Use Cases
75
+
76
+ <AccordionGroup>
77
+ <Accordion title="Exploratory Testing">
78
+ Use AI to explore unfamiliar applications:
79
+
80
+ ```javascript
81
+ await testdriver.ai('Explore the main navigation menu');
82
+ await testdriver.ai('Try to find the user profile settings');
83
+ ```
84
+ </Accordion>
85
+
86
+ <Accordion title="Complex Workflows">
87
+ Let AI handle multi-step processes:
88
+
89
+ ```javascript
90
+ await testdriver.ai('Complete the multi-step registration form');
91
+ await testdriver.ai('Configure all the advanced settings to default values');
92
+ ```
93
+ </Accordion>
94
+
95
+ <Accordion title="Flexible Interactions">
96
+ When exact element locations aren't critical:
97
+
98
+ ```javascript
99
+ await testdriver.ai('Close any popup dialogs');
100
+ await testdriver.ai('Accept the cookie consent if it appears');
101
+ ```
102
+ </Accordion>
103
+ </AccordionGroup>
104
+
105
+ ## Best Practices
106
+
107
+ <Check>
108
+ **Be specific but flexible**: Give enough context without over-constraining the AI
109
+
110
+ ```javascript
111
+ // ✅ Good
112
+ await testdriver.ai('Add the first product to the shopping cart');
113
+
114
+ // ❌ Too vague
115
+ await testdriver.ai('do something');
116
+
117
+ // ❌ Too specific (defeats the purpose)
118
+ await testdriver.ai('click at coordinates 500, 300');
119
+ ```
120
+ </Check>
121
+
122
+ <Check>
123
+ **Use for exploration, not precision**: For critical assertions, use explicit methods
124
+
125
+ ```javascript
126
+ // Use AI for setup
127
+ await testdriver.ai('Navigate to the login page');
128
+
129
+ // Use explicit methods for critical steps
130
+ const usernameField = await testdriver.find('username input');
131
+ await usernameField.click();
132
+ await testdriver.type('testuser');
133
+
134
+ await testdriver.assert('login page is displayed');
135
+ ```
136
+ </Check>
137
+
138
+ <Warning>
139
+ **AI tasks may be slower**: The AI needs to analyze the screen and plan actions. For performance-critical tests, use explicit methods.
140
+ </Warning>
141
+
142
+ ## When to Use AI vs Explicit Methods
143
+
144
+ ### Use `ai()` when:
145
+ - Exploring unfamiliar applications
146
+ - Handling optional UI elements (popups, cookies, etc.)
147
+ - Prototyping tests quickly
148
+ - Tasks where exact steps may vary
149
+
150
+ ### Use explicit methods when:
151
+ - Performance is critical
152
+ - You need precise control
153
+ - Making assertions
154
+ - Debugging test failures
155
+ - Repetitive, predictable actions
156
+
157
+ ## Complete Example
158
+
159
+ ```javascript
160
+ import { beforeAll, afterAll, describe, it } from 'vitest';
161
+ import TestDriver from 'testdriverai';
162
+
163
+ describe('E-commerce Flow with AI', () => {
164
+ let testdriver;
165
+
166
+ beforeAll(async () => {
167
+ client = new TestDriver(process.env.TD_API_KEY);
168
+ await testdriver.auth();
169
+ await testdriver.connect({ newSandbox: true });
170
+ });
171
+
172
+ afterAll(async () => {
173
+ await testdriver.disconnect();
174
+ });
175
+
176
+ it('should complete shopping flow using AI assistance', async () => {
177
+ await testdriver.focusApplication('Google Chrome');
178
+
179
+ // Use AI for navigation and exploration
180
+ await testdriver.ai('Browse to the electronics section');
181
+ await testdriver.ai('Find and add a laptop to the cart');
182
+
183
+ // Use explicit methods for critical steps
184
+ const cartIcon = await testdriver.find('shopping cart icon');
185
+ await cartIcon.click();
186
+
187
+ const total = await testdriver.remember('the cart total amount');
188
+ console.log('Cart total:', total);
189
+
190
+ // Use AI for checkout flow
191
+ await testdriver.ai('Proceed to checkout and fill in shipping details', {
192
+ validateAndLoop: true
193
+ });
194
+
195
+ // Explicit assertion
196
+ await testdriver.assert('order confirmation page is displayed');
197
+ });
198
+ });
199
+ ```
200
+
201
+ ## Related Methods
202
+
203
+ - [`find()`](/v7/api/find) - Locate specific elements
204
+ - [`assert()`](/v7/api/assert) - Make assertions
205
+ - [`remember()`](/v7/api/remember) - Extract information