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.
- package/.github/workflows/acceptance-linux.yml +75 -0
- package/.github/workflows/acceptance-sdk-tests.yml +133 -0
- package/.vscode/settings.json +5 -1
- package/AGENTS.md +550 -0
- package/CODEOWNERS +0 -1
- package/README.md +126 -0
- package/{testdriver → _testdriver}/acceptance/drag-and-drop.yaml +2 -2
- package/{testdriver → _testdriver}/acceptance/snippets/login.yaml +1 -1
- package/_testdriver/examples/desktop/lifecycle/prerun.yaml +0 -0
- package/{testdriver → _testdriver}/examples/web/lifecycle/prerun.yaml +6 -1
- package/{testdriver → _testdriver}/lifecycle/postrun.yaml +3 -2
- package/_testdriver/lifecycle/prerun.yaml +15 -0
- package/{testdriver → _testdriver}/lifecycle/provision.yaml +7 -2
- package/agent/index.js +300 -85
- package/agent/interface.js +15 -0
- package/agent/lib/cache.js +142 -0
- package/agent/lib/commander.js +1 -39
- package/agent/lib/commands.js +910 -296
- package/agent/lib/redraw.js +129 -41
- package/agent/lib/sandbox.js +29 -6
- package/agent/lib/sdk.js +22 -0
- package/agent/lib/system.js +0 -3
- package/agent/lib/validation.js +1 -7
- package/debug-locate-response.js +82 -0
- package/debugger/index.html +15 -4
- package/docs/ARCHITECTURE.md +424 -0
- package/docs/AWESOME_LOGS_QUICK_REF.md +100 -0
- package/docs/MIGRATION.md +425 -0
- package/docs/PRESETS.md +210 -0
- package/docs/QUICK_START_TEST_RECORDING.md +215 -0
- package/docs/SDK_AWESOME_LOGS.md +468 -0
- package/docs/TEST_RECORDING.md +388 -0
- package/docs/docs.json +286 -152
- package/docs/guide/best-practices-polling.mdx +154 -0
- package/docs/sdk-browser-rendering.md +167 -0
- package/docs/v6/getting-started/self-hosting.mdx +407 -0
- package/docs/{guide → v6/guide}/dashcam.mdx +1 -1
- package/docs/{guide → v6/guide}/environment-variables.mdx +4 -5
- package/docs/{guide → v6/guide}/lifecycle.mdx +1 -1
- package/docs/v6/overview/comparison.mdx +101 -0
- package/docs/v7/README.md +135 -0
- package/docs/v7/api/ai.mdx +205 -0
- package/docs/v7/api/assert.mdx +285 -0
- package/docs/v7/api/assertions.mdx +403 -0
- package/docs/v7/api/click.mdx +287 -0
- package/docs/v7/api/client.mdx +322 -0
- package/docs/v7/api/dashcam.mdx +497 -0
- package/docs/v7/api/doubleClick.mdx +102 -0
- package/docs/v7/api/elements.mdx +479 -0
- package/docs/v7/api/exec.mdx +346 -0
- package/docs/v7/api/find.mdx +316 -0
- package/docs/v7/api/focusApplication.mdx +294 -0
- package/docs/v7/api/hover.mdx +279 -0
- package/docs/v7/api/mouseDown.mdx +161 -0
- package/docs/v7/api/mouseUp.mdx +164 -0
- package/docs/v7/api/pressKeys.mdx +349 -0
- package/docs/v7/api/rightClick.mdx +123 -0
- package/docs/v7/api/sandbox.mdx +404 -0
- package/docs/v7/api/scroll.mdx +300 -0
- package/docs/v7/api/type.mdx +314 -0
- package/docs/v7/commands/assert.mdx +45 -0
- package/docs/v7/commands/exec.mdx +282 -0
- package/docs/v7/commands/focus-application.mdx +44 -0
- package/docs/v7/commands/hover-image.mdx +69 -0
- package/docs/v7/commands/hover-text.mdx +47 -0
- package/docs/v7/commands/if.mdx +53 -0
- package/docs/v7/commands/match-image.mdx +67 -0
- package/docs/v7/commands/press-keys.mdx +87 -0
- package/docs/v7/commands/remember.mdx +49 -0
- package/docs/v7/commands/run.mdx +44 -0
- package/docs/v7/commands/scroll-until-image.mdx +66 -0
- package/docs/v7/commands/scroll-until-text.mdx +60 -0
- package/docs/v7/commands/scroll.mdx +69 -0
- package/docs/v7/commands/type.mdx +45 -0
- package/docs/v7/commands/wait-for-image.mdx +54 -0
- package/docs/v7/commands/wait-for-text.mdx +48 -0
- package/docs/v7/commands/wait.mdx +45 -0
- package/docs/v7/getting-started/configuration.mdx +380 -0
- package/docs/v7/getting-started/quickstart.mdx +332 -0
- package/docs/v7/guides/best-practices.mdx +486 -0
- package/docs/v7/guides/caching-ai.mdx +215 -0
- package/docs/v7/guides/caching-selectors.mdx +292 -0
- package/docs/v7/guides/caching.mdx +366 -0
- package/docs/v7/guides/ci-cd/azure.mdx +587 -0
- package/docs/v7/guides/ci-cd/circleci.mdx +523 -0
- package/docs/v7/guides/ci-cd/github-actions.mdx +457 -0
- package/docs/v7/guides/ci-cd/gitlab.mdx +498 -0
- package/docs/v7/guides/ci-cd/jenkins.mdx +664 -0
- package/docs/v7/guides/ci-cd/travis.mdx +438 -0
- package/docs/v7/guides/debugging.mdx +349 -0
- package/docs/v7/guides/faq.mdx +393 -0
- package/docs/v7/guides/migration.mdx +562 -0
- package/docs/v7/guides/performance.mdx +517 -0
- package/docs/{getting-started → v7/guides}/self-hosting.mdx +11 -12
- package/docs/v7/guides/troubleshooting.mdx +526 -0
- package/docs/v7/guides/vitest-plugin.mdx +477 -0
- package/docs/v7/guides/vitest.mdx +535 -0
- package/docs/v7/platforms/linux.mdx +308 -0
- package/docs/v7/platforms/macos.mdx +433 -0
- package/docs/v7/platforms/windows.mdx +430 -0
- package/docs/v7/playwright.mdx +342 -0
- package/docs/v7/presets/chrome-extension.mdx +223 -0
- package/docs/v7/presets/chrome.mdx +287 -0
- package/docs/v7/presets/electron.mdx +435 -0
- package/docs/v7/presets/vscode.mdx +398 -0
- package/docs/v7/presets/webapp.mdx +396 -0
- package/docs/v7/progressive-apis/CORE.md +459 -0
- package/docs/v7/progressive-apis/HOOKS.md +360 -0
- package/docs/v7/progressive-apis/PROGRESSIVE_DISCLOSURE.md +230 -0
- package/docs/v7/progressive-apis/PROVISION.md +266 -0
- package/eslint.config.js +19 -1
- package/interfaces/cli/lib/base.js +10 -4
- package/interfaces/logger.js +2 -1
- package/interfaces/shared-test-state.mjs +69 -0
- package/interfaces/vitest-plugin.mjs +830 -0
- package/package.json +29 -5
- package/schema.json +8 -29
- package/scripts/view-test-results.mjs +96 -0
- package/sdk-log-formatter.js +714 -0
- package/sdk.d.ts +1028 -0
- package/sdk.js +2567 -0
- package/{.github/workflows/self-hosted.yml → self-hosted.yml} +13 -4
- package/setup/aws/cloudformation.yaml +9 -2
- package/src/core/Dashcam.js +469 -0
- package/src/core/index.d.ts +150 -0
- package/src/core/index.js +12 -0
- package/src/presets/index.mjs +331 -0
- package/src/vitest/extended.mjs +108 -0
- package/src/vitest/hooks.d.ts +119 -0
- package/src/vitest/hooks.mjs +298 -0
- package/src/vitest/index.mjs +64 -0
- package/src/vitest/lifecycle.mjs +277 -0
- package/src/vitest/utils.mjs +150 -0
- package/test/dashcam.test.js +137 -0
- package/test/mcp-example-test.yaml +27 -0
- package/testdriver/acceptance-sdk/QUICK_REFERENCE.md +61 -0
- package/testdriver/acceptance-sdk/README.md +128 -0
- package/testdriver/acceptance-sdk/TEST_REPORTING.md +245 -0
- package/testdriver/acceptance-sdk/assert.test.mjs +26 -0
- package/testdriver/acceptance-sdk/auto-cache-key-demo.test.mjs +56 -0
- package/testdriver/acceptance-sdk/chrome-extension.test.mjs +89 -0
- package/testdriver/acceptance-sdk/drag-and-drop.test.mjs +58 -0
- package/testdriver/acceptance-sdk/element-not-found.test.mjs +25 -0
- package/testdriver/acceptance-sdk/exec-js.test.mjs +43 -0
- package/testdriver/acceptance-sdk/exec-output.test.mjs +59 -0
- package/testdriver/acceptance-sdk/exec-pwsh.test.mjs +57 -0
- package/testdriver/acceptance-sdk/focus-window.test.mjs +36 -0
- package/testdriver/acceptance-sdk/formatted-logging.test.mjs +26 -0
- package/testdriver/acceptance-sdk/hooks-example.test.mjs +38 -0
- package/testdriver/acceptance-sdk/hover-image.test.mjs +34 -0
- package/testdriver/acceptance-sdk/hover-text-with-description.test.mjs +38 -0
- package/testdriver/acceptance-sdk/hover-text.test.mjs +27 -0
- package/testdriver/acceptance-sdk/match-image.test.mjs +36 -0
- package/testdriver/acceptance-sdk/presets-example.test.mjs +87 -0
- package/testdriver/acceptance-sdk/press-keys.test.mjs +50 -0
- package/testdriver/acceptance-sdk/prompt.test.mjs +33 -0
- package/testdriver/acceptance-sdk/scroll-keyboard.test.mjs +38 -0
- package/testdriver/acceptance-sdk/scroll-until-image.test.mjs +39 -0
- package/testdriver/acceptance-sdk/scroll-until-text.test.mjs +28 -0
- package/testdriver/acceptance-sdk/scroll.test.mjs +41 -0
- package/testdriver/acceptance-sdk/setup/globalTeardown.mjs +11 -0
- package/testdriver/acceptance-sdk/setup/testHelpers.mjs +420 -0
- package/testdriver/acceptance-sdk/setup/vitestSetup.mjs +40 -0
- package/testdriver/acceptance-sdk/sully-ai.test.mjs +234 -0
- package/testdriver/acceptance-sdk/test-console-logs.test.mjs +42 -0
- package/testdriver/acceptance-sdk/type-checking-demo.js +49 -0
- package/testdriver/acceptance-sdk/type.test.mjs +45 -0
- package/verify-element-api.js +89 -0
- package/verify-types.js +0 -0
- package/vitest.config.example.js +19 -0
- package/vitest.config.mjs +66 -0
- package/vitest.config.mjs.bak +44 -0
- package/.github/workflows/acceptance-v6.yml +0 -169
- package/.vscode/mcp.json +0 -9
- package/docs/overview/comparison.mdx +0 -82
- package/testdriver/lifecycle/prerun.yaml +0 -17
- /package/{testdriver/examples/desktop/lifecycle/prerun.yaml → .env.example} +0 -0
- /package/{testdriver → _testdriver}/acceptance/assert.yaml +0 -0
- /package/{testdriver → _testdriver}/acceptance/dashcam.yaml +0 -0
- /package/{testdriver → _testdriver}/acceptance/embed.yaml +0 -0
- /package/{testdriver → _testdriver}/acceptance/exec-js.yaml +0 -0
- /package/{testdriver → _testdriver}/acceptance/exec-output.yaml +0 -0
- /package/{testdriver → _testdriver}/acceptance/exec-shell.yaml +0 -0
- /package/{testdriver → _testdriver}/acceptance/focus-window.yaml +0 -0
- /package/{testdriver → _testdriver}/acceptance/hover-image.yaml +0 -0
- /package/{testdriver → _testdriver}/acceptance/hover-text-with-description.yaml +0 -0
- /package/{testdriver → _testdriver}/acceptance/hover-text.yaml +0 -0
- /package/{testdriver → _testdriver}/acceptance/if-else.yaml +0 -0
- /package/{testdriver → _testdriver}/acceptance/match-image.yaml +0 -0
- /package/{testdriver → _testdriver}/acceptance/press-keys.yaml +0 -0
- /package/{testdriver → _testdriver}/acceptance/prompt.yaml +0 -0
- /package/{testdriver → _testdriver}/acceptance/remember.yaml +0 -0
- /package/{testdriver → _testdriver}/acceptance/screenshots/cart.png +0 -0
- /package/{testdriver → _testdriver}/acceptance/scroll-keyboard.yaml +0 -0
- /package/{testdriver → _testdriver}/acceptance/scroll-until-image.yaml +0 -0
- /package/{testdriver → _testdriver}/acceptance/scroll-until-text.yaml +0 -0
- /package/{testdriver → _testdriver}/acceptance/scroll.yaml +0 -0
- /package/{testdriver → _testdriver}/acceptance/snippets/match-cart.yaml +0 -0
- /package/{testdriver → _testdriver}/acceptance/type.yaml +0 -0
- /package/{testdriver → _testdriver}/behavior/failure.yaml +0 -0
- /package/{testdriver → _testdriver}/behavior/hover-text.yaml +0 -0
- /package/{testdriver → _testdriver}/behavior/lifecycle/postrun.yaml +0 -0
- /package/{testdriver → _testdriver}/behavior/lifecycle/prerun.yaml +0 -0
- /package/{testdriver → _testdriver}/behavior/lifecycle/provision.yaml +0 -0
- /package/{testdriver → _testdriver}/behavior/secrets.yaml +0 -0
- /package/{testdriver → _testdriver}/edge-cases/dashcam-chrome.yaml +0 -0
- /package/{testdriver → _testdriver}/edge-cases/exec-pwsh-multiline.yaml +0 -0
- /package/{testdriver → _testdriver}/edge-cases/js-exception.yaml +0 -0
- /package/{testdriver → _testdriver}/edge-cases/js-promise.yaml +0 -0
- /package/{testdriver → _testdriver}/edge-cases/lifecycle/postrun.yaml +0 -0
- /package/{testdriver → _testdriver}/edge-cases/prompt-in-middle.yaml +0 -0
- /package/{testdriver → _testdriver}/edge-cases/prompt-nested.yaml +0 -0
- /package/{testdriver → _testdriver}/edge-cases/success-test.yaml +0 -0
- /package/{testdriver → _testdriver}/examples/android/example.yaml +0 -0
- /package/{testdriver → _testdriver}/examples/android/lifecycle/postrun.yaml +0 -0
- /package/{testdriver → _testdriver}/examples/android/lifecycle/provision.yaml +0 -0
- /package/{testdriver → _testdriver}/examples/android/readme.md +0 -0
- /package/{testdriver → _testdriver}/examples/chrome-extension/lifecycle/provision.yaml +0 -0
- /package/{testdriver → _testdriver}/examples/desktop/lifecycle/provision.yaml +0 -0
- /package/{testdriver → _testdriver}/examples/vscode-extension/lifecycle/provision.yaml +0 -0
- /package/{testdriver → _testdriver}/examples/web/lifecycle/postrun.yaml +0 -0
- /package/docs/{account → v6/account}/dashboard.mdx +0 -0
- /package/docs/{account → v6/account}/enterprise.mdx +0 -0
- /package/docs/{account → v6/account}/pricing.mdx +0 -0
- /package/docs/{account → v6/account}/projects.mdx +0 -0
- /package/docs/{account → v6/account}/team.mdx +0 -0
- /package/docs/{action → v6/action}/ami.mdx +0 -0
- /package/docs/{action → v6/action}/performance.mdx +0 -0
- /package/docs/{action → v6/action}/secrets.mdx +0 -0
- /package/docs/{apps → v6/apps}/chrome-extensions.mdx +0 -0
- /package/docs/{apps → v6/apps}/desktop-apps.mdx +0 -0
- /package/docs/{apps → v6/apps}/mobile-apps.mdx +0 -0
- /package/docs/{apps → v6/apps}/static-websites.mdx +0 -0
- /package/docs/{apps → v6/apps}/tauri-apps.mdx +0 -0
- /package/docs/{bugs → v6/bugs}/jira.mdx +0 -0
- /package/docs/{cli → v6/cli}/overview.mdx +0 -0
- /package/docs/{commands → v6/commands}/assert.mdx +0 -0
- /package/docs/{commands → v6/commands}/exec.mdx +0 -0
- /package/docs/{commands → v6/commands}/focus-application.mdx +0 -0
- /package/docs/{commands → v6/commands}/hover-image.mdx +0 -0
- /package/docs/{commands → v6/commands}/hover-text.mdx +0 -0
- /package/docs/{commands → v6/commands}/if.mdx +0 -0
- /package/docs/{commands → v6/commands}/match-image.mdx +0 -0
- /package/docs/{commands → v6/commands}/press-keys.mdx +0 -0
- /package/docs/{commands → v6/commands}/remember.mdx +0 -0
- /package/docs/{commands → v6/commands}/run.mdx +0 -0
- /package/docs/{commands → v6/commands}/scroll-until-image.mdx +0 -0
- /package/docs/{commands → v6/commands}/scroll-until-text.mdx +0 -0
- /package/docs/{commands → v6/commands}/scroll.mdx +0 -0
- /package/docs/{commands → v6/commands}/type.mdx +0 -0
- /package/docs/{commands → v6/commands}/wait-for-image.mdx +0 -0
- /package/docs/{commands → v6/commands}/wait-for-text.mdx +0 -0
- /package/docs/{commands → v6/commands}/wait.mdx +0 -0
- /package/docs/{exporting → v6/exporting}/junit.mdx +0 -0
- /package/docs/{exporting → v6/exporting}/playwright.mdx +0 -0
- /package/docs/{features → v6/features}/auto-healing.mdx +0 -0
- /package/docs/{features → v6/features}/generation.mdx +0 -0
- /package/docs/{features → v6/features}/parallel-testing.mdx +0 -0
- /package/docs/{features → v6/features}/reusable-snippets.mdx +0 -0
- /package/docs/{features → v6/features}/selectorless.mdx +0 -0
- /package/docs/{features → v6/features}/visual-assertions.mdx +0 -0
- /package/docs/{getting-started → v6/getting-started}/ci.mdx +0 -0
- /package/docs/{getting-started → v6/getting-started}/cli.mdx +0 -0
- /package/docs/{getting-started → v6/getting-started}/editing.mdx +0 -0
- /package/docs/{getting-started → v6/getting-started}/playwright.mdx +0 -0
- /package/docs/{getting-started → v6/getting-started}/running.mdx +0 -0
- /package/docs/{getting-started → v6/getting-started}/vscode.mdx +0 -0
- /package/docs/{guide → v6/guide}/assertions.mdx +0 -0
- /package/docs/{guide → v6/guide}/authentication.mdx +0 -0
- /package/docs/{guide → v6/guide}/code.mdx +0 -0
- /package/docs/{guide → v6/guide}/locating.mdx +0 -0
- /package/docs/{guide → v6/guide}/protips.mdx +0 -0
- /package/docs/{guide → v6/guide}/variables.mdx +0 -0
- /package/docs/{guide → v6/guide}/waiting.mdx +0 -0
- /package/docs/{importing → v6/importing}/csv.mdx +0 -0
- /package/docs/{importing → v6/importing}/gherkin.mdx +0 -0
- /package/docs/{importing → v6/importing}/jira.mdx +0 -0
- /package/docs/{importing → v6/importing}/testrail.mdx +0 -0
- /package/docs/{integrations → v6/integrations}/electron.mdx +0 -0
- /package/docs/{integrations → v6/integrations}/netlify.mdx +0 -0
- /package/docs/{integrations → v6/integrations}/vercel.mdx +0 -0
- /package/docs/{interactive → v6/interactive}/explore.mdx +0 -0
- /package/docs/{interactive → v6/interactive}/run.mdx +0 -0
- /package/docs/{interactive → v6/interactive}/save.mdx +0 -0
- /package/docs/{overview → v6/overview}/faq.mdx +0 -0
- /package/docs/{overview → v6/overview}/performance.mdx +0 -0
- /package/docs/{overview → v6/overview}/quickstart.mdx +0 -0
- /package/docs/{overview → v6/overview}/what-is-testdriver.mdx +0 -0
- /package/docs/{scenarios → v6/scenarios}/ai-chatbot.mdx +0 -0
- /package/docs/{scenarios → v6/scenarios}/cookie-banner.mdx +0 -0
- /package/docs/{scenarios → v6/scenarios}/file-upload.mdx +0 -0
- /package/docs/{scenarios → v6/scenarios}/form-filling.mdx +0 -0
- /package/docs/{scenarios → v6/scenarios}/log-in.mdx +0 -0
- /package/docs/{scenarios → v6/scenarios}/pdf-generation.mdx +0 -0
- /package/docs/{scenarios → v6/scenarios}/spell-check.mdx +0 -0
- /package/docs/{security → v6/security}/action.mdx +0 -0
- /package/docs/{security → v6/security}/agent.mdx +0 -0
- /package/docs/{security → v6/security}/platform.mdx +0 -0
- /package/docs/{tutorials → v6/tutorials}/advanced-test.mdx +0 -0
- /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.
|