testdriverai 7.1.0 → 7.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/.env.example +2 -0
  2. package/.github/workflows/linux-tests.yml +28 -0
  3. package/agent/index.js +18 -45
  4. package/agent/interface.js +13 -2
  5. package/agent/lib/commands.js +1 -1
  6. package/agent/lib/redraw.js +1 -1
  7. package/agent/lib/sandbox.js +30 -2
  8. package/agent/lib/valid-version.js +2 -2
  9. package/debugger/index.html +1 -1
  10. package/docs/docs.json +86 -125
  11. package/docs/v6/getting-started/self-hosting.mdx +3 -2
  12. package/docs/v7/_drafts/agents.mdx +852 -0
  13. package/docs/v7/_drafts/auto-cache-key.mdx +167 -0
  14. package/docs/v7/{guides → _drafts}/caching-selectors.mdx +125 -17
  15. package/docs/v7/_drafts/dashcam-title-feature.mdx +89 -0
  16. package/docs/v7/_drafts/error-handling.mdx +501 -0
  17. package/docs/v7/_drafts/implementation-plan.mdx +994 -0
  18. package/docs/v7/_drafts/init-command.mdx +95 -0
  19. package/docs/v7/_drafts/optimal-sdk-design.mdx +1348 -0
  20. package/docs/v7/_drafts/plugin-migration.mdx +222 -0
  21. package/docs/v7/_drafts/prompt-cache.mdx +200 -0
  22. package/docs/{QUICK_START_TEST_RECORDING.md → v7/_drafts/quick-start-test-recording.mdx} +3 -3
  23. package/docs/v7/_drafts/sdk-logging.mdx +222 -0
  24. package/docs/v7/_drafts/sdk-migration.mdx +474 -0
  25. package/docs/v7/_drafts/sdk-v7-complete.mdx +345 -0
  26. package/docs/v7/{guides → _drafts}/self-hosting.mdx +1 -1
  27. package/docs/v7/{guides → _drafts}/troubleshooting.mdx +2 -2
  28. package/docs/v7/{guides → _drafts}/vitest-plugin.mdx +4 -4
  29. package/docs/v7/api/{ai.mdx → act.mdx} +24 -24
  30. package/docs/v7/api/client.mdx +1 -1
  31. package/docs/v7/api/dashcam.mdx +2 -2
  32. package/docs/v7/api/elements.mdx +143 -41
  33. package/docs/v7/api/find.mdx +258 -0
  34. package/docs/v7/api/type.mdx +51 -7
  35. package/docs/v7/features/ai-native.mdx +427 -0
  36. package/docs/v7/features/easy-to-write.mdx +351 -0
  37. package/docs/v7/features/enterprise.mdx +540 -0
  38. package/docs/v7/features/fast.mdx +424 -0
  39. package/docs/v7/features/observable.mdx +623 -0
  40. package/docs/v7/features/powerful.mdx +531 -0
  41. package/docs/v7/features/scalable.mdx +417 -0
  42. package/docs/v7/features/stable.mdx +514 -0
  43. package/docs/v7/getting-started/configuration.mdx +1 -1
  44. package/docs/v7/getting-started/generating-tests.mdx +525 -0
  45. package/docs/v7/getting-started/installation.mdx +486 -0
  46. package/docs/v7/getting-started/quickstart.mdx +51 -5
  47. package/docs/v7/getting-started/running-and-debugging.mdx +511 -0
  48. package/docs/v7/getting-started/setting-up-in-ci.mdx +612 -0
  49. package/docs/v7/getting-started/writing-tests.mdx +535 -0
  50. package/docs/v7/overview/what-is-testdriver.mdx +398 -0
  51. package/docs/v7/playwright.mdx +3 -3
  52. package/docs/v7/presets/chrome.mdx +16 -0
  53. package/docs/v7/presets/electron.mdx +18 -0
  54. package/docs/v7/presets/vscode.mdx +19 -0
  55. package/examples/run-tests-with-recording.sh +70 -0
  56. package/examples/screenshot-example.js +63 -0
  57. package/examples/sdk-awesome-logs-demo.js +177 -0
  58. package/examples/sdk-cache-thresholds.js +96 -0
  59. package/examples/sdk-element-properties.js +155 -0
  60. package/examples/sdk-simple-example.js +65 -0
  61. package/examples/test-recording-example.test.js +166 -0
  62. package/interfaces/cli/commands/init.js +358 -0
  63. package/interfaces/vitest-plugin.mjs +214 -10
  64. package/{src → lib}/core/Dashcam.js +41 -4
  65. package/{src → lib}/vitest/hooks.mjs +118 -100
  66. package/lib/vitest/setup.mjs +44 -0
  67. package/package.json +9 -10
  68. package/sdk.d.ts +15 -2
  69. package/sdk.js +70 -18
  70. package/{self-hosted.yml → setup/aws/self-hosted.yml} +1 -1
  71. package/{testdriver/acceptance-sdk → test/manual}/test-console-logs.test.mjs +1 -1
  72. package/test/manual/test-find-api.js +73 -0
  73. package/test/manual/test-init.sh +54 -0
  74. package/test/manual/test-prompt-cache.js +96 -0
  75. package/test/manual/test-provision-auth.mjs +22 -0
  76. package/test/manual/test-sandbox-render.js +28 -0
  77. package/test/manual/test-sdk-methods.js +15 -0
  78. package/test/manual/test-sdk-refactor.js +53 -0
  79. package/test/manual/test-stack-trace.mjs +57 -0
  80. package/test/testdriver/assert.test.mjs +41 -0
  81. package/{testdriver/acceptance-sdk → test/testdriver}/auto-cache-key-demo.test.mjs +1 -1
  82. package/{testdriver/acceptance-sdk → test/testdriver}/drag-and-drop.test.mjs +1 -1
  83. package/{testdriver/acceptance-sdk → test/testdriver}/element-not-found.test.mjs +1 -1
  84. package/{testdriver/acceptance-sdk → test/testdriver}/exec-js.test.mjs +1 -1
  85. package/{testdriver/acceptance-sdk → test/testdriver}/exec-output.test.mjs +3 -3
  86. package/{testdriver/acceptance-sdk → test/testdriver}/exec-pwsh.test.mjs +3 -3
  87. package/{testdriver/acceptance-sdk → test/testdriver}/focus-window.test.mjs +1 -1
  88. package/{testdriver/acceptance-sdk → test/testdriver}/formatted-logging.test.mjs +1 -1
  89. package/{testdriver/acceptance-sdk → test/testdriver}/hover-image.test.mjs +1 -1
  90. package/{testdriver/acceptance-sdk → test/testdriver}/hover-text-with-description.test.mjs +1 -1
  91. package/{testdriver/acceptance-sdk → test/testdriver}/hover-text.test.mjs +1 -1
  92. package/{testdriver/acceptance-sdk → test/testdriver}/match-image.test.mjs +1 -1
  93. package/{testdriver/acceptance-sdk → test/testdriver}/press-keys.test.mjs +1 -1
  94. package/{testdriver/acceptance-sdk → test/testdriver}/prompt.test.mjs +2 -2
  95. package/{testdriver/acceptance-sdk → test/testdriver}/scroll-keyboard.test.mjs +1 -1
  96. package/{testdriver/acceptance-sdk → test/testdriver}/scroll-until-image.test.mjs +1 -1
  97. package/{testdriver/acceptance-sdk → test/testdriver}/scroll-until-text.test.mjs +1 -1
  98. package/{testdriver/acceptance-sdk → test/testdriver}/scroll.test.mjs +1 -1
  99. package/{src/vitest/lifecycle.mjs → test/testdriver/setup/lifecycleHelpers.mjs} +84 -99
  100. package/test/testdriver/setup/testHelpers.mjs +653 -0
  101. package/{testdriver/acceptance-sdk → test/testdriver}/type.test.mjs +1 -1
  102. package/vitest.config.mjs +11 -57
  103. package/.github/dependabot.yml +0 -11
  104. package/.github/workflows/acceptance-linux.yml +0 -75
  105. package/.github/workflows/acceptance-sdk-tests.yml +0 -133
  106. package/.github/workflows/acceptance-tests.yml +0 -130
  107. package/.github/workflows/lint.yml +0 -27
  108. package/.github/workflows/publish-canary.yml +0 -40
  109. package/.github/workflows/publish-latest.yml +0 -61
  110. package/.github/workflows/test-install.yml +0 -29
  111. package/.vscode/extensions.json +0 -3
  112. package/.vscode/launch.json +0 -22
  113. package/.vscode/settings.json +0 -14
  114. package/AGENTS.md +0 -550
  115. package/CODEOWNERS +0 -2
  116. package/_testdriver/acceptance/assert.yaml +0 -7
  117. package/_testdriver/acceptance/dashcam.yaml +0 -9
  118. package/_testdriver/acceptance/drag-and-drop.yaml +0 -49
  119. package/_testdriver/acceptance/embed.yaml +0 -9
  120. package/_testdriver/acceptance/exec-js.yaml +0 -29
  121. package/_testdriver/acceptance/exec-output.yaml +0 -43
  122. package/_testdriver/acceptance/exec-shell.yaml +0 -40
  123. package/_testdriver/acceptance/focus-window.yaml +0 -16
  124. package/_testdriver/acceptance/hover-image.yaml +0 -18
  125. package/_testdriver/acceptance/hover-text-with-description.yaml +0 -29
  126. package/_testdriver/acceptance/hover-text.yaml +0 -14
  127. package/_testdriver/acceptance/if-else.yaml +0 -31
  128. package/_testdriver/acceptance/match-image.yaml +0 -15
  129. package/_testdriver/acceptance/press-keys.yaml +0 -35
  130. package/_testdriver/acceptance/prompt.yaml +0 -11
  131. package/_testdriver/acceptance/remember.yaml +0 -27
  132. package/_testdriver/acceptance/screenshots/cart.png +0 -0
  133. package/_testdriver/acceptance/scroll-keyboard.yaml +0 -34
  134. package/_testdriver/acceptance/scroll-until-image.yaml +0 -26
  135. package/_testdriver/acceptance/scroll-until-text.yaml +0 -20
  136. package/_testdriver/acceptance/scroll.yaml +0 -33
  137. package/_testdriver/acceptance/snippets/login.yaml +0 -29
  138. package/_testdriver/acceptance/snippets/match-cart.yaml +0 -8
  139. package/_testdriver/acceptance/type.yaml +0 -29
  140. package/_testdriver/behavior/failure.yaml +0 -7
  141. package/_testdriver/behavior/hover-text.yaml +0 -13
  142. package/_testdriver/behavior/lifecycle/postrun.yaml +0 -10
  143. package/_testdriver/behavior/lifecycle/prerun.yaml +0 -8
  144. package/_testdriver/behavior/lifecycle/provision.yaml +0 -8
  145. package/_testdriver/behavior/secrets.yaml +0 -7
  146. package/_testdriver/edge-cases/dashcam-chrome.yaml +0 -8
  147. package/_testdriver/edge-cases/exec-pwsh-multiline.yaml +0 -10
  148. package/_testdriver/edge-cases/js-exception.yaml +0 -8
  149. package/_testdriver/edge-cases/js-promise.yaml +0 -19
  150. package/_testdriver/edge-cases/lifecycle/postrun.yaml +0 -10
  151. package/_testdriver/edge-cases/prompt-in-middle.yaml +0 -23
  152. package/_testdriver/edge-cases/prompt-nested.yaml +0 -7
  153. package/_testdriver/edge-cases/success-test.yaml +0 -9
  154. package/_testdriver/examples/android/example.yaml +0 -12
  155. package/_testdriver/examples/android/lifecycle/postrun.yaml +0 -11
  156. package/_testdriver/examples/android/lifecycle/provision.yaml +0 -47
  157. package/_testdriver/examples/android/readme.md +0 -7
  158. package/_testdriver/examples/chrome-extension/lifecycle/provision.yaml +0 -74
  159. package/_testdriver/examples/desktop/lifecycle/prerun.yaml +0 -0
  160. package/_testdriver/examples/desktop/lifecycle/provision.yaml +0 -64
  161. package/_testdriver/examples/vscode-extension/lifecycle/provision.yaml +0 -73
  162. package/_testdriver/examples/web/lifecycle/postrun.yaml +0 -7
  163. package/_testdriver/examples/web/lifecycle/prerun.yaml +0 -22
  164. package/_testdriver/lifecycle/postrun.yaml +0 -8
  165. package/_testdriver/lifecycle/prerun.yaml +0 -15
  166. package/_testdriver/lifecycle/provision.yaml +0 -25
  167. package/docs/v7/guides/ci-cd/azure.mdx +0 -587
  168. package/docs/v7/guides/ci-cd/circleci.mdx +0 -523
  169. package/docs/v7/guides/ci-cd/github-actions.mdx +0 -457
  170. package/docs/v7/guides/ci-cd/gitlab.mdx +0 -498
  171. package/docs/v7/guides/ci-cd/jenkins.mdx +0 -664
  172. package/docs/v7/guides/ci-cd/travis.mdx +0 -438
  173. package/scripts/view-test-results.mjs +0 -96
  174. package/src/vitest/extended.mjs +0 -108
  175. package/src/vitest/index.mjs +0 -64
  176. package/src/vitest/utils.mjs +0 -150
  177. package/styles/.vale-config/2-MDX.ini +0 -5
  178. package/styles/Microsoft/AMPM.yml +0 -9
  179. package/styles/Microsoft/Accessibility.yml +0 -30
  180. package/styles/Microsoft/Acronyms.yml +0 -64
  181. package/styles/Microsoft/Adverbs.yml +0 -272
  182. package/styles/Microsoft/Auto.yml +0 -11
  183. package/styles/Microsoft/Avoid.yml +0 -14
  184. package/styles/Microsoft/Contractions.yml +0 -50
  185. package/styles/Microsoft/Dashes.yml +0 -13
  186. package/styles/Microsoft/DateFormat.yml +0 -8
  187. package/styles/Microsoft/DateNumbers.yml +0 -40
  188. package/styles/Microsoft/DateOrder.yml +0 -8
  189. package/styles/Microsoft/Ellipses.yml +0 -9
  190. package/styles/Microsoft/FirstPerson.yml +0 -16
  191. package/styles/Microsoft/Foreign.yml +0 -13
  192. package/styles/Microsoft/Gender.yml +0 -8
  193. package/styles/Microsoft/GenderBias.yml +0 -42
  194. package/styles/Microsoft/GeneralURL.yml +0 -11
  195. package/styles/Microsoft/HeadingAcronyms.yml +0 -7
  196. package/styles/Microsoft/HeadingColons.yml +0 -8
  197. package/styles/Microsoft/HeadingPunctuation.yml +0 -13
  198. package/styles/Microsoft/Headings.yml +0 -28
  199. package/styles/Microsoft/Hyphens.yml +0 -14
  200. package/styles/Microsoft/Negative.yml +0 -13
  201. package/styles/Microsoft/Ordinal.yml +0 -13
  202. package/styles/Microsoft/OxfordComma.yml +0 -8
  203. package/styles/Microsoft/Passive.yml +0 -183
  204. package/styles/Microsoft/Percentages.yml +0 -7
  205. package/styles/Microsoft/Plurals.yml +0 -7
  206. package/styles/Microsoft/Quotes.yml +0 -7
  207. package/styles/Microsoft/RangeTime.yml +0 -13
  208. package/styles/Microsoft/Semicolon.yml +0 -8
  209. package/styles/Microsoft/SentenceLength.yml +0 -6
  210. package/styles/Microsoft/Spacing.yml +0 -8
  211. package/styles/Microsoft/Suspended.yml +0 -7
  212. package/styles/Microsoft/Terms.yml +0 -42
  213. package/styles/Microsoft/URLFormat.yml +0 -9
  214. package/styles/Microsoft/Units.yml +0 -16
  215. package/styles/Microsoft/Vocab.yml +0 -25
  216. package/styles/Microsoft/We.yml +0 -11
  217. package/styles/Microsoft/Wordiness.yml +0 -127
  218. package/styles/Microsoft/meta.json +0 -4
  219. package/styles/alex/Ablist.yml +0 -274
  220. package/styles/alex/Condescending.yml +0 -16
  221. package/styles/alex/Gendered.yml +0 -110
  222. package/styles/alex/LGBTQ.yml +0 -55
  223. package/styles/alex/OCD.yml +0 -10
  224. package/styles/alex/Press.yml +0 -12
  225. package/styles/alex/ProfanityLikely.yml +0 -1289
  226. package/styles/alex/ProfanityMaybe.yml +0 -282
  227. package/styles/alex/ProfanityUnlikely.yml +0 -251
  228. package/styles/alex/README.md +0 -27
  229. package/styles/alex/Race.yml +0 -85
  230. package/styles/alex/Suicide.yml +0 -26
  231. package/styles/alex/meta.json +0 -4
  232. package/styles/config/vocabularies/Docs/accept.txt +0 -47
  233. package/styles/config/vocabularies/Docs/reject.txt +0 -4
  234. package/styles/proselint/Airlinese.yml +0 -8
  235. package/styles/proselint/AnimalLabels.yml +0 -48
  236. package/styles/proselint/Annotations.yml +0 -9
  237. package/styles/proselint/Apologizing.yml +0 -8
  238. package/styles/proselint/Archaisms.yml +0 -52
  239. package/styles/proselint/But.yml +0 -8
  240. package/styles/proselint/Cliches.yml +0 -782
  241. package/styles/proselint/CorporateSpeak.yml +0 -30
  242. package/styles/proselint/Currency.yml +0 -5
  243. package/styles/proselint/Cursing.yml +0 -15
  244. package/styles/proselint/DateCase.yml +0 -7
  245. package/styles/proselint/DateMidnight.yml +0 -7
  246. package/styles/proselint/DateRedundancy.yml +0 -10
  247. package/styles/proselint/DateSpacing.yml +0 -7
  248. package/styles/proselint/DenizenLabels.yml +0 -52
  249. package/styles/proselint/Diacritical.yml +0 -95
  250. package/styles/proselint/GenderBias.yml +0 -45
  251. package/styles/proselint/GroupTerms.yml +0 -39
  252. package/styles/proselint/Hedging.yml +0 -8
  253. package/styles/proselint/Hyperbole.yml +0 -6
  254. package/styles/proselint/Jargon.yml +0 -11
  255. package/styles/proselint/LGBTOffensive.yml +0 -13
  256. package/styles/proselint/LGBTTerms.yml +0 -15
  257. package/styles/proselint/Malapropisms.yml +0 -8
  258. package/styles/proselint/Needless.yml +0 -358
  259. package/styles/proselint/Nonwords.yml +0 -38
  260. package/styles/proselint/Oxymorons.yml +0 -22
  261. package/styles/proselint/P-Value.yml +0 -6
  262. package/styles/proselint/RASSyndrome.yml +0 -30
  263. package/styles/proselint/README.md +0 -12
  264. package/styles/proselint/Skunked.yml +0 -13
  265. package/styles/proselint/Spelling.yml +0 -17
  266. package/styles/proselint/Typography.yml +0 -11
  267. package/styles/proselint/Uncomparables.yml +0 -50
  268. package/styles/proselint/Very.yml +0 -6
  269. package/styles/proselint/meta.json +0 -15
  270. package/styles/write-good/Cliches.yml +0 -702
  271. package/styles/write-good/E-Prime.yml +0 -32
  272. package/styles/write-good/Illusions.yml +0 -11
  273. package/styles/write-good/Passive.yml +0 -183
  274. package/styles/write-good/README.md +0 -27
  275. package/styles/write-good/So.yml +0 -5
  276. package/styles/write-good/ThereIs.yml +0 -6
  277. package/styles/write-good/TooWordy.yml +0 -221
  278. package/styles/write-good/Weasel.yml +0 -29
  279. package/styles/write-good/meta.json +0 -4
  280. package/test/dashcam.test.js +0 -137
  281. package/test/mcp-example-test.yaml +0 -27
  282. package/test/test_parser.js +0 -47
  283. package/testdriver/acceptance-sdk/QUICK_REFERENCE.md +0 -61
  284. package/testdriver/acceptance-sdk/README.md +0 -128
  285. package/testdriver/acceptance-sdk/TEST_REPORTING.md +0 -245
  286. package/testdriver/acceptance-sdk/assert.test.mjs +0 -26
  287. package/testdriver/acceptance-sdk/hooks-example.test.mjs +0 -38
  288. package/testdriver/acceptance-sdk/presets-example.test.mjs +0 -87
  289. package/testdriver/acceptance-sdk/setup/testHelpers.mjs +0 -420
  290. package/testdriver/acceptance-sdk/sully-ai.test.mjs +0 -234
  291. package/testdriver/acceptance-sdk/type-checking-demo.js +0 -49
  292. package/vale.ini +0 -18
  293. package/vitest.config.example.js +0 -19
  294. package/vitest.config.mjs.bak +0 -44
  295. /package/docs/{ARCHITECTURE.md → v7/_drafts/architecture.mdx} +0 -0
  296. /package/docs/{AWESOME_LOGS_QUICK_REF.md → v7/_drafts/awesome-logs-quick-ref.mdx} +0 -0
  297. /package/docs/v7/{guides → _drafts}/best-practices.mdx +0 -0
  298. /package/docs/v7/{guides → _drafts}/caching-ai.mdx +0 -0
  299. /package/docs/v7/{guides → _drafts}/caching.mdx +0 -0
  300. /package/docs/{MIGRATION.md → v7/_drafts/cli-to-sdk-migration.mdx} +0 -0
  301. /package/{CONTRIBUTING.md → docs/v7/_drafts/contributing.mdx} +0 -0
  302. /package/docs/v7/{progressive-apis/CORE.md → _drafts/core.mdx} +0 -0
  303. /package/docs/v7/{guides → _drafts}/debugging.mdx +0 -0
  304. /package/docs/v7/{guides → _drafts}/faq.mdx +0 -0
  305. /package/docs/v7/{progressive-apis/HOOKS.md → _drafts/hooks.mdx} +0 -0
  306. /package/docs/v7/{guides → _drafts}/migration.mdx +0 -0
  307. /package/docs/v7/{guides → _drafts}/performance.mdx +0 -0
  308. /package/docs/{PRESETS.md → v7/_drafts/presets.mdx} +0 -0
  309. /package/docs/v7/{progressive-apis/PROGRESSIVE_DISCLOSURE.md → _drafts/progressive-disclosure.mdx} +0 -0
  310. /package/docs/v7/{progressive-apis/PROVISION.md → _drafts/provision.mdx} +0 -0
  311. /package/docs/{SDK_AWESOME_LOGS.md → v7/_drafts/sdk-awesome-logs.mdx} +0 -0
  312. /package/docs/{sdk-browser-rendering.md → v7/_drafts/sdk-browser-rendering.mdx} +0 -0
  313. /package/docs/{TEST_RECORDING.md → v7/_drafts/test-recording.mdx} +0 -0
  314. /package/docs/v7/{guides → _drafts}/vitest.mdx +0 -0
  315. /package/docs/v7/{README.md → overview/readme.mdx} +0 -0
  316. /package/{src → lib}/core/index.d.ts +0 -0
  317. /package/{src → lib}/core/index.js +0 -0
  318. /package/{src → lib}/presets/index.mjs +0 -0
  319. /package/{src → lib}/vitest/hooks.d.ts +0 -0
  320. /package/{debug-locate-response.js → test/manual/debug-locate-response.js} +0 -0
  321. /package/{verify-element-api.js → test/manual/verify-element-api.js} +0 -0
  322. /package/{verify-types.js → test/manual/verify-types.js} +0 -0
  323. /package/{testdriver/acceptance-sdk → test/testdriver}/chrome-extension.test.mjs +0 -0
  324. /package/{testdriver/acceptance-sdk → test/testdriver}/setup/globalTeardown.mjs +0 -0
  325. /package/{testdriver/acceptance-sdk → test/testdriver}/setup/vitestSetup.mjs +0 -0
@@ -1,61 +0,0 @@
1
- # SDK Test Reporting - Quick Reference
2
-
3
- ## 🚀 Commands
4
-
5
- ```bash
6
- # Run all tests
7
- npm run test:sdk
8
-
9
- # View terminal summary
10
- npm run test:sdk:results
11
-
12
- # Open HTML report
13
- npm run test:sdk:report
14
-
15
- # Watch mode (dev)
16
- npm run test:sdk:watch
17
-
18
- # Interactive UI
19
- npm run test:sdk:ui
20
- ```
21
-
22
- ## 📊 What You Get
23
-
24
- ### Locally
25
-
26
- 1. **Console**: Verbose logs with full test output
27
- 2. **Terminal Summary**: `npm run test:sdk:results` - Quick pass/fail counts
28
- 3. **HTML Report**: `npm run test:sdk:report` - Interactive browser viewer
29
-
30
- ### GitHub Actions
31
-
32
- 1. **Step Summary**: Markdown tables in workflow summary page
33
- 2. **Test Summary Action**: Badge counts and annotations
34
- 3. **Artifacts**: Download junit.xml, results.json, and index.html
35
-
36
- ## 📁 Output Files
37
-
38
- ```
39
- test-results/
40
- ├── junit.xml # For CI/CD tools
41
- ├── results.json # Machine-readable
42
- └── index.html # Interactive report
43
- ```
44
-
45
- ## ⚡ Quick Tips
46
-
47
- - **Debugging failures?** → `npm run test:sdk:report` (HTML has best error context)
48
- - **Quick status check?** → `npm run test:sdk:results` (terminal summary)
49
- - **PR review?** → Check GitHub Actions summary tab
50
- - **Need history?** → Download artifacts from GitHub Actions runs
51
-
52
- ## 🔍 GitHub Summary Preview
53
-
54
- Every test run creates a summary with:
55
-
56
- - ✅ Pass/fail counts table
57
- - ❌ Failed test details with errors
58
- - ✅ List of all passing tests
59
- - ⏱️ Duration metrics
60
-
61
- Find it: Actions → Your workflow run → Summary tab
@@ -1,128 +0,0 @@
1
- # TestDriver SDK Acceptance Tests
2
-
3
- This directory contains acceptance tests for the TestDriver SDK using Vitest.
4
-
5
- ## Running Tests
6
-
7
- ### Run All Tests (Cross-Platform)
8
-
9
- ```bash
10
- npm run test:sdk
11
- ```
12
-
13
- ### Run Platform-Specific Tests
14
-
15
- Use the `TEST_PLATFORM` environment variable to run tests for a specific platform:
16
-
17
- ```bash
18
- # Run Windows-only tests
19
- npm run test:sdk:windows
20
-
21
- # Run macOS-only tests
22
- npm run test:sdk:mac
23
-
24
- # Run Linux-only tests
25
- npm run test:sdk:linux
26
- ```
27
-
28
- Or set the environment variable directly:
29
-
30
- ```bash
31
- TEST_PLATFORM=windows npm run test:sdk
32
- TEST_PLATFORM=mac npm run test:sdk
33
- ```
34
-
35
- ## Test Organization
36
-
37
- ### Cross-Platform Tests
38
-
39
- Tests without a platform suffix run on all platforms:
40
-
41
- - `hover-text.test.mjs` - Runs everywhere
42
- - `scroll.test.mjs` - Runs everywhere
43
- - `screenshot.test.mjs` - Runs everywhere
44
-
45
- ### Platform-Specific Tests
46
-
47
- Platform-specific tests use naming conventions:
48
-
49
- - `*.windows.test.mjs` - Windows-only tests (e.g., `exec-pwsh.windows.test.mjs`)
50
- - `*.mac.test.mjs` - macOS-only tests
51
- - `*.linux.test.mjs` - Linux-only tests
52
-
53
- ### Conditional Test Skipping
54
-
55
- Some tests use `skipIf` to conditionally skip based on the platform:
56
-
57
- ```javascript
58
- it.skipIf(() => testdriver.os === "linux")(
59
- "should run on Windows/Mac",
60
- async () => {
61
- // This test will be skipped on Linux
62
- },
63
- );
64
- ```
65
-
66
- ## Environment Variables
67
-
68
- - `TEST_PLATFORM` - Filter tests by platform (`windows`, `mac`, `linux`)
69
- - `TD_OS` - Override the sandbox OS (defaults to `linux`)
70
- - `TD_API_KEY` - Your TestDriver API key (required)
71
- - `TD_API_ROOT` - API endpoint (optional)
72
- - `DEBUG_ENV` - Show environment variable loading (optional)
73
- - `DEBUG_EVENTS` - Enable detailed event logging (optional)
74
-
75
- ## Examples
76
-
77
- ```bash
78
- # Run only Windows tests on a Windows sandbox
79
- TEST_PLATFORM=windows npm run test:sdk
80
-
81
- # Run all tests but use a Windows sandbox
82
- TD_OS=windows npm run test:sdk
83
-
84
- # Run with debugging enabled
85
- DEBUG_ENV=true DEBUG_EVENTS=true npm run test:sdk
86
-
87
- # Watch mode for development
88
- npm run test:sdk:watch
89
-
90
- # Generate coverage report
91
- npm run test:sdk:coverage
92
- ```
93
-
94
- ## Test Structure
95
-
96
- Each test follows this pattern:
97
-
98
- ```javascript
99
- import { afterEach, beforeEach, describe, it } from "vitest";
100
- import {
101
- createTestClient,
102
- setupTest,
103
- teardownTest,
104
- } from "./setup/testHelpers.mjs";
105
-
106
- describe("My Test", () => {
107
- let testdriver;
108
-
109
- beforeEach(async () => {
110
- testdriver = createTestClient();
111
- await setupTest(testdriver);
112
- });
113
-
114
- afterEach(async () => {
115
- await teardownTest(testdriver);
116
- });
117
-
118
- it("should do something", async () => {
119
- // Your test logic
120
- });
121
- });
122
- ```
123
-
124
- ## See Also
125
-
126
- - [SDK README](../../SDK_README.md) - Full SDK documentation
127
- - [Quick Reference](./QUICK_REFERENCE.md) - SDK method quick reference
128
- - [Test Reporting](./TEST_REPORTING.md) - Test recording and reporting docs
@@ -1,245 +0,0 @@
1
- # TestDriver SDK Test Reporting
2
-
3
- This guide explains the enhanced test reporting system for the TestDriver SDK acceptance tests.
4
-
5
- ## Overview
6
-
7
- The SDK tests use **Vitest** with multiple reporters to provide comprehensive test feedback:
8
-
9
- 1. **Console Output** - Verbose, detailed logs during test execution
10
- 2. **JUnit XML** - For CI/CD integration and third-party tools
11
- 3. **JSON Results** - Machine-readable format for custom reporting
12
- 4. **HTML Report** - Interactive browser-based test results viewer
13
- 5. **GitHub Summary** - Markdown tables in GitHub Actions workflow summaries
14
-
15
- ## Running Tests Locally
16
-
17
- ### Basic Test Run
18
-
19
- ```bash
20
- npm run test:sdk
21
- ```
22
-
23
- This runs all SDK acceptance tests with verbose output.
24
-
25
- ### Watch Mode (for development)
26
-
27
- ```bash
28
- npm run test:sdk:watch
29
- ```
30
-
31
- Re-runs tests automatically when files change.
32
-
33
- ### Interactive UI
34
-
35
- ```bash
36
- npm run test:sdk:ui
37
- ```
38
-
39
- Opens Vitest's web UI for interactive test exploration.
40
-
41
- ### View Results After Running Tests
42
-
43
- After running tests, you have several options to view results:
44
-
45
- #### Terminal Summary
46
-
47
- ```bash
48
- npm run test:sdk:results
49
- ```
50
-
51
- Displays a formatted summary in your terminal with:
52
-
53
- - ✅ Passed test count
54
- - ❌ Failed test count and error details
55
- - ⏱️ Test duration
56
- - 📁 File-by-file breakdown
57
-
58
- #### HTML Report (Best for detailed analysis)
59
-
60
- ```bash
61
- npm run test:sdk:report
62
- ```
63
-
64
- Opens the interactive HTML report in your browser showing:
65
-
66
- - Detailed test execution timeline
67
- - File-by-file results
68
- - Error stack traces with code context
69
- - Test duration metrics
70
-
71
- Or manually open: `test-results/index.html`
72
-
73
- ## GitHub Actions Reporting
74
-
75
- When tests run in GitHub Actions, you get enhanced reporting automatically:
76
-
77
- ### 📊 GitHub Step Summary
78
-
79
- The workflow generates a comprehensive summary visible in the Actions run:
80
-
81
- - **Overview Table**: Pass/fail counts, duration, and totals
82
- - **Failed Tests Section**: Each failure with error messages and stack traces
83
- - **Passed Tests Section**: List of all passing tests organized by file
84
-
85
- To view: Go to the Actions tab → Select your workflow run → Check the "Summary" section
86
-
87
- ### 🧪 Test Summary Action
88
-
89
- The `test-summary/action` provides:
90
-
91
- - Test count badges
92
- - Duration metrics
93
- - Failure annotations in the Files Changed tab
94
-
95
- ### 📦 Test Artifacts
96
-
97
- All test results are uploaded as artifacts (retained for 7 days):
98
-
99
- - `junit.xml` - JUnit format for third-party tools
100
- - `results.json` - Machine-readable JSON
101
- - `index.html` - Interactive HTML report (download and open locally)
102
-
103
- To download artifacts:
104
-
105
- 1. Go to the workflow run
106
- 2. Scroll to "Artifacts" section at the bottom
107
- 3. Download `test-results.zip`
108
-
109
- ## Test Output Files
110
-
111
- All test results are saved to the `test-results/` directory:
112
-
113
- ```
114
- test-results/
115
- ├── junit.xml # JUnit XML format
116
- ├── results.json # Detailed JSON results
117
- └── index.html # Interactive HTML report
118
- ```
119
-
120
- Add this to your `.gitignore`:
121
-
122
- ```
123
- test-results/
124
- ```
125
-
126
- ## Reporters Explained
127
-
128
- ### 1. Verbose Reporter (Console)
129
-
130
- - Shows full test logs in real-time
131
- - Includes console.log output from tests
132
- - Color-coded pass/fail indicators
133
- - Stack traces for failures
134
-
135
- ### 2. JUnit Reporter
136
-
137
- - Industry-standard XML format
138
- - Compatible with Jenkins, Azure DevOps, etc.
139
- - Used by `test-summary/action`
140
-
141
- ### 3. JSON Reporter
142
-
143
- - Complete test results in JSON format
144
- - Programmatically parseable
145
- - Used by the custom results viewer script
146
-
147
- ### 4. HTML Reporter
148
-
149
- - Interactive web-based viewer
150
- - Visual timeline of test execution
151
- - Filterable and searchable results
152
- - Best for debugging failures locally
153
-
154
- ## Customizing Test Output
155
-
156
- ### Run a Single Test File
157
-
158
- ```bash
159
- npx vitest run testdriver/acceptance-sdk/assert.test.mjs
160
- ```
161
-
162
- ### Enable Even More Verbose Logging
163
-
164
- ```bash
165
- VERBOSE=true LOGGING=true npm run test:sdk
166
- ```
167
-
168
- ### Change Parallelism
169
-
170
- Edit `vitest.config.mjs`:
171
-
172
- ```javascript
173
- maxForks: 5, // Run 5 tests in parallel instead of 10
174
- ```
175
-
176
- ## Troubleshooting
177
-
178
- ### "No test results found" error
179
-
180
- Make sure you've run the tests first:
181
-
182
- ```bash
183
- npm run test:sdk
184
- ```
185
-
186
- ### HTML report won't open
187
-
188
- Manually navigate to and open `test-results/index.html` in your browser.
189
-
190
- ### Tests timeout
191
-
192
- Increase timeout in `vitest.config.mjs`:
193
-
194
- ```javascript
195
- testTimeout: 900000, // 15 minutes
196
- ```
197
-
198
- ## Best Practices
199
-
200
- 1. **Use `test:sdk:results`** for quick terminal summaries
201
- 2. **Use `test:sdk:report`** for deep debugging of failures
202
- 3. **Check GitHub Summary** in PR reviews for test status
203
- 4. **Download artifacts** from GitHub Actions for historical analysis
204
- 5. **Run `test:sdk:watch`** during development for fast feedback
205
-
206
- ## Example GitHub Summary Output
207
-
208
- ```markdown
209
- # 🧪 TestDriver SDK Test Results
210
-
211
- ## 📊 Overview
212
-
213
- | Metric | Count |
214
- | ----------- | ------- |
215
- | ✅ Passed | 18 |
216
- | ❌ Failed | 2 |
217
- | ⏭️ Skipped | 0 |
218
- | 📝 Total | 20 |
219
- | ⏱️ Duration | 145.23s |
220
-
221
- ## ❌ Failed Tests
222
-
223
- ### Assert Test > should assert the testdriver login page shows
224
-
225
- **File:** `testdriver/acceptance-sdk/assert.test.mjs`
226
-
227
- **Error:**
228
- ```
229
-
230
- AssertionError: expected false to be truthy
231
-
232
- ```
233
-
234
- ## ✅ Passed Tests
235
-
236
- ### type.test.mjs
237
- - ✅ should type text into input field
238
- - ✅ should clear and retype text
239
-
240
- ### scroll.test.mjs
241
- - ✅ should scroll down the page
242
- - ✅ should scroll to specific element
243
- ```
244
-
245
- This summary appears automatically in every GitHub Actions workflow run!
@@ -1,26 +0,0 @@
1
- /**
2
- * TestDriver SDK - Assert Test (Vitest)
3
- * Converted from: testdriver/acceptance/assert.yaml
4
- */
5
-
6
- import { describe, expect, it } from "vitest";
7
- import { TestDriver } from "../../src/vitest/hooks.mjs";
8
-
9
- describe("Assert Test", () => {
10
- it("should assert the testdriver login page shows", async (context) => {
11
- const testdriver = TestDriver(context, { headless: true, newSandbox: true });
12
-
13
- // provision.chrome() automatically calls ready() and starts dashcam
14
- await testdriver.provision.chrome({
15
- url: 'http://testdriver-sandbox.vercel.app/login',
16
- });
17
-
18
- // Assert the TestDriver.ai Sandbox login page is displayed
19
- const result = await testdriver.assert(
20
- "the TestDriver.ai Sandbox login page is displayed",
21
- );
22
-
23
- expect(result).toBeTruthy();
24
- });
25
- });
26
-
@@ -1,38 +0,0 @@
1
- /**
2
- * TestDriver Hooks API Demo
3
- * Demonstrates the new React-style hooks for Vitest
4
- *
5
- * This is the SIMPLEST way to use TestDriver with Vitest!
6
- */
7
-
8
- import { describe, expect, it } from "vitest";
9
- import { TestDriver } from "../../src/vitest/hooks.mjs";
10
-
11
- describe("Hooks API Demo", () => {
12
- it("should use hooks for automatic lifecycle management", async (context) => {
13
- // ✨ One line gets you TestDriver + Dashcam with full auto-lifecycle!
14
- const testdriver = TestDriver(context, { headless: true });
15
- await testdriver.provision.chrome({ url: 'http://testdriver-sandbox.vercel.app/login' });
16
-
17
- // Everything is automatic:
18
- // - Sandbox connection ✅
19
- // - Dashcam recording ✅
20
- // - Chrome launch ✅
21
- // - Recording stop ✅
22
- // - Cleanup ✅
23
-
24
- await testdriver.focusApplication("Google Chrome");
25
-
26
- const signInButton = await testdriver.find(
27
- "Sign In, black button below the password field",
28
- );
29
- await signInButton.click();
30
-
31
- const result = await testdriver.assert(
32
- "an error shows that fields are required",
33
- );
34
- expect(result).toBeTruthy();
35
-
36
- // That's it! Dashcam URL automatically registered with the test run
37
- });
38
- });
@@ -1,87 +0,0 @@
1
- /**
2
- * Examples demonstrating TestDriver Presets
3
- *
4
- * Presets provide pre-configured setups for common applications,
5
- * reducing boilerplate and making tests easier to write.
6
- */
7
-
8
- import { test } from 'vitest';
9
- import { chromePreset, createPreset, electronPreset, vscodePreset } from '../../src/presets/index.mjs';
10
-
11
- test('Chrome preset - simple navigation', async (context) => {
12
- const { browser } = await chromePreset(context, {
13
- url: 'http://testdriver-sandbox.vercel.app/',
14
- });
15
-
16
- // Browser is already open and focused on the URL
17
- const result = await browser.find('main heading text');
18
- console.log('Found heading:', result);
19
- }, 60000);
20
-
21
- test('Chrome preset - with custom options', async (context) => {
22
- const { browser, dashcam } = await chromePreset(context, {
23
- url: 'https://google.com',
24
- maximized: false,
25
- guest: false,
26
- dashcam: true, // Dashcam auto-starts and auto-stops
27
- });
28
-
29
- await browser.find('search box').type('testdriverai');
30
- console.log('Dashcam recording:', dashcam.isRecording());
31
- }, 60000);
32
-
33
- test.skip('VS Code preset - basic usage', async (context) => {
34
- const { vscode } = await vscodePreset(context, {
35
- workspace: '/tmp/test-project',
36
- });
37
-
38
- // VS Code is already open with the workspace loaded
39
- await vscode.find('File menu').click();
40
- await vscode.find('New File').click();
41
- }, 60000);
42
-
43
- test.skip('VS Code preset - with extensions', async (context) => {
44
- const { vscode } = await vscodePreset(context, {
45
- workspace: '/tmp/test-project',
46
- extensions: ['ms-python.python'],
47
- dashcam: true,
48
- });
49
-
50
- // Extensions are pre-installed, dashcam auto-recording
51
- await vscode.find('Python extension').click();
52
- }, 120000);
53
-
54
- test.skip('Custom preset - Electron app', async (context) => {
55
- const { app } = await electronPreset(context, {
56
- appPath: '/path/to/electron/app',
57
- args: ['--enable-logging'],
58
- });
59
-
60
- await app.find('main window').click();
61
- }, 60000);
62
-
63
- test.skip('Custom preset - create your own', async (context) => {
64
- // Create a custom preset for your application
65
- const firefoxPreset = createPreset({
66
- name: 'Firefox Browser',
67
- defaults: { os: 'linux', dashcam: true },
68
- async setup(context, client, dashcam, options) {
69
- const { url } = options;
70
-
71
- // Launch Firefox
72
- await client.exec('sh', `firefox "${url}" >/dev/null 2>&1 &`, 30000);
73
- await client.focusApplication('Firefox');
74
-
75
- return {
76
- browser: client,
77
- };
78
- },
79
- });
80
-
81
- // Use your custom preset
82
- const { browser } = await firefoxPreset(context, {
83
- url: 'https://example.com',
84
- });
85
-
86
- await browser.find('page content').click();
87
- }, 60000);