testdriverai 7.2.64 → 7.2.69

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 (369) hide show
  1. package/agent/index.js +4 -3
  2. package/agent/interface.js +11 -251
  3. package/agent/lib/debugger-server.js +2 -1
  4. package/agent/lib/logger.js +56 -0
  5. package/agent/lib/sandbox.js +6 -7
  6. package/ai/agents/test-writer.md +457 -0
  7. package/{docs/v7/ai.mdx → ai/skills/testdriver:ai/SKILL.md} +3 -5
  8. package/{docs/v7/assert.mdx → ai/skills/testdriver:assert/SKILL.md} +3 -4
  9. package/{docs/v7/aws-setup.mdx → ai/skills/testdriver:aws-setup/SKILL.md} +3 -4
  10. package/{docs/v7/caching.mdx → ai/skills/testdriver:caching/SKILL.md} +3 -7
  11. package/{docs/v7/captcha.mdx → ai/skills/testdriver:captcha/SKILL.md} +4 -5
  12. package/{docs/v7/ci-cd.mdx → ai/skills/testdriver:ci-cd/SKILL.md} +3 -4
  13. package/{docs/v7/click.mdx → ai/skills/testdriver:click/SKILL.md} +3 -4
  14. package/{docs/v7/client.mdx → ai/skills/testdriver:client/SKILL.md} +11 -5
  15. package/{docs/v7/cloud.mdx → ai/skills/testdriver:cloud/SKILL.md} +3 -4
  16. package/{docs/v7/customizing-devices.mdx → ai/skills/testdriver:customizing-devices/SKILL.md} +36 -26
  17. package/{docs/v7/dashcam.mdx → ai/skills/testdriver:dashcam/SKILL.md} +3 -4
  18. package/{docs/v7/device-config.mdx → ai/skills/testdriver:device-config/SKILL.md} +3 -3
  19. package/{docs/v7/double-click.mdx → ai/skills/testdriver:double-click/SKILL.md} +3 -3
  20. package/{docs/v7/elements.mdx → ai/skills/testdriver:elements/SKILL.md} +3 -4
  21. package/{docs/v7/enterprise.mdx → ai/skills/testdriver:enterprise/SKILL.md} +3 -5
  22. package/ai/skills/testdriver:examples/SKILL.md +7 -0
  23. package/{docs/v7/exec.mdx → ai/skills/testdriver:exec/SKILL.md} +3 -4
  24. package/{docs/v7/find.mdx → ai/skills/testdriver:find/SKILL.md} +81 -4
  25. package/{docs/v7/focus-application.mdx → ai/skills/testdriver:focus-application/SKILL.md} +3 -4
  26. package/{docs/v7/generating-tests.mdx → ai/skills/testdriver:generating-tests/SKILL.md} +3 -3
  27. package/{docs/v7/hover.mdx → ai/skills/testdriver:hover/SKILL.md} +3 -4
  28. package/{docs/v7/locating-elements.mdx → ai/skills/testdriver:locating-elements/SKILL.md} +3 -3
  29. package/{docs/v7/making-assertions.mdx → ai/skills/testdriver:making-assertions/SKILL.md} +3 -3
  30. package/ai/skills/testdriver:mcp-workflow/SKILL.md +410 -0
  31. package/{docs/v7/mouse-down.mdx → ai/skills/testdriver:mouse-down/SKILL.md} +3 -3
  32. package/{docs/v7/mouse-up.mdx → ai/skills/testdriver:mouse-up/SKILL.md} +3 -3
  33. package/{docs/v7/performing-actions.mdx → ai/skills/testdriver:performing-actions/SKILL.md} +3 -3
  34. package/{docs/v7/press-keys.mdx → ai/skills/testdriver:press-keys/SKILL.md} +3 -4
  35. package/{docs/v7/quickstart.mdx → ai/skills/testdriver:quickstart/SKILL.md} +3 -4
  36. package/{docs/v7/reusable-code.mdx → ai/skills/testdriver:reusable-code/SKILL.md} +3 -3
  37. package/{docs/v7/right-click.mdx → ai/skills/testdriver:right-click/SKILL.md} +3 -3
  38. package/{docs/v7/running-tests.mdx → ai/skills/testdriver:running-tests/SKILL.md} +3 -3
  39. package/{docs/v7/screenshot.mdx → ai/skills/testdriver:screenshot/SKILL.md} +3 -4
  40. package/{docs/v7/scroll.mdx → ai/skills/testdriver:scroll/SKILL.md} +3 -4
  41. package/{docs/v7/secrets.mdx → ai/skills/testdriver:secrets/SKILL.md} +3 -3
  42. package/{docs/v7/self-hosted.mdx → ai/skills/testdriver:self-hosted/SKILL.md} +3 -4
  43. package/ai/skills/testdriver:testdriver/SKILL.md +31 -0
  44. package/{docs/v7/type.mdx → ai/skills/testdriver:type/SKILL.md} +3 -4
  45. package/{docs/v7/variables.mdx → ai/skills/testdriver:variables/SKILL.md} +3 -3
  46. package/{docs/v7/waiting-for-elements.mdx → ai/skills/testdriver:waiting-for-elements/SKILL.md} +3 -3
  47. package/{docs/v7/what-is-testdriver.mdx → ai/skills/testdriver:what-is-testdriver/SKILL.md} +3 -3
  48. package/interfaces/cli/commands/init.js +278 -1
  49. package/interfaces/cli/commands/setup.js +382 -0
  50. package/interfaces/vitest-plugin.mjs +190 -122
  51. package/lib/sentry.js +4 -3
  52. package/lib/vitest/hooks.mjs +70 -16
  53. package/mcp-server/dist/codegen.d.ts +9 -0
  54. package/mcp-server/dist/codegen.js +165 -0
  55. package/mcp-server/dist/mcp-app.html +114 -0
  56. package/mcp-server/dist/provision-types.d.ts +290 -0
  57. package/mcp-server/dist/provision-types.js +174 -0
  58. package/mcp-server/dist/server.d.ts +6 -0
  59. package/mcp-server/dist/server.js +1441 -0
  60. package/mcp-server/dist/session.d.ts +85 -0
  61. package/mcp-server/dist/session.js +152 -0
  62. package/package.json +30 -9
  63. package/sdk.d.ts +29 -2
  64. package/sdk.js +1 -0
  65. package/.env.example +0 -4
  66. package/.github/workflows/acceptance-linux-scheduled.yaml +0 -45
  67. package/.github/workflows/acceptance-windows-scheduled.yaml +0 -54
  68. package/.github/workflows/acceptance.yaml +0 -87
  69. package/.github/workflows/publish.yaml +0 -68
  70. package/.github/workflows/test-init.yml +0 -145
  71. package/.github/workflows/testdriver.yml +0 -170
  72. package/.github/workflows/windows-self-hosted.yaml +0 -82
  73. package/.prettierignore +0 -4
  74. package/.prettierrc +0 -1
  75. package/CHANGELOG.md +0 -34
  76. package/agents.md +0 -455
  77. package/debugger/bg.png +0 -0
  78. package/debugger/icon.png +0 -0
  79. package/debugger/index.html +0 -797
  80. package/debugger/td.png +0 -0
  81. package/debugger/tray-buffered.png +0 -0
  82. package/debugger/tray.png +0 -0
  83. package/docs/GITHUB_COMMENTS.md +0 -330
  84. package/docs/GITHUB_COMMENTS_ANNOUNCEMENT.md +0 -167
  85. package/docs/QUICK-START-GITHUB-COMMENTS.md +0 -84
  86. package/docs/TEST-GITHUB-COMMENTS.md +0 -129
  87. package/docs/_scripts/link-replacer.js +0 -164
  88. package/docs/_scripts/upload-docs-to-openai.js +0 -284
  89. package/docs/docs.json +0 -393
  90. package/docs/github-integration-setup.md +0 -266
  91. package/docs/guide/best-practices-polling.mdx +0 -154
  92. package/docs/images/content/account/newprojectsettings.png +0 -0
  93. package/docs/images/content/account/projectpage.png +0 -0
  94. package/docs/images/content/account/projectreplays.png +0 -0
  95. package/docs/images/content/account/team-manage.png +0 -0
  96. package/docs/images/content/account/teampage.png +0 -0
  97. package/docs/images/content/extension/cursor.svg +0 -1
  98. package/docs/images/content/extension/vscode.svg +0 -57
  99. package/docs/images/content/extension/windsurf.svg +0 -3
  100. package/docs/images/content/self-hosted/launchtemplateid.png +0 -0
  101. package/docs/images/content/side-by-side.png +0 -0
  102. package/docs/images/content/vscode/ide-full.png +0 -0
  103. package/docs/images/content/vscode/running.png +0 -0
  104. package/docs/images/content/vscode/vscode-2-assert.png +0 -0
  105. package/docs/images/content/vscode/vscode-agent-preview.png +0 -0
  106. package/docs/images/content/vscode/vscode-copilot-ask.png +0 -0
  107. package/docs/images/content/vscode/vscode-file-creation.png +0 -0
  108. package/docs/images/content/vscode/vscode-install.png +0 -0
  109. package/docs/images/content/vscode/vscode-overview.png +0 -0
  110. package/docs/images/content/vscode/vscode-setup-walkthrough.png +0 -0
  111. package/docs/images/content/vscode/vscode-stopchat.png +0 -0
  112. package/docs/images/content/vscode/vscode-stoptest.png +0 -0
  113. package/docs/images/content/vscode/vscode-tdservice.png +0 -0
  114. package/docs/images/content/vscode/vscode-test-output.png +0 -0
  115. package/docs/images/content/vscode/vscode-testhistory.png +0 -0
  116. package/docs/images/content/vscode/vscode-testpane-runtests.png +0 -0
  117. package/docs/images/content/vscode/vscode-testpane.png +0 -0
  118. package/docs/images/template/dark.png +0 -0
  119. package/docs/images/template/icon.png +0 -0
  120. package/docs/images/template/light.png +0 -0
  121. package/docs/snippets/calendar-link.mdx +0 -4
  122. package/docs/snippets/gitignore-warning.mdx +0 -7
  123. package/docs/snippets/lifecycle-warning.mdx +0 -6
  124. package/docs/snippets/test-prereqs.mdx +0 -12
  125. package/docs/snippets/tests/assert-replay.mdx +0 -7
  126. package/docs/snippets/tests/assert-yaml.mdx +0 -8
  127. package/docs/snippets/tests/exec-js-replay.mdx +0 -7
  128. package/docs/snippets/tests/exec-js-yaml.mdx +0 -32
  129. package/docs/snippets/tests/exec-shell-replay.mdx +0 -7
  130. package/docs/snippets/tests/exec-shell-yaml.mdx +0 -15
  131. package/docs/snippets/tests/hover-image-replay.mdx +0 -7
  132. package/docs/snippets/tests/hover-image-yaml.mdx +0 -17
  133. package/docs/snippets/tests/hover-text-replay.mdx +0 -7
  134. package/docs/snippets/tests/hover-text-with-description-replay.mdx +0 -7
  135. package/docs/snippets/tests/hover-text-with-description-yaml.mdx +0 -24
  136. package/docs/snippets/tests/hover-text-yaml.mdx +0 -14
  137. package/docs/snippets/tests/match-image-replay.mdx +0 -7
  138. package/docs/snippets/tests/match-image-yaml.mdx +0 -17
  139. package/docs/snippets/tests/press-keys-replay.mdx +0 -7
  140. package/docs/snippets/tests/press-keys-yaml.mdx +0 -36
  141. package/docs/snippets/tests/remember-replay.mdx +0 -7
  142. package/docs/snippets/tests/remember-yaml.mdx +0 -28
  143. package/docs/snippets/tests/scroll-replay.mdx +0 -7
  144. package/docs/snippets/tests/scroll-until-image-replay.mdx +0 -7
  145. package/docs/snippets/tests/scroll-until-image-yaml.mdx +0 -14
  146. package/docs/snippets/tests/scroll-until-text-replay.mdx +0 -7
  147. package/docs/snippets/tests/scroll-until-text-yaml.mdx +0 -17
  148. package/docs/snippets/tests/scroll-yaml.mdx +0 -30
  149. package/docs/snippets/tests/type-repeated-replay.mdx +0 -7
  150. package/docs/snippets/tests/type-repeated-yaml.mdx +0 -22
  151. package/docs/snippets/tests/type-replay.mdx +0 -7
  152. package/docs/snippets/tests/type-yaml.mdx +0 -28
  153. package/docs/snippets/tests/wait-for-image-replay.mdx +0 -7
  154. package/docs/snippets/tests/wait-for-image-yaml.mdx +0 -18
  155. package/docs/snippets/tests/wait-for-text-replay.mdx +0 -7
  156. package/docs/snippets/tests/wait-for-text-yaml.mdx +0 -18
  157. package/docs/snippets/tests/wait-replay.mdx +0 -7
  158. package/docs/snippets/tests/wait-yaml.mdx +0 -13
  159. package/docs/styles.css +0 -65
  160. package/docs/v6/account/dashboard.mdx +0 -16
  161. package/docs/v6/account/enterprise.mdx +0 -110
  162. package/docs/v6/account/pricing.mdx +0 -33
  163. package/docs/v6/account/projects.mdx +0 -33
  164. package/docs/v6/account/team.mdx +0 -35
  165. package/docs/v6/action/ami.mdx +0 -109
  166. package/docs/v6/action/performance.mdx +0 -105
  167. package/docs/v6/action/secrets.mdx +0 -93
  168. package/docs/v6/apps/chrome-extensions.mdx +0 -48
  169. package/docs/v6/apps/desktop-apps.mdx +0 -93
  170. package/docs/v6/apps/mobile-apps.mdx +0 -26
  171. package/docs/v6/apps/static-websites.mdx +0 -54
  172. package/docs/v6/apps/tauri-apps.mdx +0 -361
  173. package/docs/v6/bugs/jira.mdx +0 -232
  174. package/docs/v6/cli/overview.mdx +0 -66
  175. package/docs/v6/commands/assert.mdx +0 -45
  176. package/docs/v6/commands/exec.mdx +0 -282
  177. package/docs/v6/commands/focus-application.mdx +0 -44
  178. package/docs/v6/commands/hover-image.mdx +0 -69
  179. package/docs/v6/commands/hover-text.mdx +0 -47
  180. package/docs/v6/commands/if.mdx +0 -53
  181. package/docs/v6/commands/match-image.mdx +0 -67
  182. package/docs/v6/commands/press-keys.mdx +0 -87
  183. package/docs/v6/commands/remember.mdx +0 -49
  184. package/docs/v6/commands/run.mdx +0 -44
  185. package/docs/v6/commands/scroll-until-image.mdx +0 -66
  186. package/docs/v6/commands/scroll-until-text.mdx +0 -60
  187. package/docs/v6/commands/scroll.mdx +0 -69
  188. package/docs/v6/commands/type.mdx +0 -45
  189. package/docs/v6/commands/wait-for-image.mdx +0 -54
  190. package/docs/v6/commands/wait-for-text.mdx +0 -48
  191. package/docs/v6/commands/wait.mdx +0 -45
  192. package/docs/v6/exporting/junit.mdx +0 -218
  193. package/docs/v6/exporting/playwright.mdx +0 -197
  194. package/docs/v6/features/auto-healing.mdx +0 -144
  195. package/docs/v6/features/generation.mdx +0 -116
  196. package/docs/v6/features/parallel-testing.mdx +0 -151
  197. package/docs/v6/features/reusable-snippets.mdx +0 -131
  198. package/docs/v6/features/selectorless.mdx +0 -80
  199. package/docs/v6/features/visual-assertions.mdx +0 -139
  200. package/docs/v6/getting-started/ci.mdx +0 -146
  201. package/docs/v6/getting-started/cli.mdx +0 -91
  202. package/docs/v6/getting-started/editing.mdx +0 -100
  203. package/docs/v6/getting-started/playwright.mdx +0 -342
  204. package/docs/v6/getting-started/running.mdx +0 -48
  205. package/docs/v6/getting-started/self-hosting.mdx +0 -408
  206. package/docs/v6/getting-started/vscode.mdx +0 -89
  207. package/docs/v6/guide/assertions.mdx +0 -189
  208. package/docs/v6/guide/authentication.mdx +0 -136
  209. package/docs/v6/guide/code.mdx +0 -65
  210. package/docs/v6/guide/dashcam.mdx +0 -118
  211. package/docs/v6/guide/environment-variables.mdx +0 -26
  212. package/docs/v6/guide/lifecycle.mdx +0 -242
  213. package/docs/v6/guide/locating.mdx +0 -141
  214. package/docs/v6/guide/protips.mdx +0 -43
  215. package/docs/v6/guide/variables.mdx +0 -143
  216. package/docs/v6/guide/waiting.mdx +0 -130
  217. package/docs/v6/importing/csv.mdx +0 -196
  218. package/docs/v6/importing/gherkin.mdx +0 -143
  219. package/docs/v6/importing/jira.mdx +0 -164
  220. package/docs/v6/importing/testrail.mdx +0 -162
  221. package/docs/v6/integrations/electron.mdx +0 -146
  222. package/docs/v6/integrations/netlify.mdx +0 -100
  223. package/docs/v6/integrations/vercel.mdx +0 -125
  224. package/docs/v6/interactive/explore.mdx +0 -99
  225. package/docs/v6/interactive/run.mdx +0 -52
  226. package/docs/v6/interactive/save.mdx +0 -63
  227. package/docs/v6/overview/comparison.mdx +0 -101
  228. package/docs/v6/overview/faq.mdx +0 -162
  229. package/docs/v6/overview/performance.mdx +0 -52
  230. package/docs/v6/overview/quickstart.mdx +0 -137
  231. package/docs/v6/overview/what-is-testdriver.mdx +0 -85
  232. package/docs/v6/scenarios/ai-chatbot.mdx +0 -28
  233. package/docs/v6/scenarios/cookie-banner.mdx +0 -32
  234. package/docs/v6/scenarios/file-upload.mdx +0 -33
  235. package/docs/v6/scenarios/form-filling.mdx +0 -32
  236. package/docs/v6/scenarios/log-in.mdx +0 -75
  237. package/docs/v6/scenarios/pdf-generation.mdx +0 -25
  238. package/docs/v6/scenarios/spell-check.mdx +0 -22
  239. package/docs/v6/security/action.mdx +0 -84
  240. package/docs/v6/security/agent.mdx +0 -73
  241. package/docs/v6/security/platform.mdx +0 -77
  242. package/docs/v6/tutorials/advanced-test.mdx +0 -81
  243. package/docs/v6/tutorials/basic-test.mdx +0 -45
  244. package/docs/v7/_drafts/agents.mdx +0 -852
  245. package/docs/v7/_drafts/architecture.mdx +0 -399
  246. package/docs/v7/_drafts/auto-cache-key.mdx +0 -167
  247. package/docs/v7/_drafts/awesome-logs-quick-ref.mdx +0 -100
  248. package/docs/v7/_drafts/best-practices.mdx +0 -486
  249. package/docs/v7/_drafts/caching-ai.mdx +0 -215
  250. package/docs/v7/_drafts/caching-selectors.mdx +0 -424
  251. package/docs/v7/_drafts/caching.mdx +0 -366
  252. package/docs/v7/_drafts/cli-to-sdk-migration.mdx +0 -425
  253. package/docs/v7/_drafts/commands/assert.mdx +0 -45
  254. package/docs/v7/_drafts/commands/exec.mdx +0 -282
  255. package/docs/v7/_drafts/commands/focus-application.mdx +0 -44
  256. package/docs/v7/_drafts/commands/hover-image.mdx +0 -69
  257. package/docs/v7/_drafts/commands/hover-text.mdx +0 -47
  258. package/docs/v7/_drafts/commands/if.mdx +0 -53
  259. package/docs/v7/_drafts/commands/match-image.mdx +0 -67
  260. package/docs/v7/_drafts/commands/press-keys.mdx +0 -87
  261. package/docs/v7/_drafts/commands/remember.mdx +0 -49
  262. package/docs/v7/_drafts/commands/run.mdx +0 -44
  263. package/docs/v7/_drafts/commands/scroll-until-image.mdx +0 -66
  264. package/docs/v7/_drafts/commands/scroll-until-text.mdx +0 -60
  265. package/docs/v7/_drafts/commands/scroll.mdx +0 -69
  266. package/docs/v7/_drafts/commands/type.mdx +0 -45
  267. package/docs/v7/_drafts/commands/wait-for-image.mdx +0 -54
  268. package/docs/v7/_drafts/commands/wait-for-text.mdx +0 -48
  269. package/docs/v7/_drafts/commands/wait.mdx +0 -45
  270. package/docs/v7/_drafts/configuration.mdx +0 -378
  271. package/docs/v7/_drafts/contributing.mdx +0 -174
  272. package/docs/v7/_drafts/core.mdx +0 -458
  273. package/docs/v7/_drafts/dashcam-title-feature.mdx +0 -89
  274. package/docs/v7/_drafts/debugging.mdx +0 -349
  275. package/docs/v7/_drafts/error-handling.mdx +0 -501
  276. package/docs/v7/_drafts/faq.mdx +0 -393
  277. package/docs/v7/_drafts/hooks.mdx +0 -360
  278. package/docs/v7/_drafts/init-command.mdx +0 -95
  279. package/docs/v7/_drafts/installation.mdx +0 -420
  280. package/docs/v7/_drafts/migration.mdx +0 -562
  281. package/docs/v7/_drafts/observable.mdx +0 -604
  282. package/docs/v7/_drafts/playwright.mdx +0 -342
  283. package/docs/v7/_drafts/plugin-migration.mdx +0 -220
  284. package/docs/v7/_drafts/powerful.mdx +0 -419
  285. package/docs/v7/_drafts/presets.mdx +0 -210
  286. package/docs/v7/_drafts/progressive-disclosure.mdx +0 -230
  287. package/docs/v7/_drafts/prompt-cache.mdx +0 -200
  288. package/docs/v7/_drafts/provision.mdx +0 -390
  289. package/docs/v7/_drafts/quick-start-test-recording.mdx +0 -214
  290. package/docs/v7/_drafts/readme.mdx +0 -135
  291. package/docs/v7/_drafts/reports.mdx +0 -414
  292. package/docs/v7/_drafts/scalable.mdx +0 -754
  293. package/docs/v7/_drafts/screenshot.mdx +0 -155
  294. package/docs/v7/_drafts/sdk-awesome-logs.mdx +0 -468
  295. package/docs/v7/_drafts/sdk-browser-rendering.mdx +0 -167
  296. package/docs/v7/_drafts/sdk-migration.mdx +0 -474
  297. package/docs/v7/_drafts/sdk-v7-complete.mdx +0 -345
  298. package/docs/v7/_drafts/self-hosting.mdx +0 -369
  299. package/docs/v7/_drafts/test-recording.mdx +0 -382
  300. package/docs/v7/_drafts/troubleshooting.mdx +0 -526
  301. package/docs/v7/_drafts/vitest-plugin.mdx +0 -477
  302. package/docs/v7/_drafts/vitest.mdx +0 -535
  303. package/docs/v7/_drafts/writing-tests.mdx +0 -25
  304. package/docs/v7/examples.mdx +0 -5
  305. package/eslint.config.js +0 -67
  306. package/examples/ai.test.mjs +0 -30
  307. package/examples/assert.test.mjs +0 -46
  308. package/examples/captcha-api.test.mjs +0 -50
  309. package/examples/chrome-extension.test.mjs +0 -94
  310. package/examples/drag-and-drop.test.mjs +0 -58
  311. package/examples/element-not-found.test.mjs +0 -26
  312. package/examples/exec-output.test.mjs +0 -59
  313. package/examples/exec-pwsh.test.mjs +0 -57
  314. package/examples/focus-window.test.mjs +0 -36
  315. package/examples/formatted-logging.test.mjs +0 -26
  316. package/examples/hover-image.test.mjs +0 -52
  317. package/examples/hover-text-with-description.test.mjs +0 -56
  318. package/examples/hover-text.test.mjs +0 -27
  319. package/examples/installer.test.mjs +0 -49
  320. package/examples/launch-vscode-linux.test.mjs +0 -54
  321. package/examples/match-image.test.mjs +0 -54
  322. package/examples/no-provision.test.mjs +0 -23
  323. package/examples/press-keys.test.mjs +0 -50
  324. package/examples/prompt.test.mjs +0 -33
  325. package/examples/scroll-keyboard.test.mjs +0 -37
  326. package/examples/scroll-until-image.test.mjs +0 -39
  327. package/examples/scroll-until-text.test.mjs +0 -67
  328. package/examples/scroll.test.mjs +0 -41
  329. package/examples/type.test.mjs +0 -45
  330. package/examples/windows-installer.test.mjs +0 -53
  331. package/interfaces/cli/commands/edit.js +0 -3
  332. package/interfaces/cli/commands/generate.js +0 -3
  333. package/interfaces/cli/commands/run.js +0 -3
  334. package/interfaces/cli/utils/factory.js +0 -71
  335. package/jsconfig.json +0 -26
  336. package/manual/test-init-command.js +0 -223
  337. package/sdk-log-formatter.js +0 -930
  338. package/setup/aws/cloudformation.yaml +0 -470
  339. package/setup/aws/spawn-runner.sh +0 -190
  340. package/test/api-resilience.test.mjs +0 -0
  341. package/test/captcha-solver.test.mjs +0 -70
  342. package/test/chrome-remote-debugging.test.mjs +0 -66
  343. package/test/manual/debug-locate-response.js +0 -82
  344. package/test/manual/reconnect-provision.test.mjs +0 -49
  345. package/test/manual/test-console-logs.test.mjs +0 -42
  346. package/test/manual/test-find-api.js +0 -73
  347. package/test/manual/test-init.sh +0 -54
  348. package/test/manual/test-prompt-cache.js +0 -96
  349. package/test/manual/test-provision-auth.mjs +0 -22
  350. package/test/manual/test-sandbox-render.js +0 -28
  351. package/test/manual/test-sdk-methods.js +0 -15
  352. package/test/manual/test-sdk-refactor.js +0 -53
  353. package/test/manual/test-stack-trace.mjs +0 -57
  354. package/test/manual/verify-element-api.js +0 -89
  355. package/test/manual/verify-types.js +0 -0
  356. package/test/manual-unawaited-promise.test.mjs +0 -31
  357. package/testdriver-plugin/skills/actions/SKILL.md +0 -93
  358. package/testdriver-plugin/skills/assertions/SKILL.md +0 -77
  359. package/testdriver-plugin/skills/caching/SKILL.md +0 -66
  360. package/testdriver-plugin/skills/creating-tests/SKILL.md +0 -104
  361. package/testdriver-plugin/skills/finding-elements/SKILL.md +0 -77
  362. package/testdriver-plugin/skills/github-actions/SKILL.md +0 -100
  363. package/testdriver-plugin/skills/running-tests/SKILL.md +0 -77
  364. package/testdriver-plugin/skills/secrets/SKILL.md +0 -87
  365. package/testdriver-plugin/skills/self-hosting/SKILL.md +0 -89
  366. package/testdriver-plugin/skills/setup/SKILL.md +0 -76
  367. package/testdriver-plugin/skills/variables/SKILL.md +0 -88
  368. package/testdriver-plugin/skills/waiting/SKILL.md +0 -72
  369. package/vitest.config.mjs +0 -29
@@ -1,154 +0,0 @@
1
- # Best Practices: Element Polling
2
-
3
- **⚠️ CRITICAL: Never use `wait()` for waiting for elements to appear.**
4
-
5
- ## Why Avoid `wait()`?
6
-
7
- Arbitrary waits with `wait()` have several problems:
8
-
9
- 1. **Brittle**: Fixed timeouts may be too short (causing flaky tests) or too long (wasting time)
10
- 2. **Slow**: You always wait the full duration, even if the element appears sooner
11
- 3. **Unreliable**: Network conditions, system load, and other factors affect timing
12
- 4. **Hard to debug**: When tests fail, you don't know if it was a timing issue or actual failure
13
-
14
- ## The Right Way: Element Polling with `find()`
15
-
16
- TestDriver's `find()` method is designed for element detection. Use it in a polling loop to wait for elements:
17
-
18
- ### Basic Polling Pattern
19
-
20
- ```javascript
21
- // ❌ WRONG: Using wait()
22
- await testdriver.wait(2000);
23
- const button = await testdriver.find("Submit button");
24
-
25
- // ✅ CORRECT: Polling with find()
26
- let button;
27
- for (let i = 0; i < 10; i++) {
28
- try {
29
- button = await testdriver.find("Submit button");
30
- if (button.found()) break;
31
- } catch (e) {
32
- if (i === 9) throw e; // Re-throw on last attempt
33
- }
34
- await new Promise(resolve => setTimeout(resolve, 1000));
35
- }
36
- ```
37
-
38
- ### Helper Function for Polling
39
-
40
- Create a reusable helper function:
41
-
42
- ```javascript
43
- async function waitForElement(testdriver, description, maxAttempts = 10, delayMs = 1000) {
44
- for (let i = 0; i < maxAttempts; i++) {
45
- try {
46
- const element = await testdriver.find(description);
47
- if (element.found()) {
48
- return element;
49
- }
50
- } catch (e) {
51
- if (i === maxAttempts - 1) throw e;
52
- }
53
- await new Promise(resolve => setTimeout(resolve, delayMs));
54
- }
55
- throw new Error(`Element not found after ${maxAttempts} attempts: ${description}`);
56
- }
57
-
58
- // Usage
59
- const emailField = await waitForElement(testdriver, "Email input field");
60
- await emailField.click();
61
- ```
62
-
63
- ## When to Use Polling
64
-
65
- Use element polling in these scenarios:
66
-
67
- - **After navigation**: Waiting for a new page to load
68
- - **After user action**: Waiting for UI updates (form submission, modal opening, etc.)
69
- - **Dynamic content**: Waiting for AJAX-loaded elements
70
- - **State transitions**: Waiting for loading spinners to disappear or success messages to appear
71
-
72
- ## Example: Complete Login Flow
73
-
74
- ```javascript
75
- import { chrome } from "testdriverai/presets";
76
-
77
- // Helper function
78
- async function waitForElement(testdriver, description, maxAttempts = 10, delayMs = 1000) {
79
- for (let i = 0; i < maxAttempts; i++) {
80
- try {
81
- const element = await testdriver.find(description);
82
- if (element.found()) return element;
83
- } catch (e) {
84
- if (i === maxAttempts - 1) throw e;
85
- }
86
- await new Promise(resolve => setTimeout(resolve, delayMs));
87
- }
88
- throw new Error(`Element not found after ${maxAttempts} attempts: ${description}`);
89
- }
90
-
91
- it("should log in successfully", async (context) => {
92
- const { testdriver } = await chrome(context, {
93
- url: 'https://example.com/login',
94
- });
95
-
96
- // Wait for login page to load
97
- const emailField = await waitForElement(testdriver, "Email input field");
98
- await emailField.click();
99
- await testdriver.type("user@example.com");
100
-
101
- const passwordField = await testdriver.find("Password input field");
102
- await passwordField.click();
103
- await testdriver.type("password123");
104
-
105
- const loginButton = await testdriver.find("Login button");
106
- await loginButton.click();
107
-
108
- // Wait for dashboard to load after login
109
- await waitForElement(testdriver, "Dashboard welcome message");
110
-
111
- // Verify login successful
112
- const isLoggedIn = await testdriver.assert("user is logged in to dashboard");
113
- expect(isLoggedIn).toBeTruthy();
114
- });
115
- ```
116
-
117
- ## Advanced: Conditional Polling
118
-
119
- For elements that may or may not appear (like dialogs or notifications):
120
-
121
- ```javascript
122
- // Try to find and dismiss optional dialog
123
- try {
124
- const dialog = await waitForElement(testdriver, "Cookie consent dialog", 3, 500);
125
- const acceptButton = await testdriver.find("Accept button");
126
- await acceptButton.click();
127
- console.log("Dismissed cookie dialog");
128
- } catch {
129
- console.log("No cookie dialog found, continuing...");
130
- }
131
- ```
132
-
133
- ## Configuration
134
-
135
- Adjust polling parameters based on your needs:
136
-
137
- ```javascript
138
- // Quick polling for fast UI updates (check every 300ms, up to 3 seconds)
139
- await waitForElement(testdriver, "Success message", 10, 300);
140
-
141
- // Patient polling for slow operations (check every 2s, up to 20 seconds)
142
- await waitForElement(testdriver, "Processing complete indicator", 10, 2000);
143
- ```
144
-
145
- ## Summary
146
-
147
- | Pattern | Use Case |
148
- |---------|----------|
149
- | **Polling with `find()`** | ✅ Waiting for UI elements to appear or disappear |
150
- | **`wait()`** | ❌ NEVER use for element waiting |
151
- | **Helper function** | ✅ Recommended for cleaner, reusable code |
152
- | **Conditional polling** | ✅ For optional elements (dialogs, notifications) |
153
-
154
- Remember: **If you're waiting for something to appear on screen, use `find()` in a polling loop, not `wait()`.**