testdriverai 6.2.1 → 7.0.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/MIGRATION.md +389 -0
- package/PLUGIN_MIGRATION.md +222 -0
- package/PROMPT_CACHE.md +200 -0
- package/SDK_LOGGING.md +222 -0
- package/SDK_MIGRATION.md +474 -0
- package/SDK_README.md +1122 -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 +258 -68
- 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 +143 -188
- package/agent/lib/redraw.js +6 -3
- package/agent/lib/sandbox.js +19 -5
- package/agent/lib/sdk.js +1 -0
- package/agent/lib/system.js +0 -3
- package/agent/lib/validation.js +1 -7
- package/debug-locate-response.js +82 -0
- package/debug-screenshot-1763401388589.png +0 -0
- package/debugger/index.html +16 -5
- package/docs/ARCHITECTURE.md +424 -0
- package/docs/AWESOME_LOGS_QUICK_REF.md +100 -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 +232 -152
- 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/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/pressKeys.mdx +349 -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/quickstart.mdx +199 -0
- package/docs/v7/guides/migration.mdx +562 -0
- package/docs/{getting-started → v7/guides}/self-hosting.mdx +11 -12
- package/docs/v7/playwright.mdx +342 -0
- package/eslint.config.js +19 -1
- package/examples/run-tests-with-recording.sh +70 -0
- package/examples/screenshot-example.js +63 -0
- package/examples/sdk-awesome-logs-demo.js +177 -0
- package/examples/sdk-cache-thresholds.js +96 -0
- package/examples/sdk-element-properties.js +155 -0
- package/examples/sdk-simple-example.js +65 -0
- package/examples/test-recording-example.test.js +166 -0
- 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 +744 -0
- package/mcp-server/AI_GUIDELINES.md +57 -0
- package/package.json +18 -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 +735 -0
- package/sdk.js +1906 -0
- package/{.github/workflows/self-hosted.yml → self-hosted.yml} +13 -4
- package/setup/aws/cloudformation.yaml +9 -2
- package/test/mcp-example-test.yaml +27 -0
- package/test-find-api.js +73 -0
- package/test-prompt-cache.js +96 -0
- package/test-sandbox-render.js +28 -0
- package/test-sdk-methods.js +15 -0
- package/test-sdk-refactor.js +53 -0
- package/test-stack-trace.mjs +57 -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 +44 -0
- package/testdriver/acceptance-sdk/drag-and-drop.test.mjs +70 -0
- package/testdriver/acceptance-sdk/element-not-found.test.mjs +38 -0
- package/testdriver/acceptance-sdk/exec-js.test.mjs +55 -0
- package/testdriver/acceptance-sdk/exec-output.test.mjs +71 -0
- package/testdriver/acceptance-sdk/exec-pwsh.test.mjs +69 -0
- package/testdriver/acceptance-sdk/focus-window.test.mjs +48 -0
- package/testdriver/acceptance-sdk/formatted-logging.test.mjs +41 -0
- package/testdriver/acceptance-sdk/hover-image.test.mjs +43 -0
- package/testdriver/acceptance-sdk/hover-text-with-description.test.mjs +50 -0
- package/testdriver/acceptance-sdk/hover-text.test.mjs +41 -0
- package/testdriver/acceptance-sdk/match-image.test.mjs +48 -0
- package/testdriver/acceptance-sdk/press-keys.test.mjs +64 -0
- package/testdriver/acceptance-sdk/prompt.test.mjs +45 -0
- package/testdriver/acceptance-sdk/scroll-keyboard.test.mjs +52 -0
- package/testdriver/acceptance-sdk/scroll-until-image.test.mjs +51 -0
- package/testdriver/acceptance-sdk/scroll-until-text.test.mjs +42 -0
- package/testdriver/acceptance-sdk/scroll.test.mjs +50 -0
- package/testdriver/acceptance-sdk/setup/globalTeardown.mjs +11 -0
- package/testdriver/acceptance-sdk/setup/lifecycleHelpers.mjs +239 -0
- package/testdriver/acceptance-sdk/setup/testHelpers.mjs +648 -0
- package/testdriver/acceptance-sdk/setup/vitestSetup.mjs +40 -0
- package/testdriver/acceptance-sdk/type-checking-demo.js +49 -0
- package/testdriver/acceptance-sdk/type.test.mjs +84 -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 +65 -0
- package/vitest.config.mjs.bak +44 -0
- package/.github/workflows/acceptance-v6.yml +0 -169
- 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,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "hover-image"
|
|
3
|
+
sidebarTitle: "hover-image"
|
|
4
|
+
description: "Locate an image on the screen and perform an action."
|
|
5
|
+
icon: "image"
|
|
6
|
+
mode: "wide"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
import Replay from "/snippets/tests/hover-image-replay.mdx";
|
|
10
|
+
import Example from "/snippets/tests/hover-image-yaml.mdx";
|
|
11
|
+
|
|
12
|
+
<Replay />
|
|
13
|
+
<Example />
|
|
14
|
+
|
|
15
|
+
## Description
|
|
16
|
+
|
|
17
|
+
The `hover-image` command is used to locate an image on the screen based on a description and perform an action on it. This can include hovering, clicking, double-clicking or dragging the image.
|
|
18
|
+
|
|
19
|
+
## Arguments
|
|
20
|
+
|
|
21
|
+
| Argument | Type | Description |
|
|
22
|
+
| ------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
23
|
+
| `description` | `string` | A description of the image and what it represents. Don't include the image itself here. |
|
|
24
|
+
| `action` | `string` | The action to take when the image is found. Available actions are: `click`, `right-click`, `double-click`, `hover`. Also supports `drag-start` and `drag-end` for dragging images |
|
|
25
|
+
|
|
26
|
+
The `hover-image` command is useful for interacting with visual elements that can't be identified using text-based selectors.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Drag functionality
|
|
31
|
+
|
|
32
|
+
- The `drag-start` and `drag-end` actions are used to drag an image to a specific location. `drag-start` could be the image (or inner text element, in which case using `hover-text` is preferred) to drag and `drag-end` is the location is supposed to be dragged to. This could be coupled with [`hover-text`](/commands/hover-text) or [`match-image`](/commands/match-image) or just `hover-image`.
|
|
33
|
+
|
|
34
|
+
### Example: Drag and Drop to upload an image
|
|
35
|
+
|
|
36
|
+
```yaml drag-and-drop.yaml
|
|
37
|
+
version: 6.0.0
|
|
38
|
+
steps:
|
|
39
|
+
- prompt: click on the image of a shopping cart
|
|
40
|
+
commands:
|
|
41
|
+
- command: hover-image
|
|
42
|
+
description: a pink tree image in the file explorer
|
|
43
|
+
action: drag-start
|
|
44
|
+
- command: hover-text
|
|
45
|
+
text: Upload
|
|
46
|
+
description: The drop zone of the application
|
|
47
|
+
action: drag-end
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Example usage
|
|
53
|
+
|
|
54
|
+
```yaml
|
|
55
|
+
command: hover-image
|
|
56
|
+
description: search icon in the webpage content
|
|
57
|
+
action: click
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Protips
|
|
61
|
+
|
|
62
|
+
- Use clear and concise descriptions for the image to improve detection accuracy.
|
|
63
|
+
- Ensure the action specified matches the intended interaction with the image.
|
|
64
|
+
- If the hover-image command fails to locate an image based on the provided description, consider using the match-image command instead. The match-image command is specifically designed for scenarios where precise image matching is required, such as when the visual element can't be reliably described with text. It works by directly comparing the image on the screen with a reference image file.
|
|
65
|
+
|
|
66
|
+
## Gotchas
|
|
67
|
+
|
|
68
|
+
- If the image can't be located based on the description, the command will fail.
|
|
69
|
+
- Ensure the screen resolution and scaling settings are consistent to avoid detection issues.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "hover-text"
|
|
3
|
+
sidebarTitle: "hover-text"
|
|
4
|
+
description: "Hover or click on text elements based on a description."
|
|
5
|
+
icon: "text"
|
|
6
|
+
mode: "wide"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
import Replay from "/snippets/tests/hover-text-replay.mdx";
|
|
10
|
+
import Example from "/snippets/tests/hover-text-yaml.mdx";
|
|
11
|
+
|
|
12
|
+
<Replay />
|
|
13
|
+
<Example />
|
|
14
|
+
|
|
15
|
+
## Description
|
|
16
|
+
|
|
17
|
+
The `hover-text` command is used to locate text on the screen based on a description and perform an action on it. This can include hovering, clicking, right-clicking, or double-clicking the text.
|
|
18
|
+
|
|
19
|
+
## Arguments
|
|
20
|
+
|
|
21
|
+
| Argument | Type | Description |
|
|
22
|
+
| :-----------: | :------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
23
|
+
| `text` | `string` | The text to find on the screen. Longer and unique is better. |
|
|
24
|
+
| `description` | `string` | A description of the text and what it represents. The actual text itself shouldn't be included here. |
|
|
25
|
+
| `action` | `string` | The action to take when the text is found. Available actions are: `click`, `right-click`, `double-click`, `hover`. Also supports `drag-start` and `drag-end` for [dragging text](/commands/hover-image#drag-functionality). |
|
|
26
|
+
| `method` | `enum` | The matching algorithm to use. Possible values are `turbo` (default) and `ai`. |
|
|
27
|
+
| `timeout` | `number` | **(Optional)** The duration in milliseconds to wait for the text to appear. Default is `5000` (5 seconds). |
|
|
28
|
+
|
|
29
|
+
## Example usage
|
|
30
|
+
|
|
31
|
+
```yaml
|
|
32
|
+
command: hover-text
|
|
33
|
+
text: Sign Up
|
|
34
|
+
description: link in the header
|
|
35
|
+
action: click
|
|
36
|
+
timeout: 10000 # 10 seconds
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Gotchas
|
|
40
|
+
|
|
41
|
+
- If the text can't be located, it will internally call the [wait-for-text](/commands/wait-for-text) command and wait for the text to appear. The wait `timeout` is 5 seconds by default, and the command fails if the text is not found.
|
|
42
|
+
- Variations in font size, style, or screen resolution may affect detection accuracy.
|
|
43
|
+
|
|
44
|
+
## Notes
|
|
45
|
+
|
|
46
|
+
- The `hover-text` command is ideal for interacting with textual elements that can't be identified using other selectors.
|
|
47
|
+
- Supported actions allow flexibility in how the text is interacted with during the test.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "if"
|
|
3
|
+
sidebarTitle: "if"
|
|
4
|
+
description: "Conditionally execute commands based on a specified condition."
|
|
5
|
+
icon: "split"
|
|
6
|
+
mode: "wide"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Description
|
|
10
|
+
|
|
11
|
+
The `if` command is used to conditionally execute a set of commands based on whether a specified condition evaluates to true or false. If the condition is true, the commands in the `then` block are executed. Otherwise, the commands in the `else` block are executed.
|
|
12
|
+
|
|
13
|
+
## Arguments
|
|
14
|
+
|
|
15
|
+
| Argument | Type | Description |
|
|
16
|
+
| :---------: | :----------------: | :---------------------------------------------------------------------------- |
|
|
17
|
+
| `condition` | `string` | The condition to evaluate. |
|
|
18
|
+
| `then` | `list of commands` | The commands to run if the condition is true. |
|
|
19
|
+
| `else` | `list of commands` | The commands to run if the condition is false. It is an **optional command**. |
|
|
20
|
+
|
|
21
|
+
## Example usage
|
|
22
|
+
|
|
23
|
+
```yaml
|
|
24
|
+
- prompt: click on sign up, if cookie banner appears close it
|
|
25
|
+
commands:
|
|
26
|
+
- command: if
|
|
27
|
+
condition: the text "Accept Cookies" is visible
|
|
28
|
+
then:
|
|
29
|
+
- command: hover-text
|
|
30
|
+
text: Accept Cookies
|
|
31
|
+
description: cookie banner button
|
|
32
|
+
action: click
|
|
33
|
+
else:
|
|
34
|
+
- command: hover-text
|
|
35
|
+
text: Sign Up
|
|
36
|
+
description: link in the header
|
|
37
|
+
action: click
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Protips
|
|
41
|
+
|
|
42
|
+
- Ensure the `condition` is clearly defined and evaluates correctly to avoid unexpected behavior.
|
|
43
|
+
- Use descriptive `then` and `else` blocks to handle both outcomes effectively.
|
|
44
|
+
|
|
45
|
+
## Gotchas
|
|
46
|
+
|
|
47
|
+
- The else block is optional, if the `condition` fails and there is no `else` block, the execution will continue from the next available command.
|
|
48
|
+
- If the `condition` is invalid or can't be evaluated, the command will fail.
|
|
49
|
+
- Ensure all commands in the `then` and `else` blocks are valid and properly formatted.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
The `if` command is useful for creating conditional logic in your tests, allowing for more dynamic and flexible workflows.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "match-image"
|
|
3
|
+
sidebarTitle: "match-image"
|
|
4
|
+
description: "Locate an image on the screen and perform an action."
|
|
5
|
+
icon: "images"
|
|
6
|
+
mode: "wide"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
import Replay from "/snippets/tests/match-image-replay.mdx";
|
|
10
|
+
import Example from "/snippets/tests/match-image-yaml.mdx";
|
|
11
|
+
|
|
12
|
+
<Replay />
|
|
13
|
+
<Example />
|
|
14
|
+
|
|
15
|
+
## Description
|
|
16
|
+
|
|
17
|
+
The `match-image` command is used to locate an image on the screen by matching it with a reference image file and performing an action (For example, click or hover) at its center. This command is particularly useful for interacting with elements that the AI has difficulty locating using descriptions or other methods.
|
|
18
|
+
|
|
19
|
+
## Arguments
|
|
20
|
+
|
|
21
|
+
| Argument | Type | Description |
|
|
22
|
+
| -------- | --------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
23
|
+
| `path` | `string` | The path to the image that needs to be matched. The path needs to be relative to the current test file |
|
|
24
|
+
| `action` | `string` | The action to take when the image is found. Available actions are: `click`, `right-click`, `double-click`, `hover`. Also supports `drag-start` and `drag-end` for [dragging images](/commands/hover-image#drag-functionality) |
|
|
25
|
+
| `invert` | `boolean` | (Optional) If set to `true`, the command will pass when the specified image is NOT detected. Default is `false`. |
|
|
26
|
+
|
|
27
|
+
## Example usage
|
|
28
|
+
|
|
29
|
+
```yaml
|
|
30
|
+
command: match-image
|
|
31
|
+
path: screenshots/button.png
|
|
32
|
+
action: click
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## How it works
|
|
36
|
+
|
|
37
|
+
- The `match-image` command takes a screenshot of the desktop and searches for the location of the reference image within the screenshot.
|
|
38
|
+
- The matching logic looks for the most similar image within the screenshot, not an exact match. If the similarity is below ~80%, it will search additional scales. If no match is found, the command will fail.
|
|
39
|
+
- Screenshots should be stored in the `testdriver/screenshots/` directory.
|
|
40
|
+
|
|
41
|
+
## Protips
|
|
42
|
+
|
|
43
|
+
- To create high-quality screenshots for matching:
|
|
44
|
+
- Download the video of the test and open it at **full or actual size** on your computer.
|
|
45
|
+
- Use a screenshot tool (like Cleanshot X) to capture the target element.
|
|
46
|
+
- Center the clickable element as much as possible within the screenshot.
|
|
47
|
+
- Ensure the image file is clear and free of unnecessary visual noise to improve matching accuracy.
|
|
48
|
+
|
|
49
|
+
## Gotchas
|
|
50
|
+
|
|
51
|
+
- The screenshot image should be of the actual size of the image that's being match against.
|
|
52
|
+
- If the image match is below ~80% similarity, the program tries to match will different scales, its recommended to have an actual size image.
|
|
53
|
+
- Variations in screen resolution, scaling settings, or platform-specific UI differences may affect matching accuracy.
|
|
54
|
+
- Ensure the image file is stored in the correct directory structure (`testdriver/screenshots/`) for dynamic resolution.
|
|
55
|
+
- The `path`needs to be relative to the current test file's directory. For example, if the test file is at `testdriver/onboarding/login.yaml` and the image is present at the conventional `testdriver/screenshots/nepal-flag.png` it should be referrenced as
|
|
56
|
+
|
|
57
|
+
```yaml highlight={2}
|
|
58
|
+
command: match-image
|
|
59
|
+
path: ../screenshots/nepal-flag.png
|
|
60
|
+
action: click
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Notes
|
|
64
|
+
|
|
65
|
+
- The `match-image` command is ideal for interacting with visual elements that can't be reliably described or located using other commands like `hover-image`.
|
|
66
|
+
- This command supports flexible scaling to account for minor differences in image size or resolution.
|
|
67
|
+
- Use this command as a fallback when other methods fail to locate the desired element.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "press-keys"
|
|
3
|
+
sidebarTitle: "press-keys"
|
|
4
|
+
description: "Simulate typing a keyboard combination."
|
|
5
|
+
icon: "keyboard"
|
|
6
|
+
mode: "wide"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
import Replay from "/snippets/tests/press-keys-replay.mdx";
|
|
10
|
+
import Example from "/snippets/tests/press-keys-yaml.mdx";
|
|
11
|
+
|
|
12
|
+
<Replay />
|
|
13
|
+
<Example />
|
|
14
|
+
|
|
15
|
+
## Description
|
|
16
|
+
|
|
17
|
+
The `press-keys` command is used to simulate typing a keyboard combination. This is useful for triggering shortcuts or interacting with applications via keyboard input.
|
|
18
|
+
|
|
19
|
+
## Arguments
|
|
20
|
+
|
|
21
|
+
| Argument | Type | Description |
|
|
22
|
+
| -------- | ------------------------ | :-------------------------------- |
|
|
23
|
+
| `keys` | YAML sequence of strings | A list of keys to press together. |
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
The keys supported are the standard [Windows keys](https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.keys?view=windowsdesktop-9.0). Supported values:
|
|
28
|
+
|
|
29
|
+
<Tabs>
|
|
30
|
+
<Tab title="Modifiers">
|
|
31
|
+
- `ctrl`, `shift`, `alt`, `command`, `option`, `win` - Left/right variants:
|
|
32
|
+
`ctrlleft`, `ctrlright`, `shiftleft`, `shiftright`, `altleft`, `altright`,
|
|
33
|
+
`optionleft`, `optionright`, `winleft`, `winright`
|
|
34
|
+
</Tab>
|
|
35
|
+
<Tab title="Printable">
|
|
36
|
+
- All ASCII printable characters: letters `a`–`z`, digits `0`–`9`, common
|
|
37
|
+
punctuation, and `space`.
|
|
38
|
+
</Tab>
|
|
39
|
+
<Tab title="Function keys">- `f1`–`f24`</Tab>
|
|
40
|
+
<Tab title="Navigation">
|
|
41
|
+
- `up`, `down`, `left`, `right`, `home`, `end`, `pageup`, `pagedown`,
|
|
42
|
+
`pgup`, `pgdn`
|
|
43
|
+
</Tab>
|
|
44
|
+
<Tab title="Editing">
|
|
45
|
+
- `backspace`, `delete`, `del`, `insert`, `enter`, `return`, `tab`,
|
|
46
|
+
`escape`, `esc`
|
|
47
|
+
</Tab>
|
|
48
|
+
<Tab title="Locks & Print">
|
|
49
|
+
- `capslock`, `numlock`, `scrolllock`, `printscreen`, `prntscrn`, `prtsc`,
|
|
50
|
+
`prtscr`, `print`
|
|
51
|
+
</Tab>
|
|
52
|
+
<Tab title="Numpad">
|
|
53
|
+
- `num0`–`num9`, `add`, `subtract`, `multiply`, `divide`, `decimal`,
|
|
54
|
+
`separator`
|
|
55
|
+
</Tab>
|
|
56
|
+
<Tab title="Media & Browser">
|
|
57
|
+
- `playpause`, `stop`, `nexttrack`, `prevtrack`, `volumedown`, `volumeup`,
|
|
58
|
+
`volumemute` - `browserback`, `browserforward`, `browserrefresh`,
|
|
59
|
+
`browsersearch`, `browserstop`, `browserfavorites`, `browserhome` -
|
|
60
|
+
`launchapp1`, `launchapp2`, `launchmail`, `launchmediaselect`
|
|
61
|
+
</Tab>
|
|
62
|
+
<Tab title="IME / International">
|
|
63
|
+
- `hangul`, `hanguel`, `hanja`, `junja`, `kana`, `kanji`, `modechange`,
|
|
64
|
+
`nonconvert`, `convert`, `final`, `yen`
|
|
65
|
+
</Tab>
|
|
66
|
+
<Tab title="Other">- `help`, `select`, `sleep`, `space`</Tab>
|
|
67
|
+
</Tabs>
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Example usage
|
|
72
|
+
|
|
73
|
+
```yaml
|
|
74
|
+
command: press-keys
|
|
75
|
+
keys:
|
|
76
|
+
- ctrl
|
|
77
|
+
- space
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Protips
|
|
81
|
+
|
|
82
|
+
- Use this command to trigger system-wide or application-specific shortcuts, such as the Start menu or the browser elements.
|
|
83
|
+
- Ensure the application or system is in focus when using this command to avoid unexpected behavior.
|
|
84
|
+
|
|
85
|
+
## Notes
|
|
86
|
+
|
|
87
|
+
- The `press-keys` command is ideal for automating workflows that rely on keyboard shortcuts.
|
|
@@ -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.
|