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
package/docs/docs.json
CHANGED
|
@@ -12,175 +12,255 @@
|
|
|
12
12
|
},
|
|
13
13
|
"favicon": "/images/template/icon.png",
|
|
14
14
|
"navigation": {
|
|
15
|
-
"
|
|
15
|
+
"tabs": [
|
|
16
16
|
{
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"/overview/what-is-testdriver",
|
|
17
|
+
"tab": "Computer-Use SDK",
|
|
18
|
+
"versions": [
|
|
20
19
|
{
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
20
|
+
"version": "7.0.0 (SDK)",
|
|
21
|
+
"groups": [
|
|
22
|
+
{
|
|
23
|
+
"group": "Getting Started",
|
|
24
|
+
"pages": [
|
|
25
|
+
"/v7/getting-started/quickstart"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"group": "API Reference",
|
|
30
|
+
"pages": [
|
|
31
|
+
{
|
|
32
|
+
"group": "Setup",
|
|
33
|
+
"icon": "gear",
|
|
34
|
+
"pages": [
|
|
35
|
+
"/v7/api/client",
|
|
36
|
+
"/v7/api/sandbox"
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"group": "Actions",
|
|
41
|
+
"icon": "wand-magic-sparkles",
|
|
42
|
+
"pages": [
|
|
43
|
+
"/v7/api/ai"
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"group": "Methods",
|
|
48
|
+
"icon": "code",
|
|
49
|
+
"pages": [
|
|
50
|
+
"/v7/api/find",
|
|
51
|
+
"/v7/api/click",
|
|
52
|
+
"/v7/api/type",
|
|
53
|
+
"/v7/api/pressKeys",
|
|
54
|
+
"/v7/api/scroll",
|
|
55
|
+
"/v7/api/hover",
|
|
56
|
+
"/v7/api/exec",
|
|
57
|
+
"/v7/api/focusApplication",
|
|
58
|
+
"/v7/api/assert"
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"group": "Reference",
|
|
63
|
+
"icon": "book",
|
|
64
|
+
"pages": [
|
|
65
|
+
"/v7/api/elements",
|
|
66
|
+
"/v7/api/assertions"
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"group": "Guides",
|
|
73
|
+
"pages": [
|
|
74
|
+
"/v7/guides/migration"
|
|
75
|
+
]
|
|
76
|
+
}
|
|
28
77
|
]
|
|
29
78
|
},
|
|
30
|
-
"/account/enterprise"
|
|
31
|
-
]
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
"group": "Get Started",
|
|
35
|
-
"pages": [
|
|
36
|
-
"/overview/quickstart",
|
|
37
79
|
{
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"pages": [
|
|
41
|
-
"/cli/overview",
|
|
80
|
+
"version": "6.X.X (YAML)",
|
|
81
|
+
"groups": [
|
|
42
82
|
{
|
|
43
|
-
"group": "
|
|
44
|
-
"icon": "command",
|
|
83
|
+
"group": "Overview",
|
|
45
84
|
"pages": [
|
|
46
|
-
"/
|
|
47
|
-
|
|
48
|
-
|
|
85
|
+
"/v6/overview/what-is-testdriver",
|
|
86
|
+
{
|
|
87
|
+
"group": "Concepts",
|
|
88
|
+
"icon": "book",
|
|
89
|
+
"pages": [
|
|
90
|
+
"/v6/features/selectorless",
|
|
91
|
+
"/v6/overview/comparison",
|
|
92
|
+
"/v6/overview/performance",
|
|
93
|
+
"/v6/overview/faq"
|
|
94
|
+
]
|
|
95
|
+
},
|
|
96
|
+
"/v6/account/enterprise"
|
|
97
|
+
]
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"group": "Get Started",
|
|
101
|
+
"pages": [
|
|
102
|
+
"/v6/overview/quickstart",
|
|
103
|
+
{
|
|
104
|
+
"group": "CLI",
|
|
105
|
+
"icon": "terminal",
|
|
106
|
+
"pages": [
|
|
107
|
+
"/v6/cli/overview",
|
|
108
|
+
{
|
|
109
|
+
"group": "Commands",
|
|
110
|
+
"icon": "command",
|
|
111
|
+
"pages": [
|
|
112
|
+
"/v6/interactive/explore",
|
|
113
|
+
"/v6/interactive/run",
|
|
114
|
+
"/v6/interactive/save"
|
|
115
|
+
]
|
|
116
|
+
}
|
|
117
|
+
]
|
|
118
|
+
},
|
|
119
|
+
"/v6/getting-started/self-hosting",
|
|
120
|
+
"/v6/getting-started/playwright",
|
|
121
|
+
"/v6/getting-started/vscode"
|
|
122
|
+
]
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"group": "Examples",
|
|
126
|
+
"pages": [
|
|
127
|
+
{
|
|
128
|
+
"group": "Apps",
|
|
129
|
+
"icon": "laptop",
|
|
130
|
+
"pages": [
|
|
131
|
+
"apps/static-websites",
|
|
132
|
+
"apps/desktop-apps",
|
|
133
|
+
"apps/chrome-extensions",
|
|
134
|
+
"apps/mobile-apps",
|
|
135
|
+
"apps/tauri-apps"
|
|
136
|
+
]
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"group": "Scenarios",
|
|
140
|
+
"icon": "computer-mouse",
|
|
141
|
+
"pages": [
|
|
142
|
+
"scenarios/ai-chatbot",
|
|
143
|
+
"scenarios/cookie-banner",
|
|
144
|
+
"scenarios/file-upload",
|
|
145
|
+
"scenarios/form-filling",
|
|
146
|
+
"scenarios/log-in",
|
|
147
|
+
"scenarios/pdf-generation",
|
|
148
|
+
"scenarios/spell-check"
|
|
149
|
+
]
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"group": "Build Systems",
|
|
153
|
+
"icon": "helmet-safety",
|
|
154
|
+
"pages": [
|
|
155
|
+
"/v6/integrations/electron",
|
|
156
|
+
"/v6/integrations/netlify",
|
|
157
|
+
"/v6/integrations/vercel"
|
|
158
|
+
]
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"group": "Guide",
|
|
164
|
+
"pages": [
|
|
165
|
+
{
|
|
166
|
+
"group": "Configuration",
|
|
167
|
+
"icon": "desktop",
|
|
168
|
+
"pages": [
|
|
169
|
+
"/v6/guide/authentication",
|
|
170
|
+
"/v6/guide/variables",
|
|
171
|
+
"/v6/guide/lifecycle",
|
|
172
|
+
"/v6/guide/dashcam",
|
|
173
|
+
"/v6/guide/environment-variables",
|
|
174
|
+
"/v6/action/ami"
|
|
175
|
+
]
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"group": "Writing",
|
|
179
|
+
"icon": "pencil",
|
|
180
|
+
"pages": [
|
|
181
|
+
"/v6/features/generation",
|
|
182
|
+
"/v6/guide/locating",
|
|
183
|
+
"/v6/guide/waiting",
|
|
184
|
+
"/v6/guide/assertions",
|
|
185
|
+
"/v6/guide/code",
|
|
186
|
+
"/v6/features/reusable-snippets",
|
|
187
|
+
"/v6/guide/protips"
|
|
188
|
+
]
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"group": "Importing",
|
|
192
|
+
"icon": "file-import",
|
|
193
|
+
"pages": [
|
|
194
|
+
"/v6/importing/csv",
|
|
195
|
+
"/v6/importing/gherkin",
|
|
196
|
+
"/v6/importing/jira",
|
|
197
|
+
"/v6/importing/testrail"
|
|
198
|
+
]
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"group": "Running",
|
|
202
|
+
"icon": "play",
|
|
203
|
+
"pages": [
|
|
204
|
+
"/v6/getting-started/running",
|
|
205
|
+
"/v6/getting-started/ci",
|
|
206
|
+
"/v6/features/parallel-testing",
|
|
207
|
+
"/v6/action/performance",
|
|
208
|
+
"/v6/action/secrets"
|
|
209
|
+
]
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"group": "Maintaining",
|
|
213
|
+
"icon": "wrench",
|
|
214
|
+
"pages": ["/v6/getting-started/editing", "/v6/features/auto-healing"]
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"group": "Reporting",
|
|
218
|
+
"icon": "chart-simple",
|
|
219
|
+
"pages": ["exporting/junit", "/v6/bugs/jira"]
|
|
220
|
+
}
|
|
221
|
+
]
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"group": "Reference",
|
|
225
|
+
"pages": [
|
|
226
|
+
{
|
|
227
|
+
"group": "YAML",
|
|
228
|
+
"icon": "file-code",
|
|
229
|
+
"pages": [
|
|
230
|
+
"/v6/commands/assert",
|
|
231
|
+
"/v6/commands/exec",
|
|
232
|
+
"/v6/commands/focus-application",
|
|
233
|
+
"/v6/commands/hover-image",
|
|
234
|
+
"/v6/commands/hover-text",
|
|
235
|
+
"/v6/commands/if",
|
|
236
|
+
"/v6/commands/match-image",
|
|
237
|
+
"/v6/commands/press-keys",
|
|
238
|
+
"/v6/commands/remember",
|
|
239
|
+
"/v6/commands/run",
|
|
240
|
+
"/v6/commands/scroll",
|
|
241
|
+
"/v6/commands/scroll-until-image",
|
|
242
|
+
"/v6/commands/scroll-until-text",
|
|
243
|
+
"/v6/commands/type",
|
|
244
|
+
"/v6/commands/wait",
|
|
245
|
+
"/v6/commands/wait-for-image",
|
|
246
|
+
"/v6/commands/wait-for-text"
|
|
247
|
+
]
|
|
248
|
+
}
|
|
49
249
|
]
|
|
50
250
|
}
|
|
51
251
|
]
|
|
52
|
-
}
|
|
53
|
-
"/getting-started/self-hosting",
|
|
54
|
-
"/getting-started/playwright",
|
|
55
|
-
"/getting-started/vscode"
|
|
252
|
+
}
|
|
56
253
|
]
|
|
57
254
|
},
|
|
58
255
|
{
|
|
59
|
-
"
|
|
60
|
-
"pages": [
|
|
61
|
-
{
|
|
62
|
-
"group": "Apps",
|
|
63
|
-
"icon": "laptop",
|
|
64
|
-
"pages": [
|
|
65
|
-
"apps/static-websites",
|
|
66
|
-
"apps/desktop-apps",
|
|
67
|
-
"apps/chrome-extensions",
|
|
68
|
-
"apps/mobile-apps",
|
|
69
|
-
"apps/tauri-apps"
|
|
70
|
-
]
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
"group": "Scenarios",
|
|
74
|
-
"icon": "computer-mouse",
|
|
75
|
-
"pages": [
|
|
76
|
-
"scenarios/ai-chatbot",
|
|
77
|
-
"scenarios/cookie-banner",
|
|
78
|
-
"scenarios/file-upload",
|
|
79
|
-
"scenarios/form-filling",
|
|
80
|
-
"scenarios/log-in",
|
|
81
|
-
"scenarios/pdf-generation",
|
|
82
|
-
"scenarios/spell-check"
|
|
83
|
-
]
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
"group": "Build Systems",
|
|
87
|
-
"icon": "helmet-safety",
|
|
88
|
-
"pages": [
|
|
89
|
-
"/integrations/electron",
|
|
90
|
-
"/integrations/netlify",
|
|
91
|
-
"/integrations/vercel"
|
|
92
|
-
]
|
|
93
|
-
}
|
|
94
|
-
]
|
|
256
|
+
"tab": "Playwright SDK",
|
|
257
|
+
"pages": ["v7/playwright"]
|
|
95
258
|
},
|
|
96
259
|
{
|
|
97
|
-
"
|
|
98
|
-
"pages": [
|
|
99
|
-
{
|
|
100
|
-
"group": "Configuration",
|
|
101
|
-
"icon": "desktop",
|
|
102
|
-
"pages": [
|
|
103
|
-
"/guide/authentication",
|
|
104
|
-
"/guide/variables",
|
|
105
|
-
"/guide/lifecycle",
|
|
106
|
-
"/guide/dashcam",
|
|
107
|
-
"/guide/environment-variables",
|
|
108
|
-
"/action/ami"
|
|
109
|
-
]
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
"group": "Writing",
|
|
113
|
-
"icon": "pencil",
|
|
114
|
-
"pages": [
|
|
115
|
-
"/features/generation",
|
|
116
|
-
"/guide/locating",
|
|
117
|
-
"/guide/waiting",
|
|
118
|
-
"/guide/assertions",
|
|
119
|
-
"/guide/code",
|
|
120
|
-
"/features/reusable-snippets",
|
|
121
|
-
"/guide/protips"
|
|
122
|
-
]
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
"group": "Importing",
|
|
126
|
-
"icon": "file-import",
|
|
127
|
-
"pages": [
|
|
128
|
-
"/importing/csv",
|
|
129
|
-
"/importing/gherkin",
|
|
130
|
-
"/importing/jira",
|
|
131
|
-
"/importing/testrail"
|
|
132
|
-
]
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
"group": "Running",
|
|
136
|
-
"icon": "play",
|
|
137
|
-
"pages": [
|
|
138
|
-
"/getting-started/running",
|
|
139
|
-
"/getting-started/ci",
|
|
140
|
-
"/features/parallel-testing",
|
|
141
|
-
"/action/performance",
|
|
142
|
-
"/action/secrets"
|
|
143
|
-
]
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
"group": "Maintaining",
|
|
147
|
-
"icon": "wrench",
|
|
148
|
-
"pages": ["/getting-started/editing", "/features/auto-healing"]
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
"group": "Reporting",
|
|
152
|
-
"icon": "chart-simple",
|
|
153
|
-
"pages": ["exporting/junit", "/bugs/jira"]
|
|
154
|
-
}
|
|
155
|
-
]
|
|
260
|
+
"tab": "Playwright Studio"
|
|
156
261
|
},
|
|
157
262
|
{
|
|
158
|
-
"
|
|
159
|
-
"pages": [
|
|
160
|
-
{
|
|
161
|
-
"group": "YAML",
|
|
162
|
-
"icon": "file-code",
|
|
163
|
-
"pages": [
|
|
164
|
-
"/commands/assert",
|
|
165
|
-
"/commands/exec",
|
|
166
|
-
"/commands/focus-application",
|
|
167
|
-
"/commands/hover-image",
|
|
168
|
-
"/commands/hover-text",
|
|
169
|
-
"/commands/if",
|
|
170
|
-
"/commands/match-image",
|
|
171
|
-
"/commands/press-keys",
|
|
172
|
-
"/commands/remember",
|
|
173
|
-
"/commands/run",
|
|
174
|
-
"/commands/scroll",
|
|
175
|
-
"/commands/scroll-until-image",
|
|
176
|
-
"/commands/scroll-until-text",
|
|
177
|
-
"/commands/type",
|
|
178
|
-
"/commands/wait",
|
|
179
|
-
"/commands/wait-for-image",
|
|
180
|
-
"/commands/wait-for-text"
|
|
181
|
-
]
|
|
182
|
-
}
|
|
183
|
-
]
|
|
263
|
+
"tab": "Dashcam CLI"
|
|
184
264
|
}
|
|
185
265
|
]
|
|
186
266
|
},
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# SDK Browser Rendering Feature
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The TestDriver SDK now supports automatic browser rendering of the sandbox environment, matching the behavior of the existing agent CLI. When connecting to a sandbox, the SDK will automatically open a browser window showing the live VNC session, allowing you to watch test execution in real-time.
|
|
6
|
+
|
|
7
|
+
## Changes Made
|
|
8
|
+
|
|
9
|
+
### 1. SDK Core (`sdk.js`)
|
|
10
|
+
|
|
11
|
+
#### Added Dependencies
|
|
12
|
+
- Imported `createDebuggerProcess` from `./agent/lib/debugger.js` to enable the debugger server
|
|
13
|
+
|
|
14
|
+
#### New Instance Variables
|
|
15
|
+
- `debuggerProcess`: Reference to the debugger server process
|
|
16
|
+
- `debuggerUrl`: URL of the debugger web interface
|
|
17
|
+
|
|
18
|
+
#### Enhanced `connect()` Method
|
|
19
|
+
- Automatically starts the debugger server when connecting (unless in headless mode)
|
|
20
|
+
- Calls `_renderSandbox()` after successful connection to open the browser window
|
|
21
|
+
- Supports new `headless` option to disable browser rendering
|
|
22
|
+
|
|
23
|
+
#### New Methods
|
|
24
|
+
|
|
25
|
+
**`_renderSandbox(instance)`**
|
|
26
|
+
- Constructs the VNC URL from the sandbox instance details
|
|
27
|
+
- Creates encoded data payload for the debugger
|
|
28
|
+
- Emits the `show-window` event with the debugger URL
|
|
29
|
+
|
|
30
|
+
**`_openBrowser(url)`**
|
|
31
|
+
- Uses the `open` npm package to launch the default browser
|
|
32
|
+
- Handles errors gracefully with fallback to manual URL copy
|
|
33
|
+
- Uses dynamic import for ES module compatibility
|
|
34
|
+
|
|
35
|
+
#### Enhanced `_setupLogging()` Method
|
|
36
|
+
- Added event listener for `show-window` events
|
|
37
|
+
- Automatically opens browser when event is emitted
|
|
38
|
+
- Respects CI mode (prints view-only URL instead of opening browser)
|
|
39
|
+
|
|
40
|
+
### 2. Documentation Updates
|
|
41
|
+
|
|
42
|
+
#### SDK README (`SDK_README.md`)
|
|
43
|
+
- Updated `connect()` method documentation
|
|
44
|
+
- Added `headless` parameter description
|
|
45
|
+
- Added note about automatic browser rendering behavior
|
|
46
|
+
- Provided examples for both headless and non-headless modes
|
|
47
|
+
|
|
48
|
+
### 3. Examples
|
|
49
|
+
|
|
50
|
+
#### `examples/sdk-with-browser.js`
|
|
51
|
+
- Demonstrates default behavior with browser rendering
|
|
52
|
+
- Shows how to use the SDK with visual feedback
|
|
53
|
+
- Includes detailed console output explaining what's happening
|
|
54
|
+
|
|
55
|
+
#### `examples/sdk-headless.js`
|
|
56
|
+
- Demonstrates headless mode for CI/CD environments
|
|
57
|
+
- Shows how to disable browser rendering
|
|
58
|
+
- Useful for automated testing scenarios
|
|
59
|
+
|
|
60
|
+
### 4. Tests
|
|
61
|
+
|
|
62
|
+
#### `testdriver/acceptance-sdk/sandbox-render.test.mjs`
|
|
63
|
+
- Verifies that the `show-window` event is emitted
|
|
64
|
+
- Tests basic interaction with the rendered sandbox
|
|
65
|
+
- Includes timeout handling for sandbox creation
|
|
66
|
+
|
|
67
|
+
## How It Works
|
|
68
|
+
|
|
69
|
+
1. **Connection Phase**
|
|
70
|
+
- When `connect()` is called without `headless: true`
|
|
71
|
+
- The debugger server is started on port 3000 (by default)
|
|
72
|
+
- The sandbox is created/connected as usual
|
|
73
|
+
|
|
74
|
+
2. **Rendering Phase**
|
|
75
|
+
- After successful connection, `_renderSandbox()` is called
|
|
76
|
+
- It constructs the VNC URL: `http://{instance.ip}:{vncPort}/vnc_lite.html?token=V3b8wG9`
|
|
77
|
+
- Creates data payload with resolution, URL, and token
|
|
78
|
+
- Builds debugger URL: `{debuggerUrl}?data={encodedData}`
|
|
79
|
+
|
|
80
|
+
3. **Browser Opening**
|
|
81
|
+
- The `show-window` event is emitted with the debugger URL
|
|
82
|
+
- The event listener in `_setupLogging()` catches it
|
|
83
|
+
- The `_openBrowser()` method is called
|
|
84
|
+
- Default browser opens to the debugger interface
|
|
85
|
+
- User can watch live test execution
|
|
86
|
+
|
|
87
|
+
## Usage Examples
|
|
88
|
+
|
|
89
|
+
### Default Behavior (Browser Opens)
|
|
90
|
+
|
|
91
|
+
```javascript
|
|
92
|
+
const TestDriver = require('testdriverai');
|
|
93
|
+
|
|
94
|
+
const client = new TestDriver(process.env.TD_API_KEY, {
|
|
95
|
+
logging: true
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
await client.auth();
|
|
99
|
+
await client.connect(); // Browser opens automatically
|
|
100
|
+
|
|
101
|
+
await client.hoverText('Submit');
|
|
102
|
+
await client.click();
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Headless Mode (No Browser)
|
|
106
|
+
|
|
107
|
+
```javascript
|
|
108
|
+
const TestDriver = require('testdriverai');
|
|
109
|
+
|
|
110
|
+
const client = new TestDriver(process.env.TD_API_KEY, {
|
|
111
|
+
logging: true
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
await client.auth();
|
|
115
|
+
await client.connect({ headless: true }); // No browser
|
|
116
|
+
|
|
117
|
+
await client.hoverText('Submit');
|
|
118
|
+
await client.click();
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### CI/CD Mode
|
|
122
|
+
|
|
123
|
+
When `CI` environment variable is set or `config.CI` is true, the SDK will:
|
|
124
|
+
- Print the view-only URL instead of opening a browser
|
|
125
|
+
- Allow monitoring without interrupting the test flow
|
|
126
|
+
|
|
127
|
+
## Benefits
|
|
128
|
+
|
|
129
|
+
1. **Visual Feedback**: Developers can watch tests execute in real-time
|
|
130
|
+
2. **Debugging**: Easier to understand test failures by seeing what's happening
|
|
131
|
+
3. **Consistency**: Matches the behavior of the CLI tool
|
|
132
|
+
4. **Flexibility**: Can be disabled for CI/CD with `headless: true`
|
|
133
|
+
5. **No Code Changes**: Existing SDK code continues to work (default behavior adds browser)
|
|
134
|
+
|
|
135
|
+
## Compatibility
|
|
136
|
+
|
|
137
|
+
- Works on macOS, Linux, and Windows
|
|
138
|
+
- Requires the `open` npm package (already a dependency)
|
|
139
|
+
- Debugger server starts automatically when needed
|
|
140
|
+
- Falls back gracefully if browser can't be opened (prints URL)
|
|
141
|
+
|
|
142
|
+
## Testing
|
|
143
|
+
|
|
144
|
+
Run the test to verify functionality:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
TD_API_KEY=your_key npx vitest run testdriver/acceptance-sdk/sandbox-render.test.mjs
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Or try the examples:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# With browser rendering
|
|
154
|
+
TD_API_KEY=your_key node examples/sdk-with-browser.js
|
|
155
|
+
|
|
156
|
+
# Headless mode
|
|
157
|
+
TD_API_KEY=your_key node examples/sdk-headless.js
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Future Enhancements
|
|
161
|
+
|
|
162
|
+
Potential improvements:
|
|
163
|
+
- Allow custom debugger port configuration
|
|
164
|
+
- Support for multiple concurrent sandbox windows
|
|
165
|
+
- Option to disable debugger server entirely
|
|
166
|
+
- Custom browser selection
|
|
167
|
+
- Headless mode detection based on environment
|