testdriverai 7.9.32-test → 7.9.34-test
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/ai/skills/testdriver:ai/SKILL.md +204 -0
- package/ai/skills/testdriver:assert/SKILL.md +315 -0
- package/ai/skills/testdriver:aws-setup/SKILL.md +448 -0
- package/ai/skills/testdriver:cache/SKILL.md +221 -0
- package/ai/skills/testdriver:caching/SKILL.md +124 -0
- package/ai/skills/testdriver:captcha/SKILL.md +158 -0
- package/ai/skills/testdriver:ci-cd/SKILL.md +602 -0
- package/ai/skills/testdriver:click/SKILL.md +286 -0
- package/ai/skills/testdriver:client/SKILL.md +477 -0
- package/ai/skills/testdriver:customizing-devices/SKILL.md +319 -0
- package/ai/skills/testdriver:dashcam/SKILL.md +451 -0
- package/ai/skills/testdriver:debugging-with-screenshots/SKILL.md +415 -0
- package/ai/skills/testdriver:device-config/SKILL.md +317 -0
- package/ai/skills/testdriver:double-click/SKILL.md +102 -0
- package/ai/skills/testdriver:elements/SKILL.md +605 -0
- package/ai/skills/testdriver:enterprise/SKILL.md +7 -0
- package/ai/skills/testdriver:errors/SKILL.md +246 -0
- package/ai/skills/testdriver:events/SKILL.md +356 -0
- package/ai/skills/testdriver:exec/SKILL.md +317 -0
- package/ai/skills/testdriver:find/SKILL.md +860 -0
- package/ai/skills/testdriver:focus-application/SKILL.md +293 -0
- package/ai/skills/testdriver:generating-tests/SKILL.md +36 -0
- package/ai/skills/testdriver:hosted/SKILL.md +156 -0
- package/ai/skills/testdriver:hover/SKILL.md +278 -0
- package/ai/skills/testdriver:locating-elements/SKILL.md +71 -0
- package/ai/skills/testdriver:making-assertions/SKILL.md +32 -0
- package/ai/skills/testdriver:mcp/SKILL.md +7 -0
- package/ai/skills/testdriver:mouse-down/SKILL.md +161 -0
- package/ai/skills/testdriver:mouse-up/SKILL.md +164 -0
- package/ai/skills/testdriver:parse/SKILL.md +236 -0
- package/ai/skills/testdriver:performing-actions/SKILL.md +53 -0
- package/ai/skills/testdriver:press-keys/SKILL.md +348 -0
- package/ai/skills/testdriver:provision/SKILL.md +331 -0
- package/ai/skills/testdriver:quickstart/SKILL.md +172 -0
- package/ai/skills/testdriver:redraw/SKILL.md +214 -0
- package/ai/skills/testdriver:reusable-code/SKILL.md +249 -0
- package/ai/skills/testdriver:right-click/SKILL.md +123 -0
- package/ai/skills/testdriver:running-tests/SKILL.md +185 -0
- package/ai/skills/testdriver:screenshot/SKILL.md +248 -0
- package/ai/skills/testdriver:screenshots/SKILL.md +184 -0
- package/ai/skills/testdriver:scroll/SKILL.md +205 -0
- package/ai/skills/testdriver:secrets/SKILL.md +115 -0
- package/ai/skills/testdriver:self-hosted/SKILL.md +147 -0
- package/ai/skills/testdriver:test-results-json/SKILL.md +257 -0
- package/ai/skills/testdriver:testdriver/SKILL.md +624 -0
- package/ai/skills/testdriver:type/SKILL.md +357 -0
- package/ai/skills/testdriver:variables/SKILL.md +111 -0
- package/ai/skills/testdriver:wait/SKILL.md +50 -0
- package/ai/skills/testdriver:waiting-for-elements/SKILL.md +90 -0
- package/ai/skills/testdriver:what-is-testdriver/SKILL.md +54 -0
- package/docs/_data/examples-manifest.json +42 -42
- package/docs/v7/debugging-with-screenshots.mdx +14 -0
- package/docs/v7/examples/ai.mdx +1 -1
- package/docs/v7/examples/assert.mdx +1 -1
- package/docs/v7/examples/chrome-extension.mdx +2 -2
- package/docs/v7/examples/element-not-found.mdx +1 -1
- package/docs/v7/examples/exec-output.mdx +1 -1
- package/docs/v7/examples/exec-pwsh.mdx +1 -1
- package/docs/v7/examples/findall-coffee-icons.mdx +1 -1
- package/docs/v7/examples/focus-window.mdx +1 -1
- package/docs/v7/examples/hover-image.mdx +1 -1
- package/docs/v7/examples/hover-text-with-description.mdx +1 -1
- package/docs/v7/examples/hover-text.mdx +1 -1
- package/docs/v7/examples/installer.mdx +1 -1
- package/docs/v7/examples/launch-vscode-linux.mdx +1 -1
- package/docs/v7/examples/parse.mdx +1 -1
- package/docs/v7/examples/press-keys.mdx +1 -1
- package/docs/v7/examples/prompt.mdx +1 -1
- package/docs/v7/examples/scroll-keyboard.mdx +1 -1
- package/docs/v7/examples/scroll-until-image.mdx +1 -1
- package/docs/v7/examples/scroll.mdx +1 -1
- package/docs/v7/examples/type.mdx +1 -1
- package/docs/v7/examples/windows-installer.mdx +1 -1
- package/docs/v7/find.mdx +33 -0
- package/examples/chrome-extension.test.mjs +1 -1
- package/package.json +1 -1
- package/setup/aws/spawn-runner.sh +24 -3
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
"$schema": "./examples-manifest.schema.json",
|
|
3
3
|
"examples": {
|
|
4
4
|
"assert.test.mjs": {
|
|
5
|
-
"url": "https://console-test.testdriver.ai/runs/
|
|
6
|
-
"lastUpdated": "2026-04-
|
|
5
|
+
"url": "https://console-test.testdriver.ai/runs/69d6f2cec0ec56e77d2d2b3a/69d6f2e0c0ec56e77d2d2b48",
|
|
6
|
+
"lastUpdated": "2026-04-09T00:47:56.308Z"
|
|
7
7
|
},
|
|
8
8
|
"drag-and-drop.test.mjs": {
|
|
9
9
|
"url": "https://console.testdriver.ai/runs/69a62b3aaa712ecd3dea730a/69a62b42fc0ac3cc632a918b",
|
|
10
10
|
"lastUpdated": "2026-03-03T00:32:25.275Z"
|
|
11
11
|
},
|
|
12
12
|
"exec-pwsh.test.mjs": {
|
|
13
|
-
"url": "https://console-test.testdriver.ai/runs/
|
|
14
|
-
"lastUpdated": "2026-04-
|
|
13
|
+
"url": "https://console-test.testdriver.ai/runs/69d6f2cec0ec56e77d2d2b3a/69d6f2d1c0ec56e77d2d2b3c",
|
|
14
|
+
"lastUpdated": "2026-04-09T00:30:09.363Z"
|
|
15
15
|
},
|
|
16
16
|
"match-image.test.mjs": {
|
|
17
17
|
"url": "https://console-test.testdriver.ai/runs/69c8738614b73310c7839412/69c8738c14b73310c783941d",
|
|
@@ -22,84 +22,84 @@
|
|
|
22
22
|
"lastUpdated": "2026-03-03T00:32:25.282Z"
|
|
23
23
|
},
|
|
24
24
|
"hover-text-with-description.test.mjs": {
|
|
25
|
-
"url": "https://console-test.testdriver.ai/runs/
|
|
26
|
-
"lastUpdated": "2026-04-
|
|
25
|
+
"url": "https://console-test.testdriver.ai/runs/69d6f2cec0ec56e77d2d2b3a/69d6f2d3c0ec56e77d2d2b3d",
|
|
26
|
+
"lastUpdated": "2026-04-09T00:29:07.375Z"
|
|
27
27
|
},
|
|
28
28
|
"windows-installer.test.mjs": {
|
|
29
|
-
"url": "https://console-test.testdriver.ai/runs/
|
|
30
|
-
"lastUpdated": "2026-04-
|
|
29
|
+
"url": "https://console-test.testdriver.ai/runs/69d6f2cec0ec56e77d2d2b3a/69d6f2d6c0ec56e77d2d2b40",
|
|
30
|
+
"lastUpdated": "2026-04-09T00:30:14.179Z"
|
|
31
31
|
},
|
|
32
32
|
"exec-output.test.mjs": {
|
|
33
|
-
"url": "https://console-test.testdriver.ai/runs/
|
|
34
|
-
"lastUpdated": "2026-04-
|
|
33
|
+
"url": "https://console-test.testdriver.ai/runs/69d6f2cec0ec56e77d2d2b3a/69d6f2d7c0ec56e77d2d2b41",
|
|
34
|
+
"lastUpdated": "2026-04-09T00:30:15.528Z"
|
|
35
35
|
},
|
|
36
36
|
"chrome-extension.test.mjs": {
|
|
37
|
-
"url": "https://console-test.testdriver.ai/runs/
|
|
38
|
-
"lastUpdated": "2026-04-
|
|
37
|
+
"url": "https://console-test.testdriver.ai/runs/69d6f2cec0ec56e77d2d2b3a/69d6f2d0c0ec56e77d2d2b3b",
|
|
38
|
+
"lastUpdated": "2026-04-09T00:29:36.485Z"
|
|
39
39
|
},
|
|
40
40
|
"launch-vscode-linux.test.mjs": {
|
|
41
|
-
"url": "https://console-test.testdriver.ai/runs/
|
|
42
|
-
"lastUpdated": "2026-04-
|
|
41
|
+
"url": "https://console-test.testdriver.ai/runs/69d6f2cec0ec56e77d2d2b3a/69d6f2d5c0ec56e77d2d2b3e",
|
|
42
|
+
"lastUpdated": "2026-04-09T00:37:50.393Z"
|
|
43
43
|
},
|
|
44
44
|
"hover-image.test.mjs": {
|
|
45
|
-
"url": "https://console-test.testdriver.ai/runs/
|
|
46
|
-
"lastUpdated": "2026-04-
|
|
45
|
+
"url": "https://console-test.testdriver.ai/runs/69d6f2cec0ec56e77d2d2b3a/69d6f2d9c0ec56e77d2d2b42",
|
|
46
|
+
"lastUpdated": "2026-04-09T00:29:45.158Z"
|
|
47
47
|
},
|
|
48
48
|
"installer.test.mjs": {
|
|
49
|
-
"url": "https://console-test.testdriver.ai/runs/
|
|
50
|
-
"lastUpdated": "2026-04-
|
|
49
|
+
"url": "https://console-test.testdriver.ai/runs/69d6f2cec0ec56e77d2d2b3a/69d6f2dbc0ec56e77d2d2b43",
|
|
50
|
+
"lastUpdated": "2026-04-09T00:29:14.938Z"
|
|
51
51
|
},
|
|
52
52
|
"type.test.mjs": {
|
|
53
|
-
"url": "https://console-test.testdriver.ai/runs/
|
|
54
|
-
"lastUpdated": "2026-04-
|
|
53
|
+
"url": "https://console-test.testdriver.ai/runs/69d6f2cec0ec56e77d2d2b3a/69d6f2dcc0ec56e77d2d2b46",
|
|
54
|
+
"lastUpdated": "2026-04-09T00:29:48.386Z"
|
|
55
55
|
},
|
|
56
56
|
"press-keys.test.mjs": {
|
|
57
|
-
"url": "https://console-test.testdriver.ai/runs/
|
|
58
|
-
"lastUpdated": "2026-04-
|
|
57
|
+
"url": "https://console-test.testdriver.ai/runs/69d6f2cec0ec56e77d2d2b3a/69d6f2dec0ec56e77d2d2b47",
|
|
58
|
+
"lastUpdated": "2026-04-09T00:46:49.783Z"
|
|
59
59
|
},
|
|
60
60
|
"scroll-keyboard.test.mjs": {
|
|
61
|
-
"url": "https://console-test.testdriver.ai/runs/
|
|
62
|
-
"lastUpdated": "2026-04-
|
|
61
|
+
"url": "https://console-test.testdriver.ai/runs/69d6f2cec0ec56e77d2d2b3a/69d6f2e3c0ec56e77d2d2b4a",
|
|
62
|
+
"lastUpdated": "2026-04-09T00:30:27.053Z"
|
|
63
63
|
},
|
|
64
64
|
"scroll.test.mjs": {
|
|
65
|
-
"url": "https://console-test.testdriver.ai/runs/
|
|
66
|
-
"lastUpdated": "2026-04-
|
|
65
|
+
"url": "https://console-test.testdriver.ai/runs/69d6f2cec0ec56e77d2d2b3a/69d6f2e8c0ec56e77d2d2b4e",
|
|
66
|
+
"lastUpdated": "2026-04-09T00:55:13.692Z"
|
|
67
67
|
},
|
|
68
68
|
"scroll-until-image.test.mjs": {
|
|
69
|
-
"url": "https://console-test.testdriver.ai/runs/
|
|
70
|
-
"lastUpdated": "2026-04-
|
|
69
|
+
"url": "https://console-test.testdriver.ai/runs/69d6f2cec0ec56e77d2d2b3a/69d6f2e4c0ec56e77d2d2b4b",
|
|
70
|
+
"lastUpdated": "2026-04-09T00:29:24.528Z"
|
|
71
71
|
},
|
|
72
72
|
"prompt.test.mjs": {
|
|
73
|
-
"url": "https://console-test.testdriver.ai/runs/
|
|
74
|
-
"lastUpdated": "2026-04-
|
|
73
|
+
"url": "https://console-test.testdriver.ai/runs/69d6f2cec0ec56e77d2d2b3a/69d6f2e5c0ec56e77d2d2b4c",
|
|
74
|
+
"lastUpdated": "2026-04-09T00:30:29.837Z"
|
|
75
75
|
},
|
|
76
76
|
"focus-window.test.mjs": {
|
|
77
|
-
"url": "https://console-test.testdriver.ai/runs/
|
|
78
|
-
"lastUpdated": "2026-04-
|
|
77
|
+
"url": "https://console-test.testdriver.ai/runs/69d6f2cec0ec56e77d2d2b3a/69d6f2e7c0ec56e77d2d2b4d",
|
|
78
|
+
"lastUpdated": "2026-04-09T00:29:27.218Z"
|
|
79
79
|
},
|
|
80
80
|
"captcha-api.test.mjs": {
|
|
81
81
|
"url": "https://console.testdriver.ai/runs/698f7df69e27ce1528d7d087/698f7fb0d3b320ad547d9d44",
|
|
82
82
|
"lastUpdated": "2026-02-13T19:55:05.951Z"
|
|
83
83
|
},
|
|
84
84
|
"element-not-found.test.mjs": {
|
|
85
|
-
"url": "https://console-test.testdriver.ai/runs/
|
|
86
|
-
"lastUpdated": "2026-04-
|
|
85
|
+
"url": "https://console-test.testdriver.ai/runs/69d6f2cec0ec56e77d2d2b3a/69d6f2eac0ec56e77d2d2b4f",
|
|
86
|
+
"lastUpdated": "2026-04-09T00:30:34.117Z"
|
|
87
87
|
},
|
|
88
88
|
"formatted-logging.test.mjs": {
|
|
89
89
|
"url": "https://console-test.testdriver.ai/runs/69c8738614b73310c7839412/69c873a714b73310c7839450",
|
|
90
90
|
"lastUpdated": "2026-03-29T00:36:10.628Z"
|
|
91
91
|
},
|
|
92
92
|
"hover-text.test.mjs": {
|
|
93
|
-
"url": "https://console-test.testdriver.ai/runs/
|
|
94
|
-
"lastUpdated": "2026-04-
|
|
93
|
+
"url": "https://console-test.testdriver.ai/runs/69d6f2cec0ec56e77d2d2b3a/69d6f2edc0ec56e77d2d2b51",
|
|
94
|
+
"lastUpdated": "2026-04-09T00:29:33.199Z"
|
|
95
95
|
},
|
|
96
96
|
"no-provision.test.mjs": {
|
|
97
97
|
"url": "https://console.testdriver.ai/runs/69a62b3aaa712ecd3dea730a/69a62b7706a177a05bccd1cf",
|
|
98
98
|
"lastUpdated": "2026-03-03T00:32:25.279Z"
|
|
99
99
|
},
|
|
100
100
|
"ai.test.mjs": {
|
|
101
|
-
"url": "https://console-test.testdriver.ai/runs/
|
|
102
|
-
"lastUpdated": "2026-04-
|
|
101
|
+
"url": "https://console-test.testdriver.ai/runs/69d6f2cec0ec56e77d2d2b3a/69d6f2ebc0ec56e77d2d2b50",
|
|
102
|
+
"lastUpdated": "2026-04-09T00:58:39.073Z"
|
|
103
103
|
},
|
|
104
104
|
"popup-loading.test.mjs": {
|
|
105
105
|
"url": "https://console.testdriver.ai/runs/698bc89f7140c3fa7daaca8d/698bca7f7140c3fa7daacbf7",
|
|
@@ -134,12 +134,12 @@
|
|
|
134
134
|
"lastUpdated": "2026-02-13T19:55:05.953Z"
|
|
135
135
|
},
|
|
136
136
|
"findall-coffee-icons.test.mjs": {
|
|
137
|
-
"url": "https://console-test.testdriver.ai/runs/
|
|
138
|
-
"lastUpdated": "2026-04-
|
|
137
|
+
"url": "https://console-test.testdriver.ai/runs/69d6f2cec0ec56e77d2d2b3a/69d6f2e1c0ec56e77d2d2b49",
|
|
138
|
+
"lastUpdated": "2026-04-09T00:29:52.990Z"
|
|
139
139
|
},
|
|
140
140
|
"parse.test.mjs": {
|
|
141
|
-
"url": "https://console-test.testdriver.ai/runs/
|
|
142
|
-
"lastUpdated": "2026-04-
|
|
141
|
+
"url": "https://console-test.testdriver.ai/runs/69d6f2cec0ec56e77d2d2b3a/69d6f2eec0ec56e77d2d2b52",
|
|
142
|
+
"lastUpdated": "2026-04-09T00:30:38.622Z"
|
|
143
143
|
},
|
|
144
144
|
"flake-diffthreshold-001.test.mjs": {
|
|
145
145
|
"url": "https://console.testdriver.ai/runs/69a62b3aaa712ecd3dea730a/69a62bcafc0ac3cc632a91aa",
|
|
@@ -329,6 +329,20 @@ Understanding the directory structure helps with efficient screenshot viewing:
|
|
|
329
329
|
- All screenshots are PNG format
|
|
330
330
|
- Disable automatic screenshots with `autoScreenshots: false` if needed
|
|
331
331
|
|
|
332
|
+
## Interaction List Sidebar (Source of Truth)
|
|
333
|
+
|
|
334
|
+
When viewing a test run in the TestDriver console, the **interaction list sidebar** displays a screenshot for each interaction call (find, click, type, assert, etc.). These screenshots show exactly what was on the screen at the time each interaction was executed.
|
|
335
|
+
|
|
336
|
+
<Note>
|
|
337
|
+
**The sidebar screenshots are the source of truth.** If a test is behaving unexpectedly, check the screenshot attached to the specific interaction in the sidebar — it shows precisely what the AI saw when making its decision. This is more reliable than inferring screen state from test logs or local screenshots alone.
|
|
338
|
+
</Note>
|
|
339
|
+
|
|
340
|
+
Use the interaction list to:
|
|
341
|
+
- **Verify what the AI saw** — confirm the correct page/state was visible when `find()` or `assert()` ran
|
|
342
|
+
- **Debug misclicks** — see whether the target element was actually on screen
|
|
343
|
+
- **Identify timing issues** — spot cases where the UI hadn't finished loading before an interaction fired
|
|
344
|
+
- **Compare runs** — review interaction screenshots across multiple runs to catch flaky behavior
|
|
345
|
+
|
|
332
346
|
## Integration with Test Development
|
|
333
347
|
|
|
334
348
|
### During MCP Interactive Development
|
package/docs/v7/examples/ai.mdx
CHANGED
|
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
|
|
|
12
12
|
|
|
13
13
|
{/* ai.test.mjs output */}
|
|
14
14
|
<iframe
|
|
15
|
-
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/
|
|
15
|
+
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69d6f2ebc0ec56e77d2d2b50/replay"
|
|
16
16
|
width="100%"
|
|
17
17
|
height="390"
|
|
18
18
|
style={{ border: "1px solid #333", borderRadius: "8px" }}
|
|
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
|
|
|
12
12
|
|
|
13
13
|
{/* assert.test.mjs output */}
|
|
14
14
|
<iframe
|
|
15
|
-
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/
|
|
15
|
+
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69d6f2e0c0ec56e77d2d2b48/replay"
|
|
16
16
|
width="100%"
|
|
17
17
|
height="390"
|
|
18
18
|
style={{ border: "1px solid #333", borderRadius: "8px" }}
|
|
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
|
|
|
12
12
|
|
|
13
13
|
{/* chrome-extension.test.mjs output */}
|
|
14
14
|
<iframe
|
|
15
|
-
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/
|
|
15
|
+
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69d6f2d0c0ec56e77d2d2b3b/replay"
|
|
16
16
|
width="100%"
|
|
17
17
|
height="390"
|
|
18
18
|
style={{ border: "1px solid #333", borderRadius: "8px" }}
|
|
@@ -76,7 +76,7 @@ describe("Chrome Extension Test", () => {
|
|
|
76
76
|
// When clicked, it shows a popup with "Hello Extensions"
|
|
77
77
|
|
|
78
78
|
// Click on the extensions button (puzzle piece icon) in Chrome toolbar
|
|
79
|
-
const extensionsButton = await testdriver.find("The extensions button in the Chrome toolbar", {zoom: true});
|
|
79
|
+
const extensionsButton = await testdriver.find("The extensions button in the Chrome toolbar", {zoom: true, verify: true});
|
|
80
80
|
await extensionsButton.click();
|
|
81
81
|
|
|
82
82
|
// Look for the hello world extension in the extensions menu
|
|
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
|
|
|
12
12
|
|
|
13
13
|
{/* element-not-found.test.mjs output */}
|
|
14
14
|
<iframe
|
|
15
|
-
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/
|
|
15
|
+
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69d6f2eac0ec56e77d2d2b4f/replay"
|
|
16
16
|
width="100%"
|
|
17
17
|
height="390"
|
|
18
18
|
style={{ border: "1px solid #333", borderRadius: "8px" }}
|
|
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
|
|
|
12
12
|
|
|
13
13
|
{/* exec-output.test.mjs output */}
|
|
14
14
|
<iframe
|
|
15
|
-
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/
|
|
15
|
+
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69d6f2d7c0ec56e77d2d2b41/replay"
|
|
16
16
|
width="100%"
|
|
17
17
|
height="390"
|
|
18
18
|
style={{ border: "1px solid #333", borderRadius: "8px" }}
|
|
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
|
|
|
12
12
|
|
|
13
13
|
{/* exec-pwsh.test.mjs output */}
|
|
14
14
|
<iframe
|
|
15
|
-
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/
|
|
15
|
+
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69d6f2d1c0ec56e77d2d2b3c/replay"
|
|
16
16
|
width="100%"
|
|
17
17
|
height="390"
|
|
18
18
|
style={{ border: "1px solid #333", borderRadius: "8px" }}
|
|
@@ -18,7 +18,7 @@ Watch this test execute in a real sandbox environment:
|
|
|
18
18
|
|
|
19
19
|
{/* findall-coffee-icons.test.mjs output */}
|
|
20
20
|
<iframe
|
|
21
|
-
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/
|
|
21
|
+
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69d6f2e1c0ec56e77d2d2b49/replay"
|
|
22
22
|
width="100%"
|
|
23
23
|
height="600"
|
|
24
24
|
style={{ border: "1px solid #333", borderRadius: "8px" }}
|
|
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
|
|
|
12
12
|
|
|
13
13
|
{/* focus-window.test.mjs output */}
|
|
14
14
|
<iframe
|
|
15
|
-
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/
|
|
15
|
+
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69d6f2e7c0ec56e77d2d2b4d/replay"
|
|
16
16
|
width="100%"
|
|
17
17
|
height="390"
|
|
18
18
|
style={{ border: "1px solid #333", borderRadius: "8px" }}
|
|
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
|
|
|
12
12
|
|
|
13
13
|
{/* hover-image.test.mjs output */}
|
|
14
14
|
<iframe
|
|
15
|
-
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/
|
|
15
|
+
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69d6f2d9c0ec56e77d2d2b42/replay"
|
|
16
16
|
width="100%"
|
|
17
17
|
height="390"
|
|
18
18
|
style={{ border: "1px solid #333", borderRadius: "8px" }}
|
|
@@ -18,7 +18,7 @@ Watch this test execute in a real sandbox environment:
|
|
|
18
18
|
|
|
19
19
|
{/* hover-text-with-description.test.mjs output */}
|
|
20
20
|
<iframe
|
|
21
|
-
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/
|
|
21
|
+
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69d6f2d3c0ec56e77d2d2b3d/replay"
|
|
22
22
|
width="100%"
|
|
23
23
|
height="600"
|
|
24
24
|
style={{ border: "1px solid #333", borderRadius: "8px" }}
|
|
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
|
|
|
12
12
|
|
|
13
13
|
{/* hover-text.test.mjs output */}
|
|
14
14
|
<iframe
|
|
15
|
-
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/
|
|
15
|
+
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69d6f2edc0ec56e77d2d2b51/replay"
|
|
16
16
|
width="100%"
|
|
17
17
|
height="390"
|
|
18
18
|
style={{ border: "1px solid #333", borderRadius: "8px" }}
|
|
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
|
|
|
12
12
|
|
|
13
13
|
{/* installer.test.mjs output */}
|
|
14
14
|
<iframe
|
|
15
|
-
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/
|
|
15
|
+
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69d6f2dbc0ec56e77d2d2b43/replay"
|
|
16
16
|
width="100%"
|
|
17
17
|
height="390"
|
|
18
18
|
style={{ border: "1px solid #333", borderRadius: "8px" }}
|
|
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
|
|
|
12
12
|
|
|
13
13
|
{/* launch-vscode-linux.test.mjs output */}
|
|
14
14
|
<iframe
|
|
15
|
-
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/
|
|
15
|
+
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69d6f2d5c0ec56e77d2d2b3e/replay"
|
|
16
16
|
width="100%"
|
|
17
17
|
height="390"
|
|
18
18
|
style={{ border: "1px solid #333", borderRadius: "8px" }}
|
|
@@ -17,7 +17,7 @@ Watch this test execute in a real sandbox environment:
|
|
|
17
17
|
|
|
18
18
|
{/* parse.test.mjs output */}
|
|
19
19
|
<iframe
|
|
20
|
-
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/
|
|
20
|
+
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69d6f2eec0ec56e77d2d2b52/replay"
|
|
21
21
|
width="100%"
|
|
22
22
|
height="600"
|
|
23
23
|
style={{ border: "1px solid #333", borderRadius: "8px" }}
|
|
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
|
|
|
12
12
|
|
|
13
13
|
{/* press-keys.test.mjs output */}
|
|
14
14
|
<iframe
|
|
15
|
-
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/
|
|
15
|
+
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69d6f2dec0ec56e77d2d2b47/replay"
|
|
16
16
|
width="100%"
|
|
17
17
|
height="390"
|
|
18
18
|
style={{ border: "1px solid #333", borderRadius: "8px" }}
|
|
@@ -17,7 +17,7 @@ Watch this test execute in a real sandbox environment:
|
|
|
17
17
|
|
|
18
18
|
{/* prompt.test.mjs output */}
|
|
19
19
|
<iframe
|
|
20
|
-
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/
|
|
20
|
+
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69d6f2e5c0ec56e77d2d2b4c/replay"
|
|
21
21
|
width="100%"
|
|
22
22
|
height="600"
|
|
23
23
|
style={{ border: "1px solid #333", borderRadius: "8px" }}
|
|
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
|
|
|
12
12
|
|
|
13
13
|
{/* scroll-keyboard.test.mjs output */}
|
|
14
14
|
<iframe
|
|
15
|
-
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/
|
|
15
|
+
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69d6f2e3c0ec56e77d2d2b4a/replay"
|
|
16
16
|
width="100%"
|
|
17
17
|
height="390"
|
|
18
18
|
style={{ border: "1px solid #333", borderRadius: "8px" }}
|
|
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
|
|
|
12
12
|
|
|
13
13
|
{/* scroll-until-image.test.mjs output */}
|
|
14
14
|
<iframe
|
|
15
|
-
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/
|
|
15
|
+
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69d6f2e4c0ec56e77d2d2b4b/replay"
|
|
16
16
|
width="100%"
|
|
17
17
|
height="390"
|
|
18
18
|
style={{ border: "1px solid #333", borderRadius: "8px" }}
|
|
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
|
|
|
12
12
|
|
|
13
13
|
{/* scroll.test.mjs output */}
|
|
14
14
|
<iframe
|
|
15
|
-
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/
|
|
15
|
+
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69d6f2e8c0ec56e77d2d2b4e/replay"
|
|
16
16
|
width="100%"
|
|
17
17
|
height="390"
|
|
18
18
|
style={{ border: "1px solid #333", borderRadius: "8px" }}
|
|
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
|
|
|
12
12
|
|
|
13
13
|
{/* type.test.mjs output */}
|
|
14
14
|
<iframe
|
|
15
|
-
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/
|
|
15
|
+
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69d6f2dcc0ec56e77d2d2b46/replay"
|
|
16
16
|
width="100%"
|
|
17
17
|
height="390"
|
|
18
18
|
style={{ border: "1px solid #333", borderRadius: "8px" }}
|
|
@@ -12,7 +12,7 @@ Watch this test execute in a real sandbox environment:
|
|
|
12
12
|
|
|
13
13
|
{/* windows-installer.test.mjs output */}
|
|
14
14
|
<iframe
|
|
15
|
-
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/
|
|
15
|
+
src="https://api-test.testdriver.ai/api/v1/testdriver/testcase/69d6f2d6c0ec56e77d2d2b40/replay"
|
|
16
16
|
width="100%"
|
|
17
17
|
height="390"
|
|
18
18
|
style={{ border: "1px solid #333", borderRadius: "8px" }}
|
package/docs/v7/find.mdx
CHANGED
|
@@ -367,6 +367,39 @@ This two-phase approach gives the AI a higher-resolution view of the target area
|
|
|
367
367
|
- You need extra precision for closely spaced UI elements
|
|
368
368
|
</Tip>
|
|
369
369
|
|
|
370
|
+
## Verify Mode
|
|
371
|
+
|
|
372
|
+
Verify mode is **disabled by default**. When enabled, a second AI call checks that the coordinates returned by `find()` actually correspond to the requested element, catching hallucinated or incorrect positions.
|
|
373
|
+
|
|
374
|
+
```javascript
|
|
375
|
+
// Enable verification for critical interactions
|
|
376
|
+
const deleteBtn = await testdriver.find('delete account button', { verify: true });
|
|
377
|
+
await deleteBtn.click();
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
### How Verify Mode Works
|
|
381
|
+
|
|
382
|
+
1. **Phase 1**: AI locates the element and returns coordinates
|
|
383
|
+
2. **Phase 2**: A second AI call examines the screenshot at those coordinates to confirm the element matches the description
|
|
384
|
+
3. **Result**: If verification fails, the find is retried or marked as not found
|
|
385
|
+
|
|
386
|
+
### Combining Zoom and Verify
|
|
387
|
+
|
|
388
|
+
For maximum accuracy, enable both `zoom` and `verify` together. This is useful for critical interactions where clicking the wrong element could cause cascading failures:
|
|
389
|
+
|
|
390
|
+
```javascript
|
|
391
|
+
// Maximum accuracy: zoom for precision + verify to catch hallucinations
|
|
392
|
+
const element = await testdriver.find('small cancel icon next to the subscription', {
|
|
393
|
+
zoom: true,
|
|
394
|
+
verify: true,
|
|
395
|
+
});
|
|
396
|
+
await element.click();
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
<Warning>
|
|
400
|
+
Both `zoom` and `verify` add extra AI calls per `find()` invocation, which increases latency and API usage. When both are enabled, each find may make up to 3 AI calls. **Rate limiting may occur** if many find calls use these options in rapid succession. Use them selectively for critical interactions rather than on every find call.
|
|
401
|
+
</Warning>
|
|
402
|
+
|
|
370
403
|
## Cache Options
|
|
371
404
|
|
|
372
405
|
Control caching behavior to optimize performance, especially when using dynamic variables in prompts.
|
|
@@ -53,7 +53,7 @@ describe("Chrome Extension Test", () => {
|
|
|
53
53
|
// When clicked, it shows a popup with "Hello Extensions"
|
|
54
54
|
|
|
55
55
|
// Click on the extensions button (puzzle piece icon) in Chrome toolbar
|
|
56
|
-
const extensionsButton = await testdriver.find("The extensions button in the Chrome toolbar", {zoom: true});
|
|
56
|
+
const extensionsButton = await testdriver.find("The extensions button in the Chrome toolbar", {zoom: true, verify: true});
|
|
57
57
|
await extensionsButton.click();
|
|
58
58
|
|
|
59
59
|
// Look for the hello world extension in the extensions menu
|
package/package.json
CHANGED
|
@@ -145,17 +145,38 @@ done
|
|
|
145
145
|
echo "Installing runner..."
|
|
146
146
|
|
|
147
147
|
# Determine environment and version
|
|
148
|
-
TD_CHANNEL="${TD_CHANNEL:-stable}"
|
|
149
148
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
150
|
-
|
|
149
|
+
# SDK package.json — works both from monorepo (sdk/setup/aws/) and npm install (setup/aws/)
|
|
150
|
+
SDK_PKG_JSON="${SCRIPT_DIR}/../../package.json"
|
|
151
151
|
RUNNER_DIR="${SCRIPT_DIR}/../../../runner"
|
|
152
152
|
|
|
153
|
+
# Derive channel from TD_CHANNEL env, or from the SDK version's prerelease tag
|
|
154
|
+
# (mirrors sdk/lib/resolve-channel.js logic)
|
|
155
|
+
if [ -z "${TD_CHANNEL:-}" ]; then
|
|
156
|
+
if [ -f "$SDK_PKG_JSON" ]; then
|
|
157
|
+
SDK_VERSION=$(jq -r '.version' "$SDK_PKG_JSON")
|
|
158
|
+
# Extract prerelease tag: "7.6.0-canary.5" → "canary", "7.6.0" → ""
|
|
159
|
+
PRE_TAG=$(echo "$SDK_VERSION" | sed -n 's/^[0-9]*\.[0-9]*\.[0-9]*-\([a-z]*\).*/\1/p')
|
|
160
|
+
if [ -n "$PRE_TAG" ] && echo "$PRE_TAG" | grep -qE '^(dev|test|canary|stable)$'; then
|
|
161
|
+
TD_CHANNEL="$PRE_TAG"
|
|
162
|
+
echo "Channel derived from SDK version ($SDK_VERSION): $TD_CHANNEL"
|
|
163
|
+
else
|
|
164
|
+
TD_CHANNEL="stable"
|
|
165
|
+
echo "SDK version $SDK_VERSION has no prerelease tag, defaulting to: $TD_CHANNEL"
|
|
166
|
+
fi
|
|
167
|
+
else
|
|
168
|
+
TD_CHANNEL="stable"
|
|
169
|
+
echo "SDK package.json not found, defaulting channel to: $TD_CHANNEL"
|
|
170
|
+
fi
|
|
171
|
+
fi
|
|
172
|
+
echo "Using channel: $TD_CHANNEL"
|
|
173
|
+
|
|
153
174
|
if [ -f "$SDK_PKG_JSON" ]; then
|
|
154
175
|
RUNNER_VERSION=$(jq -r '.version' "$SDK_PKG_JSON")
|
|
155
176
|
echo "Runner version from SDK: $RUNNER_VERSION"
|
|
156
177
|
else
|
|
157
178
|
RUNNER_VERSION="$TD_CHANNEL"
|
|
158
|
-
echo "SDK package.json not found, using
|
|
179
|
+
echo "SDK package.json not found, using channel as runner version: $RUNNER_VERSION"
|
|
159
180
|
fi
|
|
160
181
|
|
|
161
182
|
if [ "$TD_CHANNEL" = "dev" ]; then
|