testdriverai 6.2.2 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/.github/workflows/acceptance-linux.yml +75 -0
  2. package/.github/workflows/acceptance-sdk-tests.yml +133 -0
  3. package/.vscode/settings.json +5 -1
  4. package/AGENTS.md +550 -0
  5. package/CODEOWNERS +0 -1
  6. package/README.md +126 -0
  7. package/{testdriver → _testdriver}/acceptance/drag-and-drop.yaml +2 -2
  8. package/{testdriver → _testdriver}/acceptance/snippets/login.yaml +1 -1
  9. package/_testdriver/examples/desktop/lifecycle/prerun.yaml +0 -0
  10. package/{testdriver → _testdriver}/examples/web/lifecycle/prerun.yaml +6 -1
  11. package/{testdriver → _testdriver}/lifecycle/postrun.yaml +3 -2
  12. package/_testdriver/lifecycle/prerun.yaml +15 -0
  13. package/{testdriver → _testdriver}/lifecycle/provision.yaml +7 -2
  14. package/agent/index.js +300 -85
  15. package/agent/interface.js +15 -0
  16. package/agent/lib/cache.js +142 -0
  17. package/agent/lib/commander.js +1 -39
  18. package/agent/lib/commands.js +910 -296
  19. package/agent/lib/redraw.js +129 -41
  20. package/agent/lib/sandbox.js +29 -6
  21. package/agent/lib/sdk.js +22 -0
  22. package/agent/lib/system.js +0 -3
  23. package/agent/lib/validation.js +1 -7
  24. package/debug-locate-response.js +82 -0
  25. package/debugger/index.html +15 -4
  26. package/docs/ARCHITECTURE.md +424 -0
  27. package/docs/AWESOME_LOGS_QUICK_REF.md +100 -0
  28. package/docs/MIGRATION.md +425 -0
  29. package/docs/PRESETS.md +210 -0
  30. package/docs/QUICK_START_TEST_RECORDING.md +215 -0
  31. package/docs/SDK_AWESOME_LOGS.md +468 -0
  32. package/docs/TEST_RECORDING.md +388 -0
  33. package/docs/docs.json +286 -152
  34. package/docs/guide/best-practices-polling.mdx +154 -0
  35. package/docs/sdk-browser-rendering.md +167 -0
  36. package/docs/v6/getting-started/self-hosting.mdx +407 -0
  37. package/docs/{guide → v6/guide}/dashcam.mdx +1 -1
  38. package/docs/{guide → v6/guide}/environment-variables.mdx +4 -5
  39. package/docs/{guide → v6/guide}/lifecycle.mdx +1 -1
  40. package/docs/v6/overview/comparison.mdx +101 -0
  41. package/docs/v7/README.md +135 -0
  42. package/docs/v7/api/ai.mdx +205 -0
  43. package/docs/v7/api/assert.mdx +285 -0
  44. package/docs/v7/api/assertions.mdx +403 -0
  45. package/docs/v7/api/click.mdx +287 -0
  46. package/docs/v7/api/client.mdx +322 -0
  47. package/docs/v7/api/dashcam.mdx +497 -0
  48. package/docs/v7/api/doubleClick.mdx +102 -0
  49. package/docs/v7/api/elements.mdx +479 -0
  50. package/docs/v7/api/exec.mdx +346 -0
  51. package/docs/v7/api/find.mdx +316 -0
  52. package/docs/v7/api/focusApplication.mdx +294 -0
  53. package/docs/v7/api/hover.mdx +279 -0
  54. package/docs/v7/api/mouseDown.mdx +161 -0
  55. package/docs/v7/api/mouseUp.mdx +164 -0
  56. package/docs/v7/api/pressKeys.mdx +349 -0
  57. package/docs/v7/api/rightClick.mdx +123 -0
  58. package/docs/v7/api/sandbox.mdx +404 -0
  59. package/docs/v7/api/scroll.mdx +300 -0
  60. package/docs/v7/api/type.mdx +314 -0
  61. package/docs/v7/commands/assert.mdx +45 -0
  62. package/docs/v7/commands/exec.mdx +282 -0
  63. package/docs/v7/commands/focus-application.mdx +44 -0
  64. package/docs/v7/commands/hover-image.mdx +69 -0
  65. package/docs/v7/commands/hover-text.mdx +47 -0
  66. package/docs/v7/commands/if.mdx +53 -0
  67. package/docs/v7/commands/match-image.mdx +67 -0
  68. package/docs/v7/commands/press-keys.mdx +87 -0
  69. package/docs/v7/commands/remember.mdx +49 -0
  70. package/docs/v7/commands/run.mdx +44 -0
  71. package/docs/v7/commands/scroll-until-image.mdx +66 -0
  72. package/docs/v7/commands/scroll-until-text.mdx +60 -0
  73. package/docs/v7/commands/scroll.mdx +69 -0
  74. package/docs/v7/commands/type.mdx +45 -0
  75. package/docs/v7/commands/wait-for-image.mdx +54 -0
  76. package/docs/v7/commands/wait-for-text.mdx +48 -0
  77. package/docs/v7/commands/wait.mdx +45 -0
  78. package/docs/v7/getting-started/configuration.mdx +380 -0
  79. package/docs/v7/getting-started/quickstart.mdx +332 -0
  80. package/docs/v7/guides/best-practices.mdx +486 -0
  81. package/docs/v7/guides/caching-ai.mdx +215 -0
  82. package/docs/v7/guides/caching-selectors.mdx +292 -0
  83. package/docs/v7/guides/caching.mdx +366 -0
  84. package/docs/v7/guides/ci-cd/azure.mdx +587 -0
  85. package/docs/v7/guides/ci-cd/circleci.mdx +523 -0
  86. package/docs/v7/guides/ci-cd/github-actions.mdx +457 -0
  87. package/docs/v7/guides/ci-cd/gitlab.mdx +498 -0
  88. package/docs/v7/guides/ci-cd/jenkins.mdx +664 -0
  89. package/docs/v7/guides/ci-cd/travis.mdx +438 -0
  90. package/docs/v7/guides/debugging.mdx +349 -0
  91. package/docs/v7/guides/faq.mdx +393 -0
  92. package/docs/v7/guides/migration.mdx +562 -0
  93. package/docs/v7/guides/performance.mdx +517 -0
  94. package/docs/{getting-started → v7/guides}/self-hosting.mdx +11 -12
  95. package/docs/v7/guides/troubleshooting.mdx +526 -0
  96. package/docs/v7/guides/vitest-plugin.mdx +477 -0
  97. package/docs/v7/guides/vitest.mdx +535 -0
  98. package/docs/v7/platforms/linux.mdx +308 -0
  99. package/docs/v7/platforms/macos.mdx +433 -0
  100. package/docs/v7/platforms/windows.mdx +430 -0
  101. package/docs/v7/playwright.mdx +342 -0
  102. package/docs/v7/presets/chrome-extension.mdx +223 -0
  103. package/docs/v7/presets/chrome.mdx +287 -0
  104. package/docs/v7/presets/electron.mdx +435 -0
  105. package/docs/v7/presets/vscode.mdx +398 -0
  106. package/docs/v7/presets/webapp.mdx +396 -0
  107. package/docs/v7/progressive-apis/CORE.md +459 -0
  108. package/docs/v7/progressive-apis/HOOKS.md +360 -0
  109. package/docs/v7/progressive-apis/PROGRESSIVE_DISCLOSURE.md +230 -0
  110. package/docs/v7/progressive-apis/PROVISION.md +266 -0
  111. package/eslint.config.js +19 -1
  112. package/interfaces/cli/lib/base.js +10 -4
  113. package/interfaces/logger.js +2 -1
  114. package/interfaces/shared-test-state.mjs +69 -0
  115. package/interfaces/vitest-plugin.mjs +830 -0
  116. package/package.json +29 -5
  117. package/schema.json +8 -29
  118. package/scripts/view-test-results.mjs +96 -0
  119. package/sdk-log-formatter.js +714 -0
  120. package/sdk.d.ts +1028 -0
  121. package/sdk.js +2567 -0
  122. package/{.github/workflows/self-hosted.yml → self-hosted.yml} +13 -4
  123. package/setup/aws/cloudformation.yaml +9 -2
  124. package/src/core/Dashcam.js +469 -0
  125. package/src/core/index.d.ts +150 -0
  126. package/src/core/index.js +12 -0
  127. package/src/presets/index.mjs +331 -0
  128. package/src/vitest/extended.mjs +108 -0
  129. package/src/vitest/hooks.d.ts +119 -0
  130. package/src/vitest/hooks.mjs +298 -0
  131. package/src/vitest/index.mjs +64 -0
  132. package/src/vitest/lifecycle.mjs +277 -0
  133. package/src/vitest/utils.mjs +150 -0
  134. package/test/dashcam.test.js +137 -0
  135. package/test/mcp-example-test.yaml +27 -0
  136. package/testdriver/acceptance-sdk/QUICK_REFERENCE.md +61 -0
  137. package/testdriver/acceptance-sdk/README.md +128 -0
  138. package/testdriver/acceptance-sdk/TEST_REPORTING.md +245 -0
  139. package/testdriver/acceptance-sdk/assert.test.mjs +26 -0
  140. package/testdriver/acceptance-sdk/auto-cache-key-demo.test.mjs +56 -0
  141. package/testdriver/acceptance-sdk/chrome-extension.test.mjs +89 -0
  142. package/testdriver/acceptance-sdk/drag-and-drop.test.mjs +58 -0
  143. package/testdriver/acceptance-sdk/element-not-found.test.mjs +25 -0
  144. package/testdriver/acceptance-sdk/exec-js.test.mjs +43 -0
  145. package/testdriver/acceptance-sdk/exec-output.test.mjs +59 -0
  146. package/testdriver/acceptance-sdk/exec-pwsh.test.mjs +57 -0
  147. package/testdriver/acceptance-sdk/focus-window.test.mjs +36 -0
  148. package/testdriver/acceptance-sdk/formatted-logging.test.mjs +26 -0
  149. package/testdriver/acceptance-sdk/hooks-example.test.mjs +38 -0
  150. package/testdriver/acceptance-sdk/hover-image.test.mjs +34 -0
  151. package/testdriver/acceptance-sdk/hover-text-with-description.test.mjs +38 -0
  152. package/testdriver/acceptance-sdk/hover-text.test.mjs +27 -0
  153. package/testdriver/acceptance-sdk/match-image.test.mjs +36 -0
  154. package/testdriver/acceptance-sdk/presets-example.test.mjs +87 -0
  155. package/testdriver/acceptance-sdk/press-keys.test.mjs +50 -0
  156. package/testdriver/acceptance-sdk/prompt.test.mjs +33 -0
  157. package/testdriver/acceptance-sdk/scroll-keyboard.test.mjs +38 -0
  158. package/testdriver/acceptance-sdk/scroll-until-image.test.mjs +39 -0
  159. package/testdriver/acceptance-sdk/scroll-until-text.test.mjs +28 -0
  160. package/testdriver/acceptance-sdk/scroll.test.mjs +41 -0
  161. package/testdriver/acceptance-sdk/setup/globalTeardown.mjs +11 -0
  162. package/testdriver/acceptance-sdk/setup/testHelpers.mjs +420 -0
  163. package/testdriver/acceptance-sdk/setup/vitestSetup.mjs +40 -0
  164. package/testdriver/acceptance-sdk/sully-ai.test.mjs +234 -0
  165. package/testdriver/acceptance-sdk/test-console-logs.test.mjs +42 -0
  166. package/testdriver/acceptance-sdk/type-checking-demo.js +49 -0
  167. package/testdriver/acceptance-sdk/type.test.mjs +45 -0
  168. package/verify-element-api.js +89 -0
  169. package/verify-types.js +0 -0
  170. package/vitest.config.example.js +19 -0
  171. package/vitest.config.mjs +66 -0
  172. package/vitest.config.mjs.bak +44 -0
  173. package/.github/workflows/acceptance-v6.yml +0 -169
  174. package/.vscode/mcp.json +0 -9
  175. package/docs/overview/comparison.mdx +0 -82
  176. package/testdriver/lifecycle/prerun.yaml +0 -17
  177. /package/{testdriver/examples/desktop/lifecycle/prerun.yaml → .env.example} +0 -0
  178. /package/{testdriver → _testdriver}/acceptance/assert.yaml +0 -0
  179. /package/{testdriver → _testdriver}/acceptance/dashcam.yaml +0 -0
  180. /package/{testdriver → _testdriver}/acceptance/embed.yaml +0 -0
  181. /package/{testdriver → _testdriver}/acceptance/exec-js.yaml +0 -0
  182. /package/{testdriver → _testdriver}/acceptance/exec-output.yaml +0 -0
  183. /package/{testdriver → _testdriver}/acceptance/exec-shell.yaml +0 -0
  184. /package/{testdriver → _testdriver}/acceptance/focus-window.yaml +0 -0
  185. /package/{testdriver → _testdriver}/acceptance/hover-image.yaml +0 -0
  186. /package/{testdriver → _testdriver}/acceptance/hover-text-with-description.yaml +0 -0
  187. /package/{testdriver → _testdriver}/acceptance/hover-text.yaml +0 -0
  188. /package/{testdriver → _testdriver}/acceptance/if-else.yaml +0 -0
  189. /package/{testdriver → _testdriver}/acceptance/match-image.yaml +0 -0
  190. /package/{testdriver → _testdriver}/acceptance/press-keys.yaml +0 -0
  191. /package/{testdriver → _testdriver}/acceptance/prompt.yaml +0 -0
  192. /package/{testdriver → _testdriver}/acceptance/remember.yaml +0 -0
  193. /package/{testdriver → _testdriver}/acceptance/screenshots/cart.png +0 -0
  194. /package/{testdriver → _testdriver}/acceptance/scroll-keyboard.yaml +0 -0
  195. /package/{testdriver → _testdriver}/acceptance/scroll-until-image.yaml +0 -0
  196. /package/{testdriver → _testdriver}/acceptance/scroll-until-text.yaml +0 -0
  197. /package/{testdriver → _testdriver}/acceptance/scroll.yaml +0 -0
  198. /package/{testdriver → _testdriver}/acceptance/snippets/match-cart.yaml +0 -0
  199. /package/{testdriver → _testdriver}/acceptance/type.yaml +0 -0
  200. /package/{testdriver → _testdriver}/behavior/failure.yaml +0 -0
  201. /package/{testdriver → _testdriver}/behavior/hover-text.yaml +0 -0
  202. /package/{testdriver → _testdriver}/behavior/lifecycle/postrun.yaml +0 -0
  203. /package/{testdriver → _testdriver}/behavior/lifecycle/prerun.yaml +0 -0
  204. /package/{testdriver → _testdriver}/behavior/lifecycle/provision.yaml +0 -0
  205. /package/{testdriver → _testdriver}/behavior/secrets.yaml +0 -0
  206. /package/{testdriver → _testdriver}/edge-cases/dashcam-chrome.yaml +0 -0
  207. /package/{testdriver → _testdriver}/edge-cases/exec-pwsh-multiline.yaml +0 -0
  208. /package/{testdriver → _testdriver}/edge-cases/js-exception.yaml +0 -0
  209. /package/{testdriver → _testdriver}/edge-cases/js-promise.yaml +0 -0
  210. /package/{testdriver → _testdriver}/edge-cases/lifecycle/postrun.yaml +0 -0
  211. /package/{testdriver → _testdriver}/edge-cases/prompt-in-middle.yaml +0 -0
  212. /package/{testdriver → _testdriver}/edge-cases/prompt-nested.yaml +0 -0
  213. /package/{testdriver → _testdriver}/edge-cases/success-test.yaml +0 -0
  214. /package/{testdriver → _testdriver}/examples/android/example.yaml +0 -0
  215. /package/{testdriver → _testdriver}/examples/android/lifecycle/postrun.yaml +0 -0
  216. /package/{testdriver → _testdriver}/examples/android/lifecycle/provision.yaml +0 -0
  217. /package/{testdriver → _testdriver}/examples/android/readme.md +0 -0
  218. /package/{testdriver → _testdriver}/examples/chrome-extension/lifecycle/provision.yaml +0 -0
  219. /package/{testdriver → _testdriver}/examples/desktop/lifecycle/provision.yaml +0 -0
  220. /package/{testdriver → _testdriver}/examples/vscode-extension/lifecycle/provision.yaml +0 -0
  221. /package/{testdriver → _testdriver}/examples/web/lifecycle/postrun.yaml +0 -0
  222. /package/docs/{account → v6/account}/dashboard.mdx +0 -0
  223. /package/docs/{account → v6/account}/enterprise.mdx +0 -0
  224. /package/docs/{account → v6/account}/pricing.mdx +0 -0
  225. /package/docs/{account → v6/account}/projects.mdx +0 -0
  226. /package/docs/{account → v6/account}/team.mdx +0 -0
  227. /package/docs/{action → v6/action}/ami.mdx +0 -0
  228. /package/docs/{action → v6/action}/performance.mdx +0 -0
  229. /package/docs/{action → v6/action}/secrets.mdx +0 -0
  230. /package/docs/{apps → v6/apps}/chrome-extensions.mdx +0 -0
  231. /package/docs/{apps → v6/apps}/desktop-apps.mdx +0 -0
  232. /package/docs/{apps → v6/apps}/mobile-apps.mdx +0 -0
  233. /package/docs/{apps → v6/apps}/static-websites.mdx +0 -0
  234. /package/docs/{apps → v6/apps}/tauri-apps.mdx +0 -0
  235. /package/docs/{bugs → v6/bugs}/jira.mdx +0 -0
  236. /package/docs/{cli → v6/cli}/overview.mdx +0 -0
  237. /package/docs/{commands → v6/commands}/assert.mdx +0 -0
  238. /package/docs/{commands → v6/commands}/exec.mdx +0 -0
  239. /package/docs/{commands → v6/commands}/focus-application.mdx +0 -0
  240. /package/docs/{commands → v6/commands}/hover-image.mdx +0 -0
  241. /package/docs/{commands → v6/commands}/hover-text.mdx +0 -0
  242. /package/docs/{commands → v6/commands}/if.mdx +0 -0
  243. /package/docs/{commands → v6/commands}/match-image.mdx +0 -0
  244. /package/docs/{commands → v6/commands}/press-keys.mdx +0 -0
  245. /package/docs/{commands → v6/commands}/remember.mdx +0 -0
  246. /package/docs/{commands → v6/commands}/run.mdx +0 -0
  247. /package/docs/{commands → v6/commands}/scroll-until-image.mdx +0 -0
  248. /package/docs/{commands → v6/commands}/scroll-until-text.mdx +0 -0
  249. /package/docs/{commands → v6/commands}/scroll.mdx +0 -0
  250. /package/docs/{commands → v6/commands}/type.mdx +0 -0
  251. /package/docs/{commands → v6/commands}/wait-for-image.mdx +0 -0
  252. /package/docs/{commands → v6/commands}/wait-for-text.mdx +0 -0
  253. /package/docs/{commands → v6/commands}/wait.mdx +0 -0
  254. /package/docs/{exporting → v6/exporting}/junit.mdx +0 -0
  255. /package/docs/{exporting → v6/exporting}/playwright.mdx +0 -0
  256. /package/docs/{features → v6/features}/auto-healing.mdx +0 -0
  257. /package/docs/{features → v6/features}/generation.mdx +0 -0
  258. /package/docs/{features → v6/features}/parallel-testing.mdx +0 -0
  259. /package/docs/{features → v6/features}/reusable-snippets.mdx +0 -0
  260. /package/docs/{features → v6/features}/selectorless.mdx +0 -0
  261. /package/docs/{features → v6/features}/visual-assertions.mdx +0 -0
  262. /package/docs/{getting-started → v6/getting-started}/ci.mdx +0 -0
  263. /package/docs/{getting-started → v6/getting-started}/cli.mdx +0 -0
  264. /package/docs/{getting-started → v6/getting-started}/editing.mdx +0 -0
  265. /package/docs/{getting-started → v6/getting-started}/playwright.mdx +0 -0
  266. /package/docs/{getting-started → v6/getting-started}/running.mdx +0 -0
  267. /package/docs/{getting-started → v6/getting-started}/vscode.mdx +0 -0
  268. /package/docs/{guide → v6/guide}/assertions.mdx +0 -0
  269. /package/docs/{guide → v6/guide}/authentication.mdx +0 -0
  270. /package/docs/{guide → v6/guide}/code.mdx +0 -0
  271. /package/docs/{guide → v6/guide}/locating.mdx +0 -0
  272. /package/docs/{guide → v6/guide}/protips.mdx +0 -0
  273. /package/docs/{guide → v6/guide}/variables.mdx +0 -0
  274. /package/docs/{guide → v6/guide}/waiting.mdx +0 -0
  275. /package/docs/{importing → v6/importing}/csv.mdx +0 -0
  276. /package/docs/{importing → v6/importing}/gherkin.mdx +0 -0
  277. /package/docs/{importing → v6/importing}/jira.mdx +0 -0
  278. /package/docs/{importing → v6/importing}/testrail.mdx +0 -0
  279. /package/docs/{integrations → v6/integrations}/electron.mdx +0 -0
  280. /package/docs/{integrations → v6/integrations}/netlify.mdx +0 -0
  281. /package/docs/{integrations → v6/integrations}/vercel.mdx +0 -0
  282. /package/docs/{interactive → v6/interactive}/explore.mdx +0 -0
  283. /package/docs/{interactive → v6/interactive}/run.mdx +0 -0
  284. /package/docs/{interactive → v6/interactive}/save.mdx +0 -0
  285. /package/docs/{overview → v6/overview}/faq.mdx +0 -0
  286. /package/docs/{overview → v6/overview}/performance.mdx +0 -0
  287. /package/docs/{overview → v6/overview}/quickstart.mdx +0 -0
  288. /package/docs/{overview → v6/overview}/what-is-testdriver.mdx +0 -0
  289. /package/docs/{scenarios → v6/scenarios}/ai-chatbot.mdx +0 -0
  290. /package/docs/{scenarios → v6/scenarios}/cookie-banner.mdx +0 -0
  291. /package/docs/{scenarios → v6/scenarios}/file-upload.mdx +0 -0
  292. /package/docs/{scenarios → v6/scenarios}/form-filling.mdx +0 -0
  293. /package/docs/{scenarios → v6/scenarios}/log-in.mdx +0 -0
  294. /package/docs/{scenarios → v6/scenarios}/pdf-generation.mdx +0 -0
  295. /package/docs/{scenarios → v6/scenarios}/spell-check.mdx +0 -0
  296. /package/docs/{security → v6/security}/action.mdx +0 -0
  297. /package/docs/{security → v6/security}/agent.mdx +0 -0
  298. /package/docs/{security → v6/security}/platform.mdx +0 -0
  299. /package/docs/{tutorials → v6/tutorials}/advanced-test.mdx +0 -0
  300. /package/docs/{tutorials → v6/tutorials}/basic-test.mdx +0 -0
@@ -0,0 +1,49 @@
1
+ ---
2
+ title: "remember"
3
+ sidebarTitle: "remember"
4
+ description: "Save a variable to use later."
5
+ icon: "brain"
6
+ mode: "wide"
7
+ ---
8
+
9
+ import Replay from "/snippets/tests/remember-replay.mdx";
10
+ import Example from "/snippets/tests/remember-yaml.mdx";
11
+
12
+ <Replay />
13
+ <Example />
14
+
15
+ ## Description
16
+
17
+ The `remember` command is used to save a variable for later use. This is useful for storing values that you want to reference in subsequent commands or steps, **especially for things that are dynamic or change frequently from run to run**.
18
+
19
+ ## Arguments
20
+
21
+ | Argument | Type | Description |
22
+ | :-----------: | :------: | :-------------------------------------------------------- |
23
+ | `output` | `string` | The variable name you will use to recall the value later. |
24
+ | `description` | `string` | A prompt describing the value you want to store. |
25
+
26
+ ---
27
+
28
+ ## Example usage
29
+
30
+ ```yaml
31
+ - command: remember
32
+ description: The date value shown to the right of 'Order Date'
33
+ output: my_variable
34
+ ```
35
+
36
+ ## Protips
37
+
38
+ - Use the output later with this syntax `${OUTPUT.my_variable}`.
39
+ - The `remember` command does not persist variables across different test runs. If you need to store values for later use in different test runs, consider using external storage solutions or environment variables.
40
+ - For now, the `remember` command only supports string values. If you need to store complex data types, you may use `remember` multiple times for the values. This may change in a later version.
41
+
42
+ ## Gotchas
43
+
44
+ - Ensure the variable name is unique to avoid overwriting existing variables.
45
+ - The variable name is case-sensitive, so `my_variable` and `My_Variable` would be treated as different variables.
46
+
47
+ ## Notes
48
+
49
+ - The `remember` command is ideal for storing values that are generated during the test run, such as timestamps, IDs, the text value of a link you might click later, or any other dynamic data.
@@ -0,0 +1,44 @@
1
+ ---
2
+ title: "run"
3
+ sidebarTitle: "run"
4
+ description: "Embed and execute another file within the current script."
5
+ icon: "play"
6
+ mode: "wide"
7
+ ---
8
+
9
+ ## Description
10
+
11
+ The `run` command is used to embed and execute another file within the current script. This is **useful for reusing common sequences of commands or modularizing your scripts** for better organization and maintainability.
12
+
13
+ ## Arguments
14
+
15
+ | Argument | Type | Description |
16
+ | -------- | -------- | :-------------------------------------------------------------------------------------------- |
17
+ | `file` | `string` | The path to the file to embed and run. Should be relative to the root of your git repository. |
18
+
19
+ ## Example usage
20
+
21
+ ```yaml
22
+ command: run
23
+ file: relative/path/to/another-script.yaml
24
+ ```
25
+
26
+ ## Protips
27
+
28
+ - Use the `run` command to centralize reusable logic, such as login flows or setup steps, into separate files.
29
+ - Ensure the file path is relative to the current test file's directory. For example, if the test file is at `testdriver/homepage/chat-functionalities.yaml` and say the login snippet is present at the conventional `testdriver/snippets/login.yaml` it should be referrenced as :
30
+
31
+ ```yaml highlight={2}
32
+ command: run
33
+ file: ../snippets/login.yaml
34
+ ```
35
+
36
+ ## Gotchas
37
+
38
+ - If the specified file doesn't exist or contains errors, the command will fail.
39
+ - Ensure the embedded file is compatible with the current script's context, such as variable dependencies or session requirements.
40
+
41
+ ## Notes
42
+
43
+ - The `run` command is ideal for creating modular and maintainable test scripts by reusing common workflows.
44
+ - This command supports nesting, allowing you to call scripts that themselves use the `run` command.
@@ -0,0 +1,66 @@
1
+ ---
2
+ title: "scroll-until-image"
3
+ sidebarTitle: "scroll-until-image"
4
+ description: "Scroll the screen until an image matching the description is found."
5
+ icon: "film-simple"
6
+ mode: "wide"
7
+ ---
8
+
9
+ import Replay from "/snippets/tests/scroll-until-image-replay.mdx";
10
+ import Example from "/snippets/tests/scroll-until-image-yaml.mdx";
11
+
12
+ <Replay />
13
+ <Example />
14
+
15
+ ## Description
16
+
17
+ The `scroll-until-image` command is used to scroll the screen in a specified direction until an image matching the given description is found. This is useful for navigating to visual elements that aren't initially visible on the screen.
18
+
19
+ ## Arguments
20
+
21
+ | Argument | Type | Description |
22
+ | :-----------: | :-------: | :---------------------------------------------------------------------------------------------------------------------- |
23
+ | `description` | `string` | A description of the image and what it represents. |
24
+ | `direction` | `string` | (Optional) The direction to scroll. Available directions are: `up`, `down`, `left`, `right`. Defaults to `down`. |
25
+ | `distance` | `number` | (Optional) The maximum number of pixels to scroll before giving up. Default is `10000`. |
26
+ | `method` | `string` | (Optional) The method to use to scroll the page. Available methods are: `mouse` and `keyboard`. Defaults to `keyboard`. |
27
+ | `path` | `string` | (Optional) The relative path to the image file that needs to be matched on the screen. |
28
+ | `invert` | `boolean` | (Optional) If set to `true`, the command will scroll until the specified image is NOT detected. Default is `false`. |
29
+
30
+ <Note>
31
+ Use either the `description` or `path` argument to match an image on the
32
+ screen. If you are using `path` argument, make sure to upload an accurate
33
+ representation of the actual image and reference it relative to the current
34
+ test path.
35
+ </Note>
36
+
37
+ ## Example usage
38
+
39
+ ```yaml
40
+ command: scroll-until-image
41
+ description: Submit at the bottom of the form
42
+ direction: down
43
+ ```
44
+
45
+ Or, you can use the `path` argument to match an image on the screen (similar to [`match-image`](./match-image)):
46
+
47
+ ```yaml testdriver/scroll-until-image.yaml
48
+ command: scroll-until-image
49
+ path: screenshots/button.png
50
+ direction: down
51
+ ```
52
+
53
+ ## Protips
54
+
55
+ - Use clear and concise descriptions for the image to improve detection accuracy.
56
+ - Adjust the `distance` value to control how far the command scrolls before giving up.
57
+ - Combine this command with other commands like `hover-image` or `match-image` to interact with the located image.
58
+
59
+ ## Gotchas
60
+
61
+ - If the image can't be located within the specified `distance`, the command will fail.
62
+ - Ensure the description accurately represents the image to avoid detection issues.
63
+
64
+ ---
65
+
66
+ The `scroll-until-image` command is ideal for navigating to visual elements that are off-screen and can't be located using text-based commands.
@@ -0,0 +1,60 @@
1
+ ---
2
+ title: "scroll-until-text"
3
+ sidebarTitle: "scroll-until-text"
4
+ description: "Scroll the screen until the specified text is found."
5
+ icon: "scroll"
6
+ mode: "wide"
7
+ ---
8
+
9
+ import Replay from "/snippets/tests/scroll-until-text-replay.mdx";
10
+ import Example from "/snippets/tests/scroll-until-text-yaml.mdx";
11
+
12
+ <Replay />
13
+ <Example />
14
+
15
+ ## Description
16
+
17
+ The `scroll-until-text` command is used to scroll the screen in a specified direction until the specified text is found. This is useful for navigating to elements that aren't initially visible on the screen.
18
+
19
+ ## Arguments
20
+
21
+ | Argument | Type | Description |
22
+ | :---------: | :-------: | :---------------------------------------------------------------------------------------------------------------------- |
23
+ | `text` | `string` | The text to find on the screen. Longer and unique are better. Note this is **case sensitive** |
24
+ | `direction` | `string` | (Optional) The direction to scroll. Available directions are: `up`, `down`, `left`, `right`. Defaults to `down`. |
25
+ | `method` | `string` | (Optional) The method to use to scroll the page. Available methods are: `mouse` and `keyboard`. Defaults to `keyboard`. |
26
+ | `distance` | `number` | (Optional) The maximum number of pixels to scroll before giving up. Default is `10000`. |
27
+ | `invert` | `boolean` | (Optional) If set to `true`, the command will scroll until the specified text is NOT detected. Default is `false`. |
28
+
29
+ <Note>
30
+ If the method is `keyboard` it just searches for the string by doing `ctrl + f`.
31
+ This is helpful if there is a single string match that you want to operate with.
32
+
33
+ If you are using `mouse` method, the command will manually scroll the page (based on the `distance`) until the text is found.
34
+
35
+ </Note>
36
+
37
+ ## Example usage
38
+
39
+ ```yaml
40
+ command: scroll-until-text
41
+ text: Sign Up
42
+ direction: down
43
+ distance: 1000
44
+ ```
45
+
46
+ ## Protips
47
+
48
+ - Use unique and specific text to improve detection accuracy.
49
+ - Adjust the `distance` value to control how far the command scrolls before giving up.
50
+ - If you don't specify a `distance`, the command will scroll 300 pixels at a time, giving up after 5 attempts.
51
+
52
+ ## Gotchas
53
+
54
+ - If the text can't be located within the specified `distance`, the command will fail.
55
+ - Ensure the text is visible and matches exactly, as variations in font size, style, or screen resolution may affect detection accuracy.
56
+ - Note that `text` is case-sensitive, so **Sign Up** and **sign up** would be treated as different strings.
57
+
58
+ ---
59
+
60
+ The `scroll-until-text` command is ideal for navigating to elements that are off-screen and can't be located using other commands.
@@ -0,0 +1,69 @@
1
+ ---
2
+ title: "scroll"
3
+ sidebarTitle: "scroll"
4
+ description: "Scroll the screen in a specified direction using the mouse wheel."
5
+ icon: "computer-mouse"
6
+ mode: "wide"
7
+ ---
8
+
9
+ import Replay from "/snippets/tests/scroll-replay.mdx";
10
+ import Example from "/snippets/tests/scroll-yaml.mdx";
11
+
12
+ <Replay />
13
+ <Example />
14
+
15
+ ## Description
16
+
17
+ The `scroll` command is used to scroll the screen in a specified direction using the mouse wheel. This is useful for navigating through content that extends beyond the visible area.
18
+
19
+ ## Arguments
20
+
21
+ | Argument | Type | Description |
22
+ | :---------: | :------: | :------------------------------------------------------------------------------------ |
23
+ | `direction` | `string` | The direction to scroll. Available directions are: `up`, `down`, `left`, `right`. |
24
+ | `method` | `string` | The method to scroll. Available methods are: `mouse`, `keyboard`. Defaults to `mouse` |
25
+ | `amount` | `number` | (Optional) Pixels to scroll. If not specified, a default amount of 300 is used. |
26
+
27
+ <Warning>
28
+ The `amount` should only be used when the `method` is mouse. If the `method`
29
+ is keyboard, it is redundant as the action performed is pressing the `pageup`
30
+ or `pagedown` keys.
31
+ </Warning>
32
+
33
+ ## Example usage
34
+
35
+ ```yaml
36
+ - command: scroll
37
+ direction: down
38
+ method: mouse
39
+ amount: 100
40
+ ```
41
+
42
+ ## Protips
43
+
44
+ - Be sure to focus the application and frame you are trying to scroll before using the command.
45
+ - Use precise `amount` values to control the scrolling distance for better accuracy in your tests.
46
+ - Combine the `scroll` command with other commands like `hover-text` or `match-image` to interact with elements that are initially off-screen.
47
+ - If you wish to scroll dynamically till a specific text or image appears, use [scroll-until-text](/commands/scroll-until-text) or [scroll-until-image](/commands/scroll-until-image) commands.
48
+ - The most reliable way to scroll to the top or bottom of the page is to use the `home` and `end` keys:
49
+
50
+ ```yaml
51
+ # Scroll to the top of the page
52
+ - command: press-keys
53
+ keys:
54
+ - home
55
+ # Scroll to the bottom of the page
56
+ - command: press-keys
57
+ keys:
58
+ - end
59
+ ```
60
+
61
+ ## Gotchas
62
+
63
+ - Scrolling too far may cause elements to move out of view. Adjust the `amount` value as needed.
64
+ - Ensure the application or browser window is in focus when using this command to avoid unexpected behavior.
65
+
66
+ ## Notes
67
+
68
+ - The `scroll` command is ideal for navigating through long pages or lists during automated tests.
69
+ - This command supports both vertical and horizontal scrolling for flexible navigation.
@@ -0,0 +1,45 @@
1
+ ---
2
+ title: "type"
3
+ sidebarTitle: "type"
4
+ description: "Simulate typing a string using keyboard emulation."
5
+ icon: "typewriter"
6
+ mode: "wide"
7
+ ---
8
+
9
+ import Replay from "/snippets/tests/type-replay.mdx";
10
+ import Example from "/snippets/tests/type-yaml.mdx";
11
+
12
+ <Replay />
13
+ <Example />
14
+
15
+ ## Description
16
+
17
+ The `type` command is used to simulate typing a string using keyboard emulation. This is useful for entering text into input fields or performing text-based interactions.
18
+
19
+ ## Arguments
20
+
21
+ | Argument | Type | Description |
22
+ | :------: | :------: | :----------------------- |
23
+ | `text` | `string` | The text string to type. |
24
+
25
+ ## Example usage
26
+
27
+ ```yaml
28
+ command: type
29
+ text: Hello World
30
+ ```
31
+
32
+ ## Protips
33
+
34
+ - Use this command to input text into fields, such as search bars or forms.
35
+ - Ensure the target application or input field is in focus before using the `type` command to avoid unexpected behavior.
36
+ - It can also be used to insert values from variables, refer our [variable's guide](/guide/variables) for more information.
37
+
38
+ ## Gotchas
39
+
40
+ - If the input field isn't active or in focus, the text may not be typed correctly.
41
+ - Special characters in the `text` string may require additional handling depending on the application.
42
+
43
+ ---
44
+
45
+ The `type` command is ideal for automating text input in tests.
@@ -0,0 +1,54 @@
1
+ ---
2
+ title: "wait-for-image"
3
+ sidebarTitle: "wait-for-image"
4
+ description: "Wait until an image matching the description is detected on the screen."
5
+ icon: "clock-three-thirty"
6
+ mode: "wide"
7
+ ---
8
+
9
+ import Replay from "/snippets/tests/wait-for-image-replay.mdx";
10
+ import Example from "/snippets/tests/wait-for-image-yaml.mdx";
11
+
12
+ <Replay />
13
+ <Example />
14
+
15
+ ## Description
16
+
17
+ The `wait-for-image` command waits until the specified image is detected on the screen. This is useful for ensuring that visual elements are present before proceeding with the next steps in a test.
18
+
19
+ ## Arguments
20
+
21
+ | Argument | Type | Description |
22
+ | :-----------: | :-------: | :---------------------------------------------------------------------------------------------------------------- |
23
+ | `description` | `string` | A description of the image. |
24
+ | `timeout` | `number` | (Optional) The duration in milliseconds to wait for the image to appear. Default is `10000` (10 seconds). |
25
+ | `invert` | `boolean` | (Optional) If set to `true`, the command will wait until the specified image is NOT detected. Default is `false`. |
26
+
27
+ ## Example usage
28
+
29
+ ```yaml
30
+ command: wait-for-image
31
+ description: trash icon
32
+ timeout: 5000
33
+ ```
34
+
35
+ ## Protips
36
+
37
+ - Use clear and concise descriptions for the image to improve detection accuracy.
38
+ - Adjust the `timeout` value based on the expected load time of the image to avoid unnecessary delays.
39
+
40
+ <Tip>
41
+ If you are unable to land on an accurate description or experiencing flaky
42
+ results, try to upload the image to [chatgpt](https://chatgpt.com) and ask it
43
+ to describe the image and use the generated `description` to get better
44
+ accuracy and determinism.
45
+ </Tip>
46
+
47
+ ## Gotchas
48
+
49
+ - If the image doesn't appear within the specified `timeout`, the command will fail.
50
+ - Ensure the description accurately represents the image to avoid detection issues.
51
+
52
+ ---
53
+
54
+ The `wait-for-image` command is ideal for synchronizing tests with visual elements that may take time to load.
@@ -0,0 +1,48 @@
1
+ ---
2
+ title: "wait-for-text"
3
+ sidebarTitle: "wait-for-text"
4
+ description: "Wait until the specified text is detected on the screen."
5
+ icon: "clock-nine"
6
+ mode: "wide"
7
+ ---
8
+
9
+ import Replay from "/snippets/tests/wait-for-text-replay.mdx";
10
+ import Example from "/snippets/tests/wait-for-text-yaml.mdx";
11
+
12
+ <Replay />
13
+ <Example />
14
+
15
+ ## Description
16
+
17
+ The `wait-for-text` command waits until the specified text is detected on the screen. This is useful for ensuring that textual elements are present before proceeding with the next steps in a test.
18
+
19
+ ## Arguments
20
+
21
+ | Argument | Type | Description |
22
+ | :-------: | :-------: | :--------------------------------------------------------------------------------------------------------------- |
23
+ | `text` | `string` | The text to find on the screen. |
24
+ | `timeout` | `number` | (Optional) The duration in milliseconds to wait for the text to appear. Default is `5000` (5 seconds). |
25
+ | `method` | `enum` | (Optional) The matching algorithm to use. Possible values are `ai` and `turbo`. Default is `turbo` |
26
+ | `invert` | `boolean` | (Optional) If set to `true`, the command will wait until the specified text is NOT detected. Default is `false`. |
27
+
28
+ ## Example usage
29
+
30
+ ```yaml
31
+ command: wait-for-text
32
+ text: Copyright 2024
33
+ timeout: 5000
34
+ ```
35
+
36
+ ## Protips
37
+
38
+ - Use unique and specific text to improve detection accuracy.
39
+ - Adjust the `timeout` value based on the expected load time of the text to avoid unnecessary delays.
40
+
41
+ ## Gotchas
42
+
43
+ - If the text doesn't appear within the specified `timeout`, the command will fail.
44
+ - Ensure the text matches exactly, as variations in font size, style, or screen resolution may affect detection accuracy.
45
+
46
+ ---
47
+
48
+ The `wait-for-text` command is ideal for synchronizing tests with textual elements that may take time to load.
@@ -0,0 +1,45 @@
1
+ ---
2
+ title: "wait"
3
+ sidebarTitle: "wait"
4
+ description: "Pause the execution of the script for a specified duration."
5
+ icon: "clock"
6
+ "mode": "wide"
7
+ ---
8
+
9
+ import Replay from "/snippets/tests/wait-replay.mdx";
10
+ import Example from "/snippets/tests/wait-yaml.mdx";
11
+
12
+ <Replay />
13
+ <Example />
14
+
15
+ ## Description
16
+
17
+ The `wait` command pauses the execution of the script for a specified number of milliseconds before continuing. This is useful for adding delays between commands or waiting for certain conditions to stabilize.
18
+
19
+ ## Arguments
20
+
21
+ | Argument | Type | Description |
22
+ | --------- | -------- | ------------------------------------- |
23
+ | `timeout` | `number` | The duration in milliseconds to wait. |
24
+
25
+ ## Example usage
26
+
27
+ ```yaml
28
+ command: wait
29
+ timeout: 5000
30
+ ```
31
+
32
+ ## Protips
33
+
34
+ - Use the `wait` command to handle timing issues, such as waiting for animations to complete or elements to load.
35
+ - Avoid using excessively long timeouts to keep tests efficient.
36
+
37
+ ## Gotchas
38
+
39
+ - Overusing the `wait` command can slow down test execution. Use it only when necessary.
40
+ - Ensure the timeout value is appropriate for the scenario to avoid unnecessary delays.
41
+
42
+ ## Notes
43
+
44
+ - The `wait` command is ideal for introducing controlled pauses in your test scripts.
45
+ - Whenever you are waiting for something to load, use the [wait-for-text](/commands/wait-for-text) or [wait-for-image](/commands/wait-for-image) commands instead to make the test more efficient.