@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,143 @@
1
+ ---
2
+ title: "Gherkin"
3
+ sidebarTitle: "Gherkin"
4
+ description: "Convert Gherkin scenarios to TestDriver prompts"
5
+ icon: "file-code"
6
+ ---
7
+
8
+ This guide explains how to convert **Gherkin scenarios** into **TestDriver prompts** for use in your testing workflows. By following this process, you can easily adapt existing Gherkin test cases into a format compatible with TestDriver.
9
+
10
+ ---
11
+
12
+ ## What's Gherkin?
13
+
14
+ Gherkin is a plain-text language used to describe test scenarios in a human-readable format. It uses keywords like `Given`, `When`, `Then`, and `And` to define steps in a test.
15
+
16
+ ### Example Gherkin scenario:
17
+
18
+ ```gherkin
19
+ Scenario: Successful login
20
+ Given the user is on the login page
21
+ When the user enters valid credentials
22
+ And clicks the "Log In" button
23
+ Then the user should see the dashboard
24
+ ```
25
+
26
+ ---
27
+
28
+ ## What are TestDriver prompts?
29
+
30
+ TestDriver prompts are high-level instructions that describe what the AI should do. They're written in plain text and focus on user actions or expected outcomes.
31
+
32
+ ### Example prompts:
33
+
34
+ ```yaml
35
+ - prompt: the user is on the login page
36
+ - prompt: the user enters valid credentials
37
+ - prompt: clicks the "Log In" button
38
+ - prompt: the user should see the dashboard
39
+ ```
40
+
41
+ ---
42
+
43
+ ## Steps to convert Gherkin to TestDriver prompts
44
+
45
+ ### Step 1: Understand the mapping
46
+
47
+ | **Gherkin Keyword** | **TestDriver Prompt** |
48
+ | ------------------- | ------------------------------------------ |
49
+ | `Given` | Describes the initial state or setup. |
50
+ | `When` | Describes the user action. |
51
+ | `Then` | Describes the expected outcome or result. |
52
+ | `And` | Adds additional steps to the same context. |
53
+
54
+ ---
55
+
56
+ ### Step 2: Extract steps from Gherkin
57
+
58
+ Take each step from the Gherkin scenario and rewrite it as a plain-text prompt. Remove the `Given`, `When`, `Then`, and `And` keywords, and focus on the action or expectation.
59
+
60
+ #### Example:
61
+
62
+ | **Gherkin Step** | **TestDriver Prompt** |
63
+ | ---------------------------------------- | ----------------------------------- |
64
+ | `Given the user is on the login page` | `the user is on the login page` |
65
+ | `When the user enters valid credentials` | `the user enters valid credentials` |
66
+ | `And clicks the "Log In" button` | `clicks the "Log In" button` |
67
+ | `Then the user should see the dashboard` | `the user should see the dashboard` |
68
+
69
+ ---
70
+
71
+ ### Step 3: Write the prompts in YAML format
72
+
73
+ Combine the extracted prompts into a YAML file. Each step should be written as a `prompt` entry.
74
+
75
+ #### Example YAML:
76
+
77
+ ```yaml
78
+ - prompt: the user is on the login page
79
+ - prompt: the user enters valid credentials
80
+ - prompt: clicks the "Log In" button
81
+ - prompt: the user should see the dashboard
82
+ ```
83
+
84
+ ---
85
+
86
+ ### Step 4: Save the YAML file
87
+
88
+ 1. Save the YAML content to a file (for example, `login_test.yaml`).
89
+ 2. Ensure the file is stored in the appropriate directory for your TestDriver project (for example, `testdriver/`).
90
+
91
+ ---
92
+
93
+ ### Step 5: Run the test with TestDriver
94
+
95
+ Use the TestDriver CLI to execute the test.
96
+
97
+ #### Command:
98
+
99
+ ```bash
100
+ npx testdriverai@latest run login_test.yaml
101
+ ```
102
+
103
+ ---
104
+
105
+ ## Example: Full conversion workflow
106
+
107
+ ### Input Gherkin scenario:
108
+
109
+ ```gherkin
110
+ Scenario: Add a product to the cart
111
+ Given the user is on the product page
112
+ When the user clicks "Add to Cart"
113
+ And confirms the action
114
+ Then the product should appear in the cart
115
+ ```
116
+
117
+ ### Converted YAML:
118
+
119
+ ```yaml
120
+ - prompt: the user is on the product page
121
+ - prompt: the user clicks "Add to Cart"
122
+ - prompt: confirms the action
123
+ - prompt: the product should appear in the cart
124
+ ```
125
+
126
+ ### Run the test:
127
+
128
+ ```bash
129
+ npx testdriverai@latest run add_to_cart_test.yaml
130
+ ```
131
+
132
+ ---
133
+
134
+ ## Best practices
135
+
136
+ 1. **Keep Prompts Simple**: Focus on high-level actions or outcomes. Avoid including unnecessary details.
137
+ 2. **Use Descriptive Prompts**: Ensure each prompt clearly describes the action or expectation.
138
+ 3. **Test the YAML**: Run the converted YAML file to verify that it works as expected.
139
+ 4. **Organize Files**: Store YAML files in a structured directory (for example, `testdriver/`) for easy management.
140
+
141
+ ---
142
+
143
+ By following this guide, you can efficiently convert Gherkin scenarios into TestDriver prompts, enabling seamless integration of existing test cases into your TestDriver workflows.
@@ -0,0 +1,164 @@
1
+ ---
2
+ title: "Jira"
3
+ sidebarTitle: "Jira"
4
+ description: "Import user stories from Jira into TestDriver test files."
5
+ icon: "file-image"
6
+ ---
7
+
8
+ # Importing user stories from Jira into TestDriver test files
9
+
10
+ This guide explains how to extract **user stories** from Jira and convert them into **TestDriver test files**. By automating this process, you can ensure that your user stories are directly translated into actionable test cases for TestDriver.
11
+
12
+ ---
13
+
14
+ ## Workflow overview
15
+
16
+ 1. **Export User Stories from Jira**: Use the Jira API to fetch user stories.
17
+ 2. **Convert User Stories to TestDriver YAML**: Transform the user stories into YAML test files.
18
+ 3. **Save and Organize Test Files**: Store the generated YAML files in a structured directory.
19
+ 4. **Run Tests with TestDriver**: Execute the tests using the TestDriver CLI.
20
+
21
+ ---
22
+
23
+ ## Step 1: Export user stories from Jira
24
+
25
+ ### Prerequisites
26
+
27
+ 1. **Jira API Token**: Generate an API token from your Jira account.
28
+ 2. **Jira Base URL**: Your Jira instance URL (for example, `https://yourcompany.atlassian.net`).
29
+ 3. **Node.js**: Ensure Node.js is installed on your system.
30
+
31
+ ### Script: Export user stories from Jira
32
+
33
+ The following script fetches Jira tickets and extracts the **user story title** and **acceptance criteria**.
34
+
35
+ #### Install dependencies:
36
+
37
+ ```bash
38
+ npm install axios yaml fs
39
+ ```
40
+
41
+ #### Node.js script (`export-jira-user-stories.js`):
42
+
43
+ ```javascript [expandable]
44
+ const axios = require("axios");
45
+ const yaml = require("yaml");
46
+ const fs = require("fs");
47
+ const path = require("path");
48
+
49
+ // Jira credentials
50
+ const JIRA_BASE_URL = "https://yourcompany.atlassian.net";
51
+ const JIRA_USERNAME = "your-email@example.com";
52
+ const JIRA_API_TOKEN = "your-api-token";
53
+ const JIRA_PROJECT_KEY = "PROJECT_KEY"; // Replace with your Jira project key
54
+
55
+ // Output directory
56
+ const OUTPUT_DIR = "./testdriver_tests";
57
+
58
+ // Ensure the output directory exists
59
+ if (!fs.existsSync(OUTPUT_DIR)) {
60
+ fs.mkdirSync(OUTPUT_DIR, { recursive: true });
61
+ }
62
+
63
+ // Fetch Jira tickets
64
+ async function fetchJiraTickets() {
65
+ try {
66
+ const response = await axios.get(
67
+ `${JIRA_BASE_URL}/rest/api/2/search?jql=project=${JIRA_PROJECT_KEY}`,
68
+ {
69
+ auth: {
70
+ username: JIRA_USERNAME,
71
+ password: JIRA_API_TOKEN,
72
+ },
73
+ headers: {
74
+ "Content-Type": "application/json",
75
+ },
76
+ },
77
+ );
78
+
79
+ const tickets = response.data.issues.map((issue) => ({
80
+ id: issue.key,
81
+ title: issue.fields.summary,
82
+ acceptanceCriteria:
83
+ issue.fields.customfield_12345 || "No acceptance criteria provided", // Replace `customfield_12345` with the field ID for "Acceptance Criteria"
84
+ }));
85
+
86
+ // Process each ticket
87
+ tickets.forEach((ticket) => createYamlFile(ticket));
88
+ console.log(`Exported ${tickets.length} user stories to ${OUTPUT_DIR}`);
89
+ } catch (error) {
90
+ console.error("Error fetching Jira tickets:", error.message);
91
+ }
92
+ }
93
+
94
+ // Create a YAML file for each user story
95
+ function createYamlFile(ticket) {
96
+ const steps = ticket.acceptanceCriteria.split("\n").map((criteria) => ({
97
+ prompt: criteria.trim(),
98
+ }));
99
+
100
+ const yamlContent = {
101
+ version: "4.2.18",
102
+ steps,
103
+ };
104
+
105
+ const fileName = `${ticket.id}.yaml`;
106
+ const filePath = path.join(OUTPUT_DIR, fileName);
107
+
108
+ fs.writeFileSync(filePath, yaml.stringify(yamlContent), "utf8");
109
+ console.log(`Created file: ${filePath}`);
110
+ }
111
+
112
+ // Run the script
113
+ fetchJiraTickets();
114
+ ```
115
+
116
+ ---
117
+
118
+ ## Step 2: Convert user stories to TestDriver YAML
119
+
120
+ The script above generates a YAML file for each Jira ticket. Each file contains the **acceptance criteria** as `prompt` entries.
121
+
122
+ ### Example
123
+
124
+ ```yaml testdriver/proj_123.yaml
125
+ version: 6.0.0
126
+ steps:
127
+ - prompt: The user can log in with valid credentials.
128
+ - prompt: An error message is displayed for invalid credentials.
129
+ - prompt: The login page is responsive on mobile devices.
130
+ ```
131
+
132
+ ---
133
+
134
+ ## Step 3: Save and organize test files
135
+
136
+ 1. The generated YAML files will be saved in the `testdriver/` directory.
137
+ 2. Ensure the directory is part of your TestDriver project structure.
138
+
139
+ ---
140
+
141
+ ## Step 4: Run tests with TestDriver
142
+
143
+ Use the TestDriver CLI to execute the generated test files.
144
+
145
+ ### Run a single test file:
146
+
147
+ ```bash
148
+ npx testdriverai@latest run testdriver/proj_123.yaml
149
+ ```
150
+
151
+ ---
152
+
153
+ ## Best practices
154
+
155
+ 1. **Field Mapping**: Ensure the correct Jira field ID (for example, `customfield_12345`) is used for "Acceptance Criteria."
156
+ 2. **Secure Credentials**: Store Jira API credentials in environment variables or secrets.
157
+ 3. **Review Generated Files**: Manually review the YAML files to ensure they align with your testing requirements.
158
+ 4. **Organize Tests**: Use a structured directory (for example, `testdriver/`) to manage your test files.
159
+
160
+ ---
161
+
162
+ ## Summary
163
+
164
+ By following this guide, you can automate the process of importing user stories from Jira into TestDriver test files. This ensures that your acceptance criteria are directly translated into actionable tests, streamlining your testing workflows and improving coverage.
@@ -0,0 +1,162 @@
1
+ ---
2
+ title: "TestRail"
3
+ sidebarTitle: "TestRail"
4
+ description: "Import test cases from TestRail into TestDriver."
5
+ icon: "square-pen"
6
+ ---
7
+
8
+ This guide explains how to extract **test cases** from TestRail and convert them into **TestDriver YAML test files**. By automating this process, you can ensure that your TestRail test cases are directly translated into actionable tests for TestDriver.
9
+
10
+ ---
11
+
12
+ ## Workflow overview
13
+
14
+ 1. **Export Test Cases from TestRail**: Use the TestRail API to fetch test cases.
15
+ 2. **Convert Test Cases to TestDriver YAML**: Transform the test cases into YAML test files.
16
+ 3. **Save and Organize Test Files**: Store the generated YAML files in a structured directory.
17
+ 4. **Run Tests with TestDriver**: Execute the tests using the TestDriver CLI.
18
+
19
+ ---
20
+
21
+ ## Step 1: Export test cases from TestRail
22
+
23
+ ### Prerequisites
24
+
25
+ 1. **TestRail API Key**: Obtain your API key from TestRail.
26
+ 2. **TestRail Base URL**: Your TestRail instance URL (for example, `https://yourcompany.testrail.io`).
27
+ 3. **Node.js**: Ensure Node.js is installed on your system.
28
+
29
+ ### Script: Export test cases from TestRail
30
+
31
+ The following script fetches TestRail test cases and extracts the **title** and **steps**.
32
+
33
+ #### Install dependencies:
34
+
35
+ ```bash
36
+ npm install axios yaml fs
37
+ ```
38
+
39
+ #### Node.js script (`export-testrail-test-cases.js`):
40
+
41
+ ```javascript [expandable]
42
+ const axios = require("axios");
43
+ const yaml = require("yaml");
44
+ const fs = require("fs");
45
+ const path = require("path");
46
+
47
+ // TestRail credentials
48
+ const TESTRAIL_BASE_URL = "https://yourcompany.testrail.io";
49
+ const TESTRAIL_USERNAME = "your-email@example.com";
50
+ const TESTRAIL_API_KEY = "your-api-key";
51
+ const TESTRAIL_PROJECT_ID = 1; // Replace with your TestRail project ID
52
+
53
+ // Output directory
54
+ const OUTPUT_DIR = "./testdriver_tests";
55
+
56
+ // Ensure the output directory exists
57
+ if (!fs.existsSync(OUTPUT_DIR)) {
58
+ fs.mkdirSync(OUTPUT_DIR, { recursive: true });
59
+ }
60
+
61
+ // Fetch TestRail test cases
62
+ async function fetchTestRailTestCases() {
63
+ try {
64
+ const response = await axios.get(
65
+ `${TESTRAIL_BASE_URL}/index.php?/api/v2/get_cases/${TESTRAIL_PROJECT_ID}`,
66
+ {
67
+ auth: {
68
+ username: TESTRAIL_USERNAME,
69
+ password: TESTRAIL_API_KEY,
70
+ },
71
+ headers: {
72
+ "Content-Type": "application/json",
73
+ },
74
+ },
75
+ );
76
+
77
+ const testCases = response.data.map((testCase) => ({
78
+ id: testCase.id,
79
+ title: testCase.title,
80
+ steps: testCase.custom_steps || "No steps provided", // Replace `custom_steps` with the field ID for test steps if applicable
81
+ }));
82
+
83
+ // Process each test case
84
+ testCases.forEach((testCase) => createYamlFile(testCase));
85
+ console.log(`Exported ${testCases.length} test cases to ${OUTPUT_DIR}`);
86
+ } catch (error) {
87
+ console.error("Error fetching TestRail test cases:", error.message);
88
+ }
89
+ }
90
+
91
+ // Create a YAML file for each test case
92
+ function createYamlFile(testCase) {
93
+ const steps = testCase.steps.split("\n").map((step) => ({
94
+ prompt: step.trim(),
95
+ }));
96
+
97
+ const yamlContent = {
98
+ version: "4.2.18",
99
+ steps,
100
+ };
101
+
102
+ const fileName = `test_${testCase.id}.yaml`;
103
+ const filePath = path.join(OUTPUT_DIR, fileName);
104
+
105
+ fs.writeFileSync(filePath, yaml.stringify(yamlContent), "utf8");
106
+ console.log(`Created file: ${filePath}`);
107
+ }
108
+
109
+ // Run the script
110
+ fetchTestRailTestCases();
111
+ ```
112
+
113
+ ---
114
+
115
+ ## Step 2: Convert test cases to TestDriver YAML
116
+
117
+ The script above generates a YAML file for each TestRail test case. Each file contains the **steps** as `prompt` entries.
118
+
119
+ ### Example
120
+
121
+ ```yaml testdriver/test_123.yaml
122
+ version: 6.0.0
123
+ steps:
124
+ - prompt: Navigate to the login page.
125
+ - prompt: Enter valid credentials.
126
+ - prompt: Click the "Log In" button.
127
+ - prompt: Verify the dashboard is displayed.
128
+ ```
129
+
130
+ ---
131
+
132
+ ## Step 3: Save and organize test files
133
+
134
+ 1. The generated YAML files will be saved in the `testdriver/` directory.
135
+ 2. Ensure the directory is part of your TestDriver project structure.
136
+
137
+ ---
138
+
139
+ ## Step 4: Run tests with TestDriver
140
+
141
+ Use the TestDriver CLI to execute the generated test files.
142
+
143
+ ### Run a Single test file:
144
+
145
+ ```bash
146
+ npx testdriverai@latest run testdriver/test_123.yaml
147
+ ```
148
+
149
+ ---
150
+
151
+ ## Best practices
152
+
153
+ 1. **Field Mapping**: Ensure the correct TestRail field ID (for example, `custom_steps`) is used for test steps.
154
+ 2. **Secure Credentials**: Store TestRail API credentials in environment variables or secrets.
155
+ 3. **Review Generated Files**: Manually review the YAML files to ensure they align with your testing requirements.
156
+ 4. **Organize Tests**: Use a structured directory (for example, `testdriver/`) to manage your test files.
157
+
158
+ ---
159
+
160
+ ## Summary
161
+
162
+ By following this guide, you can automate the process of importing test cases from TestRail into TestDriver test files. This ensures that your test steps are directly translated into actionable tests, streamlining your testing workflows and improving coverage.
@@ -0,0 +1,146 @@
1
+ ---
2
+ title: "Electron"
3
+ sidebarTitle: "Electron"
4
+ description: "Integrate TestDriver with Electron applications"
5
+ icon: "atom"
6
+ ---
7
+
8
+ To integrate **TestDriver** with a workflow that uses the **runner artifact URL** and **GitHub token** for downloading artifacts, you can modify the workflow to include these steps. Below is an example of how to adapt the workflow to ensure TestDriver can access the artifacts.
9
+
10
+ ---
11
+
12
+ ## Updated workflow with TestDriver integration
13
+
14
+ This workflow builds the application, uploads the build as an artifact, and then uses TestDriver to download the artifact via the runner artifact URL and run tests.
15
+
16
+ ### Workflow file
17
+
18
+ ```yaml .github/workflows/testdriver-integration.yaml
19
+ name: Build and Test with TestDriver
20
+
21
+ on:
22
+ push:
23
+ branches:
24
+ - main
25
+ pull_request:
26
+ workflow_dispatch:
27
+
28
+ jobs:
29
+ build:
30
+ name: Build Application
31
+ runs-on: ubuntu-latest
32
+ steps:
33
+ - name: Check out repository
34
+ uses: actions/checkout@v4
35
+
36
+ - name: Set up Node.js
37
+ uses: actions/setup-node@v4
38
+ with:
39
+ node-version: "20"
40
+
41
+ - name: Install dependencies
42
+ run: npm install
43
+
44
+ - name: Build Application
45
+ run: npm run build # Ensure your project has a build script
46
+
47
+ - name: Upload Build Artifact
48
+ uses: actions/upload-artifact@v3
49
+ with:
50
+ name: app-build
51
+ path: dist/ # Replace with the path to your built application
52
+
53
+ test:
54
+ name: Test Application with TestDriver
55
+ runs-on: ubuntu-latest
56
+ needs: build
57
+ steps:
58
+ - name: Get Artifact URL
59
+ id: artifact-url
60
+ run: |
61
+ echo "ARTIFACT_URL=${{ github.server_url }}/repos/${{ github.repository }}/actions/artifacts" >> $GITHUB_ENV
62
+
63
+ - name: Run TestDriver CLI
64
+ run: |
65
+ npx testdriverai@latest run testdriver/test.yaml
66
+ env:
67
+ TD_API_KEY: ${{ secrets.TD_API_KEY }}
68
+ ARTIFACT_URL: ${{ env.ARTIFACT_URL }}
69
+ FORCE_COLOR: "3"
70
+ ```
71
+
72
+ ---
73
+
74
+ ## Using lifecycle files for Electron apps
75
+
76
+ To ensure your Electron app is downloaded and run in the correct environment, use TestDriver's lifecycle files:
77
+
78
+ - **lifecycle/provision.yaml**: Download and extract the Electron app artifact here.
79
+ - **lifecycle/prerun.yaml**: Start your Electron app here before the test begins.
80
+
81
+ ### Example:
82
+
83
+ ```yaml testdriver/lifecycle/provision.yaml
84
+ version: 6.0.0
85
+ steps:
86
+ - prompt: Download Electron app artifact
87
+ commands:
88
+ - command: exec
89
+ lang: pwsh
90
+ code: |
91
+ Write-Host "Downloading artifact..."
92
+ curl -H "Authorization: Bearer ${GITHUB_TOKEN}" \
93
+ -L "${ARTIFACT_URL}" \
94
+ --output artifact.zip
95
+ echo "Extracting artifact..."
96
+ unzip artifact.zip -d ./app
97
+ ```
98
+
99
+ ---
100
+
101
+ ```yaml testdriver/lifecycle/prerun.yaml
102
+ version: 6.0.0
103
+ steps:
104
+ - prompt: Start Electron app
105
+ commands:
106
+ - command: exec
107
+ lang: pwsh
108
+ code: |
109
+ Start-Process -FilePath "./app/your-app-binary" # Replace with the actual binary or executable path
110
+ ```
111
+
112
+ ---
113
+
114
+ ## Key changes and explanation
115
+
116
+ ### 1. **Artifact URL Retrieval**
117
+
118
+ The `Get Artifact URL` step constructs the artifact URL dynamically using the GitHub repository and server URL. This value is passed to the lifecycle files as an environment variable.
119
+
120
+ ### 2. **Downloading and running the app in lifecycle files**
121
+
122
+ - Download and extract the Electron app in `lifecycle/provision.yaml`.
123
+ - Start the Electron app in `lifecycle/prerun.yaml`.
124
+ - The TestDriver CLI will then execute your tests against the running app.
125
+
126
+ ---
127
+
128
+ ## Secrets configuration
129
+
130
+ Add the following secrets to your GitHub repository:
131
+
132
+ 1. **`TD_API_KEY`**: Your TestDriver API key.
133
+ 2. **`GITHUB_TOKEN`**: Automatically provided by GitHub Actions for authentication.
134
+
135
+ ---
136
+
137
+ ## Benefits of this workflow
138
+
139
+ 1. **Dynamic Artifact Access**: Ensures TestDriver can download artifacts directly from the runner.
140
+ 2. **Automated Testing**: Integrates TestDriver to validate the application after the build.
141
+ 3. **Secure Authentication**: Uses the GitHub token for secure artifact access.
142
+ 4. **Cross-Platform Support**: Can be adapted for different operating systems and environments.
143
+
144
+ ---
145
+
146
+ By integrating TestDriver with the runner artifact URL and GitHub token, and using lifecycle files, this workflow ensures seamless and secure testing of your Electron application builds.