@testdriverai/agent 7.8.0-test.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. package/.claude/settings.local.json +7 -0
  2. package/.env.example +4 -0
  3. package/.prettierignore +4 -0
  4. package/.prettierrc +1 -0
  5. package/CHANGELOG.md +953 -0
  6. package/README.md +81 -0
  7. package/agent/events.js +135 -0
  8. package/agent/index.js +2450 -0
  9. package/agent/interface.js +35 -0
  10. package/agent/lib/analytics.js +22 -0
  11. package/agent/lib/censorship.js +75 -0
  12. package/agent/lib/commander.js +246 -0
  13. package/agent/lib/commands.js +1684 -0
  14. package/agent/lib/config.js +60 -0
  15. package/agent/lib/generator.js +91 -0
  16. package/agent/lib/http.js +144 -0
  17. package/agent/lib/logger.js +56 -0
  18. package/agent/lib/outputs.js +29 -0
  19. package/agent/lib/parser.js +209 -0
  20. package/agent/lib/redraw.js +386 -0
  21. package/agent/lib/resources/cursor-2.png +0 -0
  22. package/agent/lib/sandbox.js +1104 -0
  23. package/agent/lib/sdk.js +633 -0
  24. package/agent/lib/session.js +25 -0
  25. package/agent/lib/source-mapper.js +342 -0
  26. package/agent/lib/subimage/index.js +77 -0
  27. package/agent/lib/subimage/opencv.js +69 -0
  28. package/agent/lib/system.js +204 -0
  29. package/agent/lib/theme.js +14 -0
  30. package/agent/lib/valid-version.js +21 -0
  31. package/agent/lib/validation.js +169 -0
  32. package/ai/.claude-plugin/plugin.json +9 -0
  33. package/ai/agents/testdriver.md +638 -0
  34. package/ai/skills/testdriver-ai/SKILL.md +204 -0
  35. package/ai/skills/testdriver-assert/SKILL.md +315 -0
  36. package/ai/skills/testdriver-aws-setup/SKILL.md +448 -0
  37. package/ai/skills/testdriver-cache/SKILL.md +221 -0
  38. package/ai/skills/testdriver-caching/SKILL.md +124 -0
  39. package/ai/skills/testdriver-captcha/SKILL.md +158 -0
  40. package/ai/skills/testdriver-ci-cd/SKILL.md +602 -0
  41. package/ai/skills/testdriver-click/SKILL.md +286 -0
  42. package/ai/skills/testdriver-client/SKILL.md +477 -0
  43. package/ai/skills/testdriver-cloud/SKILL.md +119 -0
  44. package/ai/skills/testdriver-customizing-devices/SKILL.md +319 -0
  45. package/ai/skills/testdriver-dashcam/SKILL.md +418 -0
  46. package/ai/skills/testdriver-debugging-with-screenshots/SKILL.md +401 -0
  47. package/ai/skills/testdriver-device-config/SKILL.md +317 -0
  48. package/ai/skills/testdriver-double-click/SKILL.md +102 -0
  49. package/ai/skills/testdriver-elements/SKILL.md +605 -0
  50. package/ai/skills/testdriver-enterprise/SKILL.md +114 -0
  51. package/ai/skills/testdriver-errors/SKILL.md +246 -0
  52. package/ai/skills/testdriver-events/SKILL.md +356 -0
  53. package/ai/skills/testdriver-examples/SKILL.md +7 -0
  54. package/ai/skills/testdriver-exec/SKILL.md +317 -0
  55. package/ai/skills/testdriver-find/SKILL.md +829 -0
  56. package/ai/skills/testdriver-focus-application/SKILL.md +293 -0
  57. package/ai/skills/testdriver-generating-tests/SKILL.md +36 -0
  58. package/ai/skills/testdriver-hover/SKILL.md +278 -0
  59. package/ai/skills/testdriver-locating-elements/SKILL.md +71 -0
  60. package/ai/skills/testdriver-making-assertions/SKILL.md +32 -0
  61. package/ai/skills/testdriver-mcp/SKILL.md +7 -0
  62. package/ai/skills/testdriver-mcp-workflow/SKILL.md +410 -0
  63. package/ai/skills/testdriver-mouse-down/SKILL.md +161 -0
  64. package/ai/skills/testdriver-mouse-up/SKILL.md +164 -0
  65. package/ai/skills/testdriver-parse/SKILL.md +236 -0
  66. package/ai/skills/testdriver-performing-actions/SKILL.md +54 -0
  67. package/ai/skills/testdriver-press-keys/SKILL.md +348 -0
  68. package/ai/skills/testdriver-provision/SKILL.md +331 -0
  69. package/ai/skills/testdriver-quickstart/SKILL.md +144 -0
  70. package/ai/skills/testdriver-redraw/SKILL.md +214 -0
  71. package/ai/skills/testdriver-reusable-code/SKILL.md +249 -0
  72. package/ai/skills/testdriver-right-click/SKILL.md +123 -0
  73. package/ai/skills/testdriver-running-tests/SKILL.md +185 -0
  74. package/ai/skills/testdriver-screenshot/SKILL.md +248 -0
  75. package/ai/skills/testdriver-screenshots/SKILL.md +184 -0
  76. package/ai/skills/testdriver-scroll/SKILL.md +335 -0
  77. package/ai/skills/testdriver-secrets/SKILL.md +115 -0
  78. package/ai/skills/testdriver-self-hosted/SKILL.md +65 -0
  79. package/ai/skills/testdriver-test-writer/SKILL.md +448 -0
  80. package/ai/skills/testdriver-testdriver/SKILL.md +628 -0
  81. package/ai/skills/testdriver-testdriver-mechanic/SKILL.md +165 -0
  82. package/ai/skills/testdriver-type/SKILL.md +357 -0
  83. package/ai/skills/testdriver-variables/SKILL.md +111 -0
  84. package/ai/skills/testdriver-wait/SKILL.md +50 -0
  85. package/ai/skills/testdriver-waiting-for-elements/SKILL.md +90 -0
  86. package/ai/skills/testdriver-what-is-testdriver/SKILL.md +54 -0
  87. package/bin/testdriverai.js +22 -0
  88. package/debugger/bg.png +0 -0
  89. package/debugger/icon.png +0 -0
  90. package/debugger/index.html +469 -0
  91. package/debugger/td.png +0 -0
  92. package/debugger/tray-buffered.png +0 -0
  93. package/debugger/tray.png +0 -0
  94. package/docs/GITHUB_COMMENTS.md +330 -0
  95. package/docs/GITHUB_COMMENTS_ANNOUNCEMENT.md +167 -0
  96. package/docs/QUICK-START-GITHUB-COMMENTS.md +84 -0
  97. package/docs/TEST-GITHUB-COMMENTS.md +129 -0
  98. package/docs/_data/examples-manifest.json +177 -0
  99. package/docs/_data/examples-manifest.schema.json +41 -0
  100. package/docs/_scripts/extract-example-urls.js +165 -0
  101. package/docs/_scripts/generate-examples.js +560 -0
  102. package/docs/_scripts/generate-skills.js +154 -0
  103. package/docs/_scripts/link-replacer.js +164 -0
  104. package/docs/_scripts/upload-docs-to-openai.js +284 -0
  105. package/docs/changelog.mdx +161 -0
  106. package/docs/claude-mcp-plugin.mdx +160 -0
  107. package/docs/docs.json +442 -0
  108. package/docs/github-integration-setup.md +266 -0
  109. package/docs/guide/best-practices-polling.mdx +174 -0
  110. package/docs/images/content/account/newprojectsettings.png +0 -0
  111. package/docs/images/content/account/projectpage.png +0 -0
  112. package/docs/images/content/account/projectreplays.png +0 -0
  113. package/docs/images/content/account/team-manage.png +0 -0
  114. package/docs/images/content/account/teampage.png +0 -0
  115. package/docs/images/content/extension/cursor.svg +1 -0
  116. package/docs/images/content/extension/vscode.svg +57 -0
  117. package/docs/images/content/extension/windsurf.svg +3 -0
  118. package/docs/images/content/parse/output.png +0 -0
  119. package/docs/images/content/self-hosted/launchtemplateid.png +0 -0
  120. package/docs/images/content/side-by-side.png +0 -0
  121. package/docs/images/content/vscode/ide-full.png +0 -0
  122. package/docs/images/content/vscode/running.png +0 -0
  123. package/docs/images/content/vscode/v7-chat.png +0 -0
  124. package/docs/images/content/vscode/v7-choose-agent.png +0 -0
  125. package/docs/images/content/vscode/v7-full.png +0 -0
  126. package/docs/images/content/vscode/v7-onboarding.png +0 -0
  127. package/docs/images/content/vscode/vscode-2-assert.png +0 -0
  128. package/docs/images/content/vscode/vscode-agent-preview.png +0 -0
  129. package/docs/images/content/vscode/vscode-copilot-ask.png +0 -0
  130. package/docs/images/content/vscode/vscode-file-creation.png +0 -0
  131. package/docs/images/content/vscode/vscode-install.png +0 -0
  132. package/docs/images/content/vscode/vscode-overview.png +0 -0
  133. package/docs/images/content/vscode/vscode-setup-walkthrough.png +0 -0
  134. package/docs/images/content/vscode/vscode-stopchat.png +0 -0
  135. package/docs/images/content/vscode/vscode-stoptest.png +0 -0
  136. package/docs/images/content/vscode/vscode-tdservice.png +0 -0
  137. package/docs/images/content/vscode/vscode-test-output.png +0 -0
  138. package/docs/images/content/vscode/vscode-testhistory.png +0 -0
  139. package/docs/images/content/vscode/vscode-testpane-runtests.png +0 -0
  140. package/docs/images/content/vscode/vscode-testpane.png +0 -0
  141. package/docs/images/template/dark.png +0 -0
  142. package/docs/images/template/icon.png +0 -0
  143. package/docs/images/template/light.png +0 -0
  144. package/docs/snippets/calendar-link.mdx +4 -0
  145. package/docs/snippets/gitignore-warning.mdx +7 -0
  146. package/docs/snippets/lifecycle-warning.mdx +6 -0
  147. package/docs/snippets/test-prereqs.mdx +12 -0
  148. package/docs/snippets/tests/assert-replay.mdx +7 -0
  149. package/docs/snippets/tests/assert-yaml.mdx +8 -0
  150. package/docs/snippets/tests/exec-js-replay.mdx +7 -0
  151. package/docs/snippets/tests/exec-js-yaml.mdx +32 -0
  152. package/docs/snippets/tests/exec-shell-replay.mdx +7 -0
  153. package/docs/snippets/tests/exec-shell-yaml.mdx +15 -0
  154. package/docs/snippets/tests/hover-image-replay.mdx +7 -0
  155. package/docs/snippets/tests/hover-image-yaml.mdx +17 -0
  156. package/docs/snippets/tests/hover-text-replay.mdx +7 -0
  157. package/docs/snippets/tests/hover-text-with-description-replay.mdx +7 -0
  158. package/docs/snippets/tests/hover-text-with-description-yaml.mdx +24 -0
  159. package/docs/snippets/tests/hover-text-yaml.mdx +14 -0
  160. package/docs/snippets/tests/match-image-replay.mdx +7 -0
  161. package/docs/snippets/tests/match-image-yaml.mdx +17 -0
  162. package/docs/snippets/tests/press-keys-replay.mdx +7 -0
  163. package/docs/snippets/tests/press-keys-yaml.mdx +36 -0
  164. package/docs/snippets/tests/remember-replay.mdx +7 -0
  165. package/docs/snippets/tests/remember-yaml.mdx +28 -0
  166. package/docs/snippets/tests/scroll-replay.mdx +7 -0
  167. package/docs/snippets/tests/scroll-until-image-replay.mdx +7 -0
  168. package/docs/snippets/tests/scroll-until-image-yaml.mdx +14 -0
  169. package/docs/snippets/tests/scroll-until-text-replay.mdx +7 -0
  170. package/docs/snippets/tests/scroll-until-text-yaml.mdx +17 -0
  171. package/docs/snippets/tests/scroll-yaml.mdx +30 -0
  172. package/docs/snippets/tests/type-repeated-replay.mdx +7 -0
  173. package/docs/snippets/tests/type-repeated-yaml.mdx +22 -0
  174. package/docs/snippets/tests/type-replay.mdx +7 -0
  175. package/docs/snippets/tests/type-yaml.mdx +28 -0
  176. package/docs/snippets/tests/wait-for-image-replay.mdx +7 -0
  177. package/docs/snippets/tests/wait-for-image-yaml.mdx +18 -0
  178. package/docs/snippets/tests/wait-for-text-replay.mdx +7 -0
  179. package/docs/snippets/tests/wait-for-text-yaml.mdx +18 -0
  180. package/docs/snippets/tests/wait-replay.mdx +7 -0
  181. package/docs/snippets/tests/wait-yaml.mdx +13 -0
  182. package/docs/styles.css +65 -0
  183. package/docs/v6/account/dashboard.mdx +16 -0
  184. package/docs/v6/account/enterprise.mdx +110 -0
  185. package/docs/v6/account/pricing.mdx +33 -0
  186. package/docs/v6/account/projects.mdx +33 -0
  187. package/docs/v6/account/team.mdx +35 -0
  188. package/docs/v6/action/ami.mdx +109 -0
  189. package/docs/v6/action/performance.mdx +105 -0
  190. package/docs/v6/action/secrets.mdx +93 -0
  191. package/docs/v6/apps/chrome-extensions.mdx +48 -0
  192. package/docs/v6/apps/desktop-apps.mdx +93 -0
  193. package/docs/v6/apps/mobile-apps.mdx +26 -0
  194. package/docs/v6/apps/static-websites.mdx +54 -0
  195. package/docs/v6/apps/tauri-apps.mdx +361 -0
  196. package/docs/v6/bugs/jira.mdx +232 -0
  197. package/docs/v6/cli/overview.mdx +66 -0
  198. package/docs/v6/commands/assert.mdx +45 -0
  199. package/docs/v6/commands/exec.mdx +276 -0
  200. package/docs/v6/commands/focus-application.mdx +44 -0
  201. package/docs/v6/commands/hover-image.mdx +69 -0
  202. package/docs/v6/commands/hover-text.mdx +47 -0
  203. package/docs/v6/commands/if.mdx +53 -0
  204. package/docs/v6/commands/match-image.mdx +67 -0
  205. package/docs/v6/commands/press-keys.mdx +87 -0
  206. package/docs/v6/commands/remember.mdx +49 -0
  207. package/docs/v6/commands/run.mdx +44 -0
  208. package/docs/v6/commands/scroll-until-image.mdx +66 -0
  209. package/docs/v6/commands/scroll-until-text.mdx +60 -0
  210. package/docs/v6/commands/scroll.mdx +69 -0
  211. package/docs/v6/commands/type.mdx +45 -0
  212. package/docs/v6/commands/wait-for-image.mdx +54 -0
  213. package/docs/v6/commands/wait-for-text.mdx +48 -0
  214. package/docs/v6/commands/wait.mdx +45 -0
  215. package/docs/v6/exporting/junit.mdx +218 -0
  216. package/docs/v6/exporting/playwright.mdx +197 -0
  217. package/docs/v6/features/auto-healing.mdx +144 -0
  218. package/docs/v6/features/generation.mdx +116 -0
  219. package/docs/v6/features/parallel-testing.mdx +151 -0
  220. package/docs/v6/features/reusable-snippets.mdx +131 -0
  221. package/docs/v6/features/selectorless.mdx +80 -0
  222. package/docs/v6/features/visual-assertions.mdx +139 -0
  223. package/docs/v6/getting-started/ci.mdx +146 -0
  224. package/docs/v6/getting-started/cli.mdx +91 -0
  225. package/docs/v6/getting-started/editing.mdx +100 -0
  226. package/docs/v6/getting-started/playwright.mdx +342 -0
  227. package/docs/v6/getting-started/running.mdx +48 -0
  228. package/docs/v6/getting-started/self-hosting.mdx +408 -0
  229. package/docs/v6/getting-started/vscode.mdx +88 -0
  230. package/docs/v6/guide/assertions.mdx +189 -0
  231. package/docs/v6/guide/authentication.mdx +136 -0
  232. package/docs/v6/guide/code.mdx +65 -0
  233. package/docs/v6/guide/dashcam.mdx +118 -0
  234. package/docs/v6/guide/environment-variables.mdx +26 -0
  235. package/docs/v6/guide/lifecycle.mdx +242 -0
  236. package/docs/v6/guide/locating.mdx +141 -0
  237. package/docs/v6/guide/protips.mdx +43 -0
  238. package/docs/v6/guide/variables.mdx +143 -0
  239. package/docs/v6/guide/waiting.mdx +130 -0
  240. package/docs/v6/importing/csv.mdx +196 -0
  241. package/docs/v6/importing/gherkin.mdx +143 -0
  242. package/docs/v6/importing/jira.mdx +164 -0
  243. package/docs/v6/importing/testrail.mdx +162 -0
  244. package/docs/v6/integrations/electron.mdx +146 -0
  245. package/docs/v6/integrations/netlify.mdx +100 -0
  246. package/docs/v6/integrations/vercel.mdx +125 -0
  247. package/docs/v6/interactive/explore.mdx +99 -0
  248. package/docs/v6/interactive/run.mdx +52 -0
  249. package/docs/v6/interactive/save.mdx +63 -0
  250. package/docs/v6/overview/comparison.mdx +101 -0
  251. package/docs/v6/overview/faq.mdx +162 -0
  252. package/docs/v6/overview/performance.mdx +52 -0
  253. package/docs/v6/overview/quickstart.mdx +137 -0
  254. package/docs/v6/overview/what-is-testdriver.mdx +85 -0
  255. package/docs/v6/scenarios/ai-chatbot.mdx +28 -0
  256. package/docs/v6/scenarios/cookie-banner.mdx +32 -0
  257. package/docs/v6/scenarios/file-upload.mdx +33 -0
  258. package/docs/v6/scenarios/form-filling.mdx +32 -0
  259. package/docs/v6/scenarios/log-in.mdx +75 -0
  260. package/docs/v6/scenarios/pdf-generation.mdx +25 -0
  261. package/docs/v6/scenarios/spell-check.mdx +22 -0
  262. package/docs/v6/security/action.mdx +84 -0
  263. package/docs/v6/security/agent.mdx +73 -0
  264. package/docs/v6/security/platform.mdx +77 -0
  265. package/docs/v6/tutorials/advanced-test.mdx +81 -0
  266. package/docs/v6/tutorials/basic-test.mdx +45 -0
  267. package/docs/v7/_drafts/agents.mdx +843 -0
  268. package/docs/v7/_drafts/architecture.mdx +399 -0
  269. package/docs/v7/_drafts/auto-cache-key.mdx +167 -0
  270. package/docs/v7/_drafts/awesome-logs-quick-ref.mdx +100 -0
  271. package/docs/v7/_drafts/best-practices.mdx +486 -0
  272. package/docs/v7/_drafts/caching-ai.mdx +215 -0
  273. package/docs/v7/_drafts/caching-selectors.mdx +424 -0
  274. package/docs/v7/_drafts/caching.mdx +366 -0
  275. package/docs/v7/_drafts/cli-to-sdk-migration.mdx +425 -0
  276. package/docs/v7/_drafts/commands/assert.mdx +45 -0
  277. package/docs/v7/_drafts/commands/exec.mdx +276 -0
  278. package/docs/v7/_drafts/commands/focus-application.mdx +44 -0
  279. package/docs/v7/_drafts/commands/hover-image.mdx +69 -0
  280. package/docs/v7/_drafts/commands/hover-text.mdx +47 -0
  281. package/docs/v7/_drafts/commands/if.mdx +53 -0
  282. package/docs/v7/_drafts/commands/match-image.mdx +67 -0
  283. package/docs/v7/_drafts/commands/press-keys.mdx +87 -0
  284. package/docs/v7/_drafts/commands/remember.mdx +49 -0
  285. package/docs/v7/_drafts/commands/run.mdx +44 -0
  286. package/docs/v7/_drafts/commands/scroll-until-image.mdx +66 -0
  287. package/docs/v7/_drafts/commands/scroll-until-text.mdx +60 -0
  288. package/docs/v7/_drafts/commands/scroll.mdx +69 -0
  289. package/docs/v7/_drafts/commands/type.mdx +45 -0
  290. package/docs/v7/_drafts/commands/wait-for-image.mdx +54 -0
  291. package/docs/v7/_drafts/commands/wait-for-text.mdx +48 -0
  292. package/docs/v7/_drafts/commands/wait.mdx +45 -0
  293. package/docs/v7/_drafts/configuration.mdx +378 -0
  294. package/docs/v7/_drafts/contributing.mdx +174 -0
  295. package/docs/v7/_drafts/core.mdx +458 -0
  296. package/docs/v7/_drafts/dashcam-title-feature.mdx +89 -0
  297. package/docs/v7/_drafts/debugging.mdx +349 -0
  298. package/docs/v7/_drafts/error-handling.mdx +501 -0
  299. package/docs/v7/_drafts/faq.mdx +393 -0
  300. package/docs/v7/_drafts/hooks.mdx +360 -0
  301. package/docs/v7/_drafts/init-command.mdx +95 -0
  302. package/docs/v7/_drafts/installation.mdx +420 -0
  303. package/docs/v7/_drafts/migration.mdx +562 -0
  304. package/docs/v7/_drafts/observable.mdx +604 -0
  305. package/docs/v7/_drafts/playwright.mdx +342 -0
  306. package/docs/v7/_drafts/plugin-migration.mdx +220 -0
  307. package/docs/v7/_drafts/powerful.mdx +419 -0
  308. package/docs/v7/_drafts/presets.mdx +210 -0
  309. package/docs/v7/_drafts/progressive-disclosure.mdx +230 -0
  310. package/docs/v7/_drafts/prompt-cache.mdx +200 -0
  311. package/docs/v7/_drafts/provision.mdx +390 -0
  312. package/docs/v7/_drafts/quick-start-test-recording.mdx +214 -0
  313. package/docs/v7/_drafts/readme.mdx +135 -0
  314. package/docs/v7/_drafts/reports.mdx +414 -0
  315. package/docs/v7/_drafts/scalable.mdx +763 -0
  316. package/docs/v7/_drafts/screenshot.mdx +155 -0
  317. package/docs/v7/_drafts/sdk-awesome-logs.mdx +468 -0
  318. package/docs/v7/_drafts/sdk-browser-rendering.mdx +167 -0
  319. package/docs/v7/_drafts/sdk-migration.mdx +474 -0
  320. package/docs/v7/_drafts/sdk-v7-complete.mdx +345 -0
  321. package/docs/v7/_drafts/self-hosting.mdx +369 -0
  322. package/docs/v7/_drafts/test-recording.mdx +382 -0
  323. package/docs/v7/_drafts/troubleshooting.mdx +526 -0
  324. package/docs/v7/_drafts/vitest-plugin.mdx +477 -0
  325. package/docs/v7/_drafts/vitest.mdx +535 -0
  326. package/docs/v7/_drafts/writing-tests.mdx +25 -0
  327. package/docs/v7/ai.mdx +205 -0
  328. package/docs/v7/assert.mdx +316 -0
  329. package/docs/v7/aws-setup.mdx +449 -0
  330. package/docs/v7/cache.mdx +223 -0
  331. package/docs/v7/caching.mdx +128 -0
  332. package/docs/v7/captcha.mdx +159 -0
  333. package/docs/v7/ci-cd.mdx +603 -0
  334. package/docs/v7/click.mdx +287 -0
  335. package/docs/v7/client.mdx +478 -0
  336. package/docs/v7/copilot/auto-healing.mdx +265 -0
  337. package/docs/v7/copilot/creating-tests.mdx +156 -0
  338. package/docs/v7/copilot/github.mdx +143 -0
  339. package/docs/v7/copilot/running-tests.mdx +149 -0
  340. package/docs/v7/copilot/setup.mdx +143 -0
  341. package/docs/v7/customizing-devices.mdx +319 -0
  342. package/docs/v7/dashcam.mdx +419 -0
  343. package/docs/v7/debugging-with-screenshots.mdx +402 -0
  344. package/docs/v7/device-config.mdx +317 -0
  345. package/docs/v7/double-click.mdx +102 -0
  346. package/docs/v7/elements.mdx +606 -0
  347. package/docs/v7/enterprise.mdx +9 -0
  348. package/docs/v7/errors.mdx +248 -0
  349. package/docs/v7/events.mdx +358 -0
  350. package/docs/v7/examples/ai.mdx +72 -0
  351. package/docs/v7/examples/assert.mdx +72 -0
  352. package/docs/v7/examples/captcha-api.mdx +92 -0
  353. package/docs/v7/examples/chrome-extension.mdx +132 -0
  354. package/docs/v7/examples/drag-and-drop.mdx +100 -0
  355. package/docs/v7/examples/element-not-found.mdx +67 -0
  356. package/docs/v7/examples/exec-output.mdx +85 -0
  357. package/docs/v7/examples/exec-pwsh.mdx +83 -0
  358. package/docs/v7/examples/focus-window.mdx +62 -0
  359. package/docs/v7/examples/hover-image.mdx +94 -0
  360. package/docs/v7/examples/hover-text.mdx +69 -0
  361. package/docs/v7/examples/installer.mdx +91 -0
  362. package/docs/v7/examples/launch-vscode-linux.mdx +101 -0
  363. package/docs/v7/examples/match-image.mdx +96 -0
  364. package/docs/v7/examples/press-keys.mdx +92 -0
  365. package/docs/v7/examples/scroll-keyboard.mdx +79 -0
  366. package/docs/v7/examples/scroll-until-image.mdx +81 -0
  367. package/docs/v7/examples/scroll-until-text.mdx +109 -0
  368. package/docs/v7/examples/scroll.mdx +81 -0
  369. package/docs/v7/examples/type.mdx +92 -0
  370. package/docs/v7/examples/windows-installer.mdx +89 -0
  371. package/docs/v7/exec.mdx +318 -0
  372. package/docs/v7/find.mdx +830 -0
  373. package/docs/v7/focus-application.mdx +294 -0
  374. package/docs/v7/generating-tests.mdx +36 -0
  375. package/docs/v7/hosted.mdx +158 -0
  376. package/docs/v7/hover.mdx +279 -0
  377. package/docs/v7/locating-elements.mdx +71 -0
  378. package/docs/v7/making-assertions.mdx +32 -0
  379. package/docs/v7/mcp.mdx +9 -0
  380. package/docs/v7/mouse-down.mdx +161 -0
  381. package/docs/v7/mouse-up.mdx +164 -0
  382. package/docs/v7/parse.mdx +237 -0
  383. package/docs/v7/performing-actions.mdx +54 -0
  384. package/docs/v7/press-keys.mdx +349 -0
  385. package/docs/v7/provision.mdx +333 -0
  386. package/docs/v7/quickstart.mdx +173 -0
  387. package/docs/v7/redraw.mdx +216 -0
  388. package/docs/v7/reusable-code.mdx +249 -0
  389. package/docs/v7/right-click.mdx +123 -0
  390. package/docs/v7/running-tests.mdx +185 -0
  391. package/docs/v7/screenshot.mdx +249 -0
  392. package/docs/v7/screenshots.mdx +186 -0
  393. package/docs/v7/scroll.mdx +336 -0
  394. package/docs/v7/secrets.mdx +115 -0
  395. package/docs/v7/self-hosted.mdx +149 -0
  396. package/docs/v7/type.mdx +358 -0
  397. package/docs/v7/variables.mdx +111 -0
  398. package/docs/v7/wait.mdx +52 -0
  399. package/docs/v7/waiting-for-elements.mdx +90 -0
  400. package/docs/v7/what-is-testdriver.mdx +54 -0
  401. package/eslint.config.js +67 -0
  402. package/examples/ai.test.mjs +31 -0
  403. package/examples/assert.test.mjs +47 -0
  404. package/examples/chrome-extension.test.mjs +97 -0
  405. package/examples/config.mjs +5 -0
  406. package/examples/element-not-found.test.mjs +27 -0
  407. package/examples/exec-output.test.mjs +60 -0
  408. package/examples/exec-pwsh.test.mjs +58 -0
  409. package/examples/findall-coffee-icons.test.mjs +42 -0
  410. package/examples/focus-window.test.mjs +37 -0
  411. package/examples/formatted-logging.test.mjs +27 -0
  412. package/examples/hover-image.test.mjs +53 -0
  413. package/examples/hover-text-with-description.test.mjs +57 -0
  414. package/examples/hover-text.test.mjs +28 -0
  415. package/examples/installer.test.mjs +50 -0
  416. package/examples/launch-vscode-linux.test.mjs +55 -0
  417. package/examples/match-image.test.mjs +55 -0
  418. package/examples/parse.test.mjs +19 -0
  419. package/examples/press-keys.test.mjs +44 -0
  420. package/examples/prompt.test.mjs +34 -0
  421. package/examples/scroll-keyboard.test.mjs +38 -0
  422. package/examples/scroll-until-image.test.mjs +40 -0
  423. package/examples/scroll.test.mjs +42 -0
  424. package/examples/type.test.mjs +46 -0
  425. package/examples/windows-installer.test.mjs +54 -0
  426. package/index.js +2 -0
  427. package/interfaces/cli/commands/init.js +438 -0
  428. package/interfaces/cli/commands/setup.js +382 -0
  429. package/interfaces/cli/lib/base.js +285 -0
  430. package/interfaces/cli.js +20 -0
  431. package/interfaces/junit-reporter.js +290 -0
  432. package/interfaces/logger.js +388 -0
  433. package/interfaces/readline.js +234 -0
  434. package/interfaces/shared-test-state.mjs +64 -0
  435. package/interfaces/vitest-plugin.d.ts +115 -0
  436. package/interfaces/vitest-plugin.mjs +1698 -0
  437. package/lib/captcha/solver.js +358 -0
  438. package/lib/core/Dashcam.js +533 -0
  439. package/lib/core/index.d.ts +172 -0
  440. package/lib/core/index.js +12 -0
  441. package/lib/environments.json +18 -0
  442. package/lib/github-comment-formatter.js +263 -0
  443. package/lib/github-comment.mjs +452 -0
  444. package/lib/init-project.js +575 -0
  445. package/lib/presets/index.mjs +331 -0
  446. package/lib/resolve-channel.js +46 -0
  447. package/lib/sentry.js +417 -0
  448. package/lib/vitest/hooks.d.ts +57 -0
  449. package/lib/vitest/hooks.mjs +674 -0
  450. package/lib/vitest/setup-aws.mjs +247 -0
  451. package/lib/vitest/setup-self-hosted.mjs +151 -0
  452. package/lib/vitest/setup.mjs +46 -0
  453. package/manual/captcha-api.test.mjs +51 -0
  454. package/manual/drag-and-drop.test.mjs +59 -0
  455. package/manual/flake-diffthreshold-001.test.mjs +9 -0
  456. package/manual/flake-diffthreshold-01.test.mjs +9 -0
  457. package/manual/flake-diffthreshold-05.test.mjs +9 -0
  458. package/manual/flake-noredraw-cache.test.mjs +9 -0
  459. package/manual/flake-noredraw-nocache.test.mjs +9 -0
  460. package/manual/flake-redraw-cache.test.mjs +9 -0
  461. package/manual/flake-redraw-nocache.test.mjs +9 -0
  462. package/manual/flake-rocket-match.test.mjs +30 -0
  463. package/manual/flake-shared.mjs +51 -0
  464. package/manual/no-provision.test.mjs +31 -0
  465. package/manual/packer-hover-image.test.mjs +176 -0
  466. package/manual/scroll-until-text.test.mjs +68 -0
  467. package/manual/test-init-command.js +223 -0
  468. package/mcp-server/README.md +322 -0
  469. package/mcp-server/dist/codegen.d.ts +9 -0
  470. package/mcp-server/dist/codegen.js +165 -0
  471. package/mcp-server/dist/mcp-app.html +114 -0
  472. package/mcp-server/dist/package.json +1 -0
  473. package/mcp-server/dist/provision-types.d.ts +290 -0
  474. package/mcp-server/dist/provision-types.js +174 -0
  475. package/mcp-server/dist/server.d.ts +6 -0
  476. package/mcp-server/dist/server.mjs +1925 -0
  477. package/mcp-server/dist/session.d.ts +85 -0
  478. package/mcp-server/dist/session.js +152 -0
  479. package/mcp-server/mcp-app.html +28 -0
  480. package/mcp-server/mcp-config.example.json +19 -0
  481. package/mcp-server/package-lock.json +4027 -0
  482. package/mcp-server/package.json +31 -0
  483. package/mcp-server/src/codegen.ts +189 -0
  484. package/mcp-server/src/mcp-app.css +360 -0
  485. package/mcp-server/src/mcp-app.ts +547 -0
  486. package/mcp-server/src/provision-types.ts +209 -0
  487. package/mcp-server/src/server.ts +2391 -0
  488. package/mcp-server/src/session.ts +194 -0
  489. package/mcp-server/tsconfig.json +16 -0
  490. package/mcp-server/vite.config.ts +23 -0
  491. package/package.json +158 -0
  492. package/schema.json +1046 -0
  493. package/scripts/generate-skills.js +94 -0
  494. package/sdk-log-formatter.js +1157 -0
  495. package/sdk.d.ts +1486 -0
  496. package/sdk.js +4336 -0
  497. package/setup/aws/cloudformation.yaml +463 -0
  498. package/setup/aws/disable-defender.sh +42 -0
  499. package/setup/aws/install-dev-runner.sh +79 -0
  500. package/setup/aws/spawn-runner.sh +289 -0
  501. package/test/captcha-solver.test.mjs +152 -0
  502. package/test/chrome-remote-debugging.test.mjs +66 -0
  503. package/test/duckduckgo/experiment.test.mjs +28 -0
  504. package/test/duckduckgo/setup.test.mjs +29 -0
  505. package/test/manual/debug-locate-response.js +82 -0
  506. package/test/manual/reconnect-provision.test.mjs +49 -0
  507. package/test/manual/test-console-logs.test.mjs +42 -0
  508. package/test/manual/test-find-api.js +73 -0
  509. package/test/manual/test-init.sh +54 -0
  510. package/test/manual/test-prompt-cache.js +97 -0
  511. package/test/manual/test-provision-auth.mjs +22 -0
  512. package/test/manual/test-sandbox-render.js +29 -0
  513. package/test/manual/test-sdk-methods.js +15 -0
  514. package/test/manual/test-sdk-refactor.js +53 -0
  515. package/test/manual/test-stack-trace.mjs +57 -0
  516. package/test/manual/verify-element-api.js +89 -0
  517. package/test/manual/verify-types.js +0 -0
  518. package/test/manual-unawaited-promise.test.mjs +31 -0
  519. package/vitest.config.mjs +58 -0
  520. package/vitest.runner.config.mjs +33 -0
  521. package/vscode-extension/.vscodeignore +12 -0
  522. package/vscode-extension/README.md +94 -0
  523. package/vscode-extension/media/icon.png +0 -0
  524. package/vscode-extension/package-lock.json +4126 -0
  525. package/vscode-extension/package.json +86 -0
  526. package/vscode-extension/src/extension.ts +829 -0
  527. package/vscode-extension/testdriverai-0.1.0.vsix +0 -0
  528. package/vscode-extension/tsconfig.json +16 -0
@@ -0,0 +1,136 @@
1
+ ---
2
+ title: "Authentication"
3
+ sidebarTitle: "Authentication"
4
+ description: "Learn how to handle authentication workflows in TestDriver using GitHub Actions."
5
+ icon: "key"
6
+ ---
7
+
8
+ This guide explains how to handle **authentication workflows** in **TestDriver** using GitHub Actions. It covers securely passing credentials (for example, usernames and passwords) to the TestDriver action and using them in both the `prerun` script and test files. Save these locally in your `.env` file and use them in CI as GitHub secrets.
9
+
10
+ <GitignoreWarning />
11
+
12
+ ---
13
+
14
+ ## How authentication works in TestDriver
15
+
16
+ 1. **Store Credentials Securely**:
17
+
18
+ - Use GitHub Secrets to store sensitive information like usernames, passwords, or API keys.
19
+
20
+ 2. **Pass Credentials to the Workflow**:
21
+
22
+ - Supply credentials as environment variables or directly in the workflow.
23
+
24
+ 3. **Use Credentials in Tests**:
25
+
26
+ - Dynamically reference credentials in the `prerun` script or test files to perform authentication steps.
27
+
28
+ ## Step 1: Store credentials in GitHub secrets
29
+
30
+ 1. Navigate to your repository's **Settings** > **Secrets and variables** > **Actions**.
31
+ 2. Add the following secrets:
32
+ - **`TD_USERNAME`**: The username for login.
33
+ - **`TD_PASSWORD`**: The password for login.
34
+ - **`TD_API_KEY`**: Your TestDriver API key.
35
+ - **`TD_WEBSITE`**: The URL of the website to test.
36
+
37
+ ## Step 2: Pass credentials to the workflow
38
+
39
+ Secrets are passed to the workflow using the `secrets` context. They can be supplied as:
40
+
41
+ - **Environment Variables**: Passed via the `env` block.
42
+ - **Inline in the `prerun` Script**: Used directly in the script.
43
+
44
+ ### Example GitHub Actions workflow (adapt for your CI/CD platform)
45
+
46
+ ```yaml workflows/td-auth.yml focus={17-24}
47
+ name: TestDriver / Authentication
48
+
49
+ on:
50
+ push:
51
+ branches:
52
+ - main
53
+ pull_request:
54
+ workflow_dispatch:
55
+
56
+ jobs:
57
+ test-authentication:
58
+ name: Test Authentication
59
+ steps:
60
+ - name: Check out repository
61
+ uses: actions/checkout@v4
62
+
63
+ - name: Run Authentication Test
64
+ run: npx testdriverai@latest run testdriver/authentication.yaml
65
+ env:
66
+ TD_API_KEY: ${{ secrets.TD_API_KEY }}
67
+ TD_USERNAME: ${{ secrets.TD_USERNAME }}
68
+ TD_PASSWORD: ${{ secrets.TD_PASSWORD }}
69
+ TD_WEBSITE: ${{ secrets.TD_WEBSITE }}
70
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
71
+ FORCE_COLOR: "3"
72
+ ```
73
+
74
+ ## Step 3: Use credentials in test files
75
+
76
+ Secrets can be referenced in the test file using placeholders (for example, `${TD_USERNAME}` and `${TD_PASSWORD}`).
77
+
78
+ ### Example test file:
79
+
80
+ ```yaml login.yaml highlight={9, 10, 15, 16}
81
+ version: 6.0.0
82
+ steps:
83
+ - prompt: Log in to the application
84
+ commands:
85
+ - command: hover-text
86
+ text: Email
87
+ description: Email input field
88
+ action: click
89
+ - command: type
90
+ text: ${TD_USERNAME}
91
+ - command: hover-text
92
+ text: Password
93
+ description: Password input field
94
+ action: click
95
+ - command: type
96
+ text: ${TD_PASSWORD}
97
+ - command: hover-text
98
+ text: Log In
99
+ description: Log In button
100
+ action: click
101
+ - command: assert
102
+ expect: The dashboard is displayed
103
+ ```
104
+
105
+ ## How it works together
106
+
107
+ 1. **Secrets in the Workflow**:
108
+
109
+ - Secrets like `TD_USERNAME` and `TD_PASSWORD` are passed as environment variables to the TestDriver action.
110
+
111
+ 2. **Secrets in the `prerun` Script**:
112
+
113
+ - The `TD_WEBSITE` secret is used to launch the browser with the correct URL.
114
+
115
+ 3. **Secrets in the Test File**:
116
+
117
+ - The test file dynamically references the secrets to fill in login credentials during the test.
118
+
119
+ ## Benefits of using authentication in TestDriver
120
+
121
+ 1. **Secure Handling of Credentials**:
122
+
123
+ - Secrets are encrypted and not exposed in logs.
124
+ - Even if printed, they appear as `***`.
125
+
126
+ 2. **Dynamic Testing**:
127
+
128
+ - Easily switch between different environments (for example, staging, production) by updating the secrets.
129
+
130
+ 3. **Reusability**:
131
+
132
+ - Use the same workflow and test files across multiple repositories or environments.
133
+
134
+ ---
135
+
136
+ By securely passing credentials and using them in the `prerun` script and test files, you can automate authentication workflows in TestDriver while ensuring sensitive information remains protected.
@@ -0,0 +1,65 @@
1
+ ---
2
+ title: "Custom Code in TestDriver"
3
+ sidebarTitle: "Custom Code"
4
+ description: "Learn how to integrate custom Node.js scripts into your TestDriver workflows for dynamic testing."
5
+ icon: "code"
6
+ ---
7
+
8
+ TestDriver allows you to execute custom **Node.js** scripts and shell scripts within your test workflows using the [`exec`](/commands/exec) command. This feature, introduced in version `5.1.0`, enables you to integrate custom logic, such as generating one-time passwords (OTPs), hitting APIs, or performing other dynamic operations, directly into your tests.
9
+
10
+ ## Key features
11
+
12
+ 1. **Run Node.js Scripts**:
13
+
14
+ - Execute custom JavaScript code within your test steps.
15
+ - Use NPM modules to extend functionality.
16
+
17
+ 2. **Dynamic Outputs**:
18
+
19
+ - Store the result of your script in a variable for use in subsequent steps.
20
+
21
+ 3. **NPM Support**:
22
+
23
+ - Install and use NPM packages in your scripts.
24
+
25
+ ## Updated example: One-time password (OTP) validator
26
+
27
+ This example demonstrates how to generate a one-time password (OTP) using the `totp-generator` NPM package and use it in a test.
28
+
29
+ ```yaml verify-otp.yaml
30
+ version: 6.0.0
31
+ steps:
32
+ - commands:
33
+ - command: exec
34
+ lang: pwsh
35
+ code: |
36
+ npm install totp-generator
37
+ - command: exec
38
+ lang: js
39
+ output: totp
40
+ code: |
41
+ const { TOTP } = require("totp-generator");
42
+ let otp = TOTP.generate("JBSWY3DPEB3W64TMMQQQ").otp;
43
+ console.log(otp);
44
+ result = otp;
45
+ - command: type
46
+ text: ${OUTPUT.totp}
47
+ ```
48
+
49
+ ## Additional details
50
+
51
+ - The [`exec`](/commands/exec) command now takes a `lang` argument with supported values `js` or `pwsh`.
52
+ - `js` code is executed in a Node.js [VM](https://nodejs.org/api/vm.html) module internally.
53
+ - `pwsh` code is executed in the PowerShell on the runner.
54
+
55
+ <Note>
56
+ The `result` variable is already available in your script, overwrite it to store the output as shown in the example.
57
+
58
+ The `output`argument is assigned automatically by setting `result = somestringvalue` in the script you run.
59
+
60
+ </Note>
61
+
62
+ ## Protips
63
+
64
+ - Always assign the output of your script to the `result` variable.
65
+ - Ensure all required NPM packages are installed locally and in the `prerun` script when using GitHub Actions.
@@ -0,0 +1,118 @@
1
+ ---
2
+ title: "Dashcam Replays"
3
+ sidebarTitle: "Dashcam"
4
+ description: "Learn how to use Dashcam to record and replay test sessions in TestDriver."
5
+ icon: "video"
6
+ ---
7
+
8
+ [Dashcam](https://www.dashcam.io), from the makers of TestDriver, is a powerful feature in TestDriver that allows you to record and replay your test sessions. This is particularly useful for debugging, sharing test runs with team members, or reviewing the steps taken during a test. For the full docs see the [Dashcam docs](https://docs.dashcam.io/dashcam/).
9
+
10
+ ## Recording a Test Session
11
+
12
+ To record a test session, you can use the `dashcam` command in your lifecycle scripts. There are two main lifecycle scripts where you can integrate Dashcam: `lifecycle/prerun.yaml` and `lifecycle/postrun.yaml`.
13
+
14
+ ## Ways to use Dashcam
15
+
16
+ Dashcam comes as a standalone app and a Chrome extension. You can use either or both to capture your test sessions.
17
+
18
+ <Info>
19
+ To capture web logs, make sure to install the Dashcam Chrome extension on the
20
+ browser you are testing with. We recommend installing it via CLI to Chrome for
21
+ Testing. You can also find the extension [in the Chrome
22
+ Webstore](https://chromewebstore.google.com/detail/dashcam/dkcoeknmlfnfimigfagbcjgpokhdcbbp)
23
+ </Info>
24
+
25
+ ### Installing the Dashcam Chrome extension via command line in prerun.yaml
26
+
27
+ In this lifecycle script, we install Chrome for Testing with a user profile that has the password manager disabled and sets up TestDriver Dashcam for replays and logs.
28
+
29
+ ```yaml lifecycle/prerun.yaml [expandable]
30
+ - prompt: launch chrome for testing and setup dashcam
31
+ commands:
32
+ # this script installs chrome for testing with a userprofile that has password manager disabled and sets up TestDriver Dashcam for replays and logs
33
+ - command: exec
34
+ lang: pwsh
35
+ code: |
36
+ cd $env:TEMP
37
+ Write-Host "Changed directory to TEMP: $env:TEMP"
38
+
39
+ Write-Host "Running 'npm init -y'..."
40
+ npm init -y
41
+
42
+ Write-Host "Installing dependencies: @puppeteer/browsers and dashcam-chrome..."
43
+ npm install @puppeteer/browsers dashcam-chrome
44
+
45
+ Write-Host "Installing Chromium via '@puppeteer/browsers'..."
46
+ npx @puppeteer/browsers install chrome
47
+
48
+ # Define paths
49
+ $extensionPath = Join-Path (Get-Location) "node_modules/dashcam-chrome/build"
50
+ $profilePath = Join-Path $env:TEMP "chrome-profile-$(Get-Random)"
51
+
52
+ Write-Host "Extension path: $extensionPath"
53
+ Write-Host "Chrome user data dir: $profilePath"
54
+
55
+ # Validate extension path
56
+ if (-not (Test-Path $extensionPath)) {
57
+ Write-Host "Extension not found at $extensionPath"
58
+ }
59
+
60
+ $chromeArgs = @(
61
+ "--start-maximized",
62
+ "--load-extension=$extensionPath",
63
+ "--user-data-dir=$profilePath",
64
+ "--no-first-run",
65
+ "--no-default-browser-check",
66
+ "--disable-infobars"
67
+ "${TD_WEBSITE}"
68
+ ) -join ' '
69
+
70
+ Start-Process "cmd.exe" -ArgumentList "/c", "npx @puppeteer/browsers launch chrome -- $chromeArgs"
71
+
72
+ Write-Host "Script complete."
73
+ exit 0
74
+ ```
75
+
76
+ ### Using the Chrome extension and capturing web logs
77
+
78
+ Now in the same `lifecycle/prerun.yaml` script, we set up Dashcam to track web logs and application logs. You can customize the patterns to match your needs. Testing Desktop? You can skip the web logs and just track application logs.
79
+
80
+ ```yaml lifecycle/prerun.yaml
81
+ ...
82
+ - command: exec
83
+ lang: pwsh
84
+ code: |
85
+ dashcam track --name="Web Logs" --type="web" --pattern="*"
86
+ dashcam track --name=TestDriver --type=app --pattern="C:\Users\testdriver\Documents\testdriver.log"
87
+ ```
88
+
89
+ ### Starting Dashcam
90
+
91
+ The final step in our `lifecycle/prerun.yaml` script is to start Dashcam recording.
92
+
93
+ ```yaml lifecycle/prerun.yaml
94
+ ...
95
+ - command: exec
96
+ lang: pwsh
97
+ code: dashcam start
98
+ ```
99
+
100
+ ### Publishing replays to a project in your account
101
+
102
+ Lastly, in the `lifecycle/postrun.yaml` script, we publish the recorded Dashcam session to a project in your Dashcam account. Make sure to replace `<YOUR_PROJECT_ID>` with the actual ID of your project.
103
+
104
+ ```yaml lifecycle/postrun.yaml
105
+ - prompt: send dashcam recording to server
106
+ # this script tells TestDriver Dashcam to send the recording to the server
107
+ commands:
108
+ - command: exec
109
+ lang: pwsh
110
+ code: dashcam -t '${TD_THIS_FILE}' -p -k <YOUR_PROJECT_ID> # optional add `-k MYFOLDERID` for the id of a folder in your Projects page at app.testdriver.ai
111
+ ```
112
+
113
+ <Info>
114
+ `${TD_THIS_FILE}` is an environment variable set by TestDriver that contains
115
+ the name of the current test file being executed. This will be used as the
116
+ title of the Dashcam recording. For more info see [parallel testing
117
+ docs](/features/parallel-testing).
118
+ </Info>
@@ -0,0 +1,26 @@
1
+ ---
2
+ title: "Environment Variables"
3
+ sidebarTitle: "Environment Variables"
4
+ description: "Learn how which environment variables are supported by TestDriver."
5
+ icon: "sliders-up"
6
+ mode: "wide"
7
+ ---
8
+
9
+ import GitignoreWarning from "/snippets/gitignore-warning.mdx";
10
+
11
+ The supported environment variables in TestDriver are:
12
+
13
+ <div className="env-vars-table">
14
+ | Variable | Type | Description |
15
+ |:---------------:|:------------:|:-------------------------------------------------------------------------------:|
16
+ | `TD_ANALYTICS` | `boolean` | Send analytics to TestDriver servers. This helps provide feedback to inform our roadmap. |
17
+ | `TD_API_KEY` | `string` | Set this to spawn VMs with TestDriver Pro. |
18
+ </div>
19
+ <GitignoreWarning />
20
+ ## Example
21
+
22
+ ```bash .env
23
+ TD_API_KEY=your_api_key
24
+ ```
25
+
26
+ In this example `.env` file, we're running a website test in a local Linux VM with a resolution of 1024x768. The terminal will be minimized, and the overlay won't be shown. Analytics will be sent to TestDriver servers.
@@ -0,0 +1,242 @@
1
+ ---
2
+ title: "Lifecycle Files"
3
+ sidebarTitle: "Lifecycle Files"
4
+ description: "Learn how to customize TestDriver execution with lifecycle files for setup, provisioning, and cleanup."
5
+ icon: "wrench"
6
+ ---
7
+
8
+ ---
9
+
10
+ ## Overview
11
+
12
+ Lifecycle files are YAML files placed in your repository's `lifecycle/` directory. TestDriver automatically executes these files during the appropriate phases:
13
+
14
+ - **`lifecycle/provision.yaml`**: Executed when a new sandbox is created
15
+ - **`lifecycle/prerun.yaml`**: Executed before tests run
16
+ - **`lifecycle/postrun.yaml`**: Executed after tests complete
17
+
18
+ ---
19
+
20
+ ## File Structure
21
+
22
+ All lifecycle files follow the standard TestDriver YAML format:
23
+
24
+ ```yaml
25
+ version: 6.0.0
26
+ steps:
27
+ - prompt: description of what this step does
28
+ commands:
29
+ - command: exec
30
+ lang: pwsh
31
+ code: |
32
+ # Your PowerShell commands here
33
+ - command: wait-for-text
34
+ text: "Expected text"
35
+ timeout: 30000
36
+ ```
37
+
38
+ ---
39
+
40
+ ## Provision Scripts
41
+
42
+ The `lifecycle/provision.yaml` file is executed when a new sandbox is created. This is ideal for installing dependencies, setting up the environment, or preparing the system for testing.
43
+
44
+ ### Example
45
+
46
+ ```yaml lifecycle/provision.yaml
47
+ version: 6.0.0
48
+ steps:
49
+ - prompt: setup testing environment
50
+ commands:
51
+ - command: exec
52
+ lang: pwsh
53
+ code: |
54
+ Start-Process "C:\Program Files\Google\Chrome\Application\chrome.exe" -ArgumentList @(
55
+ "--start-maximized",
56
+ "--disable-infobars",
57
+ "--disable-fre",
58
+ "--no-default-browser-check",
59
+ "--no-first-run",
60
+ "--guest",
61
+ "${TD_WEBSITE}"
62
+ )
63
+ - command: wait-for-text
64
+ text: ${TD_WEBSITE}
65
+ timeout: 60000
66
+ ```
67
+
68
+ ### Common provision tasks:
69
+
70
+ - Installing software dependencies
71
+ - Setting up browser extensions
72
+ - Configuring system settings
73
+ - Downloading test data or assets
74
+
75
+ ---
76
+
77
+ ## Prerun Scripts
78
+
79
+ The `lifecycle/prerun.yaml` file is executed before each test run irrespective of whether its a new sandbox or an already running one. This is useful for preparing the immediate test environment.
80
+
81
+ ### Example
82
+
83
+ ```yaml lifecycle/prerun.yaml
84
+ version: 6.0.0
85
+ session: 67f00511acbd9ccac373edf7
86
+ steps:
87
+ - prompt: start dashcam
88
+ commands:
89
+ - command: exec
90
+ lang: pwsh
91
+ code: dashcam track --name=TestDriver --type=app --pattern="C:\Users\testdriver\Documents\testdriver.log"
92
+ - command: exec
93
+ lang: pwsh
94
+ code: dashcam start
95
+ ```
96
+
97
+ ### Common prerun tasks:
98
+
99
+ - Opening applications or browsers
100
+ - Navigating to starting pages
101
+ - Clearing application state
102
+ - Starting monitoring tools
103
+ - Setting environment variables
104
+
105
+ ---
106
+
107
+ ## Postrun Scripts
108
+
109
+ The `lifecycle/postrun.yaml` file is executed after tests complete. This is useful for cleanup tasks, generating reports, or capturing final state information.
110
+
111
+ ### Example
112
+
113
+ ```yaml lifecycle/postrun.yaml
114
+ version: 6.0.0
115
+ steps:
116
+ - prompt: cleanup and generate reports
117
+ commands:
118
+ - command: exec
119
+ lang: pwsh
120
+ code: dashcam -t 'demo-test-title' -p # use '${TD_THIS_FILE}' to dynamically set the title for the recording
121
+ ```
122
+
123
+ ### Common postrun tasks:
124
+
125
+ - Generating test reports
126
+ - Capturing screenshots or logs
127
+ - Cleaning up temporary files
128
+ - Stopping background processes
129
+ - Uploading artifacts
130
+
131
+ ---
132
+
133
+ ## Environment Variables
134
+
135
+ Lifecycle files have access to TestDriver environment variables:
136
+
137
+ - `${TD_WEBSITE}`: The target website URL
138
+ - `${TD_THIS_FILE}`: Current test file name
139
+ - `${TD_API_KEY}`: Your TestDriver API key
140
+ - Custom variables defined in your workflow
141
+
142
+ ### Using variables in lifecycle files:
143
+
144
+ ```yaml highlight={8, 9}
145
+ version: 6.0.0
146
+ steps:
147
+ - prompt: setup with custom variables
148
+ commands:
149
+ - command: exec
150
+ lang: pwsh
151
+ code: |
152
+ Write-Host "Testing website: ${TD_WEBSITE}"
153
+ Write-Host "Current test: ${TD_THIS_FILE}"
154
+ # Your setup commands here
155
+ ```
156
+
157
+ ---
158
+
159
+ ## Best Practices
160
+
161
+ ### Keep lifecycle files focused
162
+
163
+ Each lifecycle file should have a specific purpose:
164
+
165
+ - **Provision**: System-level setup
166
+ - **Prerun**: Test preparation
167
+ - **Postrun**: Cleanup and reporting
168
+
169
+ ### Use appropriate commands
170
+
171
+ - Use [`exec`](/commands/exec) with `lang: pwsh` for system commands
172
+ - Use TestDriver commands ([`wait-for-text`](/commands/wait-for-text), [`hover-text`](/commands/hover-text), etc.) for UI interactions
173
+ - Include appropriate timeouts for reliability
174
+
175
+ ### Error handling
176
+
177
+ Include checks to verify operations completed successfully:
178
+
179
+ ```yaml
180
+ - command: exec
181
+ lang: pwsh
182
+ code: |
183
+ if (!(Test-Path "C:\Program Files\Google\Chrome\Application\chrome.exe")) {
184
+ throw "Chrome not found"
185
+ }
186
+ Start-Process "C:\Program Files\Google\Chrome\Application\chrome.exe"
187
+ ```
188
+
189
+ ### Performance considerations
190
+
191
+ - Keep provision scripts efficient to minimize sandbox setup time
192
+ - Cache dependencies when possible
193
+ - Use lightweight operations in prerun/postrun scripts
194
+
195
+ ---
196
+
197
+ ## File Placement
198
+
199
+ Place lifecycle files in your repository's root directory:
200
+
201
+ ```
202
+ your-project/
203
+ ├── testdriver/
204
+ │ ├── demo-test.yaml
205
+ │ └── lifecycle/
206
+ │ ├── provision.yaml
207
+ │ ├── prerun.yaml
208
+ │ └── postrun.yaml
209
+ │ ├── screenshots/
210
+ │ │ └──
211
+ │ └── snippets/
212
+ │ └──
213
+ ```
214
+
215
+ ---
216
+
217
+ ## Execution Order
218
+
219
+ When TestDriver runs, lifecycle files execute in this order:
220
+
221
+ 1. **Provision** (once per sandbox creation)
222
+ 2. **Prerun** (before each test)
223
+ 3. **Your test files**
224
+ 4. **Postrun** (after each test)
225
+
226
+ ---
227
+
228
+ ## Troubleshooting
229
+
230
+ ### Lifecycle files not executing
231
+
232
+ - Verify files are in the `testdriver/lifecycle/` directory
233
+ - Check YAML syntax is valid
234
+ - Ensure version number is specified
235
+ - Verify file permissions in your repository
236
+
237
+ ### Commands failing
238
+
239
+ - Check PowerShell syntax for [`exec`](/commands/exec) commands
240
+ - Verify file paths exist on the target system
241
+ - Add error handling and logging
242
+ - Use appropriate timeouts for operations