testdriverai 7.1.0 → 7.1.1
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/.env.example +2 -0
- package/.github/workflows/linux-tests.yml +28 -0
- package/agent/index.js +18 -45
- package/agent/interface.js +13 -2
- package/agent/lib/commands.js +1 -1
- package/agent/lib/redraw.js +1 -1
- package/agent/lib/sandbox.js +30 -2
- package/agent/lib/valid-version.js +2 -2
- package/debugger/index.html +1 -1
- package/docs/docs.json +86 -125
- package/docs/v6/getting-started/self-hosting.mdx +3 -2
- package/docs/v7/_drafts/agents.mdx +852 -0
- package/docs/v7/_drafts/auto-cache-key.mdx +167 -0
- package/docs/v7/{guides → _drafts}/caching-selectors.mdx +125 -17
- package/docs/v7/_drafts/dashcam-title-feature.mdx +89 -0
- package/docs/v7/_drafts/error-handling.mdx +501 -0
- package/docs/v7/_drafts/implementation-plan.mdx +994 -0
- package/docs/v7/_drafts/init-command.mdx +95 -0
- package/docs/v7/_drafts/optimal-sdk-design.mdx +1348 -0
- package/docs/v7/_drafts/plugin-migration.mdx +222 -0
- package/docs/v7/_drafts/prompt-cache.mdx +200 -0
- package/docs/{QUICK_START_TEST_RECORDING.md → v7/_drafts/quick-start-test-recording.mdx} +3 -3
- package/docs/v7/_drafts/sdk-logging.mdx +222 -0
- package/docs/v7/_drafts/sdk-migration.mdx +474 -0
- package/docs/v7/_drafts/sdk-v7-complete.mdx +345 -0
- package/docs/v7/{guides → _drafts}/self-hosting.mdx +1 -1
- package/docs/v7/{guides → _drafts}/troubleshooting.mdx +2 -2
- package/docs/v7/{guides → _drafts}/vitest-plugin.mdx +4 -4
- package/docs/v7/api/{ai.mdx → act.mdx} +24 -24
- package/docs/v7/api/client.mdx +1 -1
- package/docs/v7/api/dashcam.mdx +2 -2
- package/docs/v7/api/elements.mdx +143 -41
- package/docs/v7/api/find.mdx +258 -0
- package/docs/v7/api/type.mdx +51 -7
- package/docs/v7/features/ai-native.mdx +427 -0
- package/docs/v7/features/easy-to-write.mdx +351 -0
- package/docs/v7/features/enterprise.mdx +540 -0
- package/docs/v7/features/fast.mdx +424 -0
- package/docs/v7/features/observable.mdx +623 -0
- package/docs/v7/features/powerful.mdx +531 -0
- package/docs/v7/features/scalable.mdx +417 -0
- package/docs/v7/features/stable.mdx +514 -0
- package/docs/v7/getting-started/configuration.mdx +1 -1
- package/docs/v7/getting-started/generating-tests.mdx +525 -0
- package/docs/v7/getting-started/installation.mdx +486 -0
- package/docs/v7/getting-started/quickstart.mdx +51 -5
- package/docs/v7/getting-started/running-and-debugging.mdx +511 -0
- package/docs/v7/getting-started/setting-up-in-ci.mdx +612 -0
- package/docs/v7/getting-started/writing-tests.mdx +535 -0
- package/docs/v7/overview/what-is-testdriver.mdx +398 -0
- package/docs/v7/playwright.mdx +3 -3
- package/docs/v7/presets/chrome.mdx +16 -0
- package/docs/v7/presets/electron.mdx +18 -0
- package/docs/v7/presets/vscode.mdx +19 -0
- 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/commands/init.js +358 -0
- package/interfaces/vitest-plugin.mjs +214 -10
- package/{src → lib}/core/Dashcam.js +41 -4
- package/{src → lib}/vitest/hooks.mjs +118 -100
- package/lib/vitest/setup.mjs +44 -0
- package/package.json +9 -10
- package/sdk.d.ts +15 -2
- package/sdk.js +70 -18
- package/{self-hosted.yml → setup/aws/self-hosted.yml} +1 -1
- package/{testdriver/acceptance-sdk → test/manual}/test-console-logs.test.mjs +1 -1
- package/test/manual/test-find-api.js +73 -0
- package/test/manual/test-init.sh +54 -0
- package/test/manual/test-prompt-cache.js +96 -0
- package/test/manual/test-provision-auth.mjs +22 -0
- package/test/manual/test-sandbox-render.js +28 -0
- package/test/manual/test-sdk-methods.js +15 -0
- package/test/manual/test-sdk-refactor.js +53 -0
- package/test/manual/test-stack-trace.mjs +57 -0
- package/test/testdriver/assert.test.mjs +41 -0
- package/{testdriver/acceptance-sdk → test/testdriver}/auto-cache-key-demo.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/drag-and-drop.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/element-not-found.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/exec-js.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/exec-output.test.mjs +3 -3
- package/{testdriver/acceptance-sdk → test/testdriver}/exec-pwsh.test.mjs +3 -3
- package/{testdriver/acceptance-sdk → test/testdriver}/focus-window.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/formatted-logging.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/hover-image.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/hover-text-with-description.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/hover-text.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/match-image.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/press-keys.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/prompt.test.mjs +2 -2
- package/{testdriver/acceptance-sdk → test/testdriver}/scroll-keyboard.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/scroll-until-image.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/scroll-until-text.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/scroll.test.mjs +1 -1
- package/{src/vitest/lifecycle.mjs → test/testdriver/setup/lifecycleHelpers.mjs} +84 -99
- package/test/testdriver/setup/testHelpers.mjs +653 -0
- package/{testdriver/acceptance-sdk → test/testdriver}/type.test.mjs +1 -1
- package/vitest.config.mjs +11 -57
- package/.github/dependabot.yml +0 -11
- package/.github/workflows/acceptance-linux.yml +0 -75
- package/.github/workflows/acceptance-sdk-tests.yml +0 -133
- package/.github/workflows/acceptance-tests.yml +0 -130
- package/.github/workflows/lint.yml +0 -27
- package/.github/workflows/publish-canary.yml +0 -40
- package/.github/workflows/publish-latest.yml +0 -61
- package/.github/workflows/test-install.yml +0 -29
- package/.vscode/extensions.json +0 -3
- package/.vscode/launch.json +0 -22
- package/.vscode/settings.json +0 -14
- package/AGENTS.md +0 -550
- package/CODEOWNERS +0 -2
- package/_testdriver/acceptance/assert.yaml +0 -7
- package/_testdriver/acceptance/dashcam.yaml +0 -9
- package/_testdriver/acceptance/drag-and-drop.yaml +0 -49
- package/_testdriver/acceptance/embed.yaml +0 -9
- package/_testdriver/acceptance/exec-js.yaml +0 -29
- package/_testdriver/acceptance/exec-output.yaml +0 -43
- package/_testdriver/acceptance/exec-shell.yaml +0 -40
- package/_testdriver/acceptance/focus-window.yaml +0 -16
- package/_testdriver/acceptance/hover-image.yaml +0 -18
- package/_testdriver/acceptance/hover-text-with-description.yaml +0 -29
- package/_testdriver/acceptance/hover-text.yaml +0 -14
- package/_testdriver/acceptance/if-else.yaml +0 -31
- package/_testdriver/acceptance/match-image.yaml +0 -15
- package/_testdriver/acceptance/press-keys.yaml +0 -35
- package/_testdriver/acceptance/prompt.yaml +0 -11
- package/_testdriver/acceptance/remember.yaml +0 -27
- package/_testdriver/acceptance/screenshots/cart.png +0 -0
- package/_testdriver/acceptance/scroll-keyboard.yaml +0 -34
- package/_testdriver/acceptance/scroll-until-image.yaml +0 -26
- package/_testdriver/acceptance/scroll-until-text.yaml +0 -20
- package/_testdriver/acceptance/scroll.yaml +0 -33
- package/_testdriver/acceptance/snippets/login.yaml +0 -29
- package/_testdriver/acceptance/snippets/match-cart.yaml +0 -8
- package/_testdriver/acceptance/type.yaml +0 -29
- package/_testdriver/behavior/failure.yaml +0 -7
- package/_testdriver/behavior/hover-text.yaml +0 -13
- package/_testdriver/behavior/lifecycle/postrun.yaml +0 -10
- package/_testdriver/behavior/lifecycle/prerun.yaml +0 -8
- package/_testdriver/behavior/lifecycle/provision.yaml +0 -8
- package/_testdriver/behavior/secrets.yaml +0 -7
- package/_testdriver/edge-cases/dashcam-chrome.yaml +0 -8
- package/_testdriver/edge-cases/exec-pwsh-multiline.yaml +0 -10
- package/_testdriver/edge-cases/js-exception.yaml +0 -8
- package/_testdriver/edge-cases/js-promise.yaml +0 -19
- package/_testdriver/edge-cases/lifecycle/postrun.yaml +0 -10
- package/_testdriver/edge-cases/prompt-in-middle.yaml +0 -23
- package/_testdriver/edge-cases/prompt-nested.yaml +0 -7
- package/_testdriver/edge-cases/success-test.yaml +0 -9
- package/_testdriver/examples/android/example.yaml +0 -12
- package/_testdriver/examples/android/lifecycle/postrun.yaml +0 -11
- package/_testdriver/examples/android/lifecycle/provision.yaml +0 -47
- package/_testdriver/examples/android/readme.md +0 -7
- package/_testdriver/examples/chrome-extension/lifecycle/provision.yaml +0 -74
- package/_testdriver/examples/desktop/lifecycle/prerun.yaml +0 -0
- package/_testdriver/examples/desktop/lifecycle/provision.yaml +0 -64
- package/_testdriver/examples/vscode-extension/lifecycle/provision.yaml +0 -73
- package/_testdriver/examples/web/lifecycle/postrun.yaml +0 -7
- package/_testdriver/examples/web/lifecycle/prerun.yaml +0 -22
- package/_testdriver/lifecycle/postrun.yaml +0 -8
- package/_testdriver/lifecycle/prerun.yaml +0 -15
- package/_testdriver/lifecycle/provision.yaml +0 -25
- package/docs/v7/guides/ci-cd/azure.mdx +0 -587
- package/docs/v7/guides/ci-cd/circleci.mdx +0 -523
- package/docs/v7/guides/ci-cd/github-actions.mdx +0 -457
- package/docs/v7/guides/ci-cd/gitlab.mdx +0 -498
- package/docs/v7/guides/ci-cd/jenkins.mdx +0 -664
- package/docs/v7/guides/ci-cd/travis.mdx +0 -438
- package/scripts/view-test-results.mjs +0 -96
- package/src/vitest/extended.mjs +0 -108
- package/src/vitest/index.mjs +0 -64
- package/src/vitest/utils.mjs +0 -150
- package/styles/.vale-config/2-MDX.ini +0 -5
- package/styles/Microsoft/AMPM.yml +0 -9
- package/styles/Microsoft/Accessibility.yml +0 -30
- package/styles/Microsoft/Acronyms.yml +0 -64
- package/styles/Microsoft/Adverbs.yml +0 -272
- package/styles/Microsoft/Auto.yml +0 -11
- package/styles/Microsoft/Avoid.yml +0 -14
- package/styles/Microsoft/Contractions.yml +0 -50
- package/styles/Microsoft/Dashes.yml +0 -13
- package/styles/Microsoft/DateFormat.yml +0 -8
- package/styles/Microsoft/DateNumbers.yml +0 -40
- package/styles/Microsoft/DateOrder.yml +0 -8
- package/styles/Microsoft/Ellipses.yml +0 -9
- package/styles/Microsoft/FirstPerson.yml +0 -16
- package/styles/Microsoft/Foreign.yml +0 -13
- package/styles/Microsoft/Gender.yml +0 -8
- package/styles/Microsoft/GenderBias.yml +0 -42
- package/styles/Microsoft/GeneralURL.yml +0 -11
- package/styles/Microsoft/HeadingAcronyms.yml +0 -7
- package/styles/Microsoft/HeadingColons.yml +0 -8
- package/styles/Microsoft/HeadingPunctuation.yml +0 -13
- package/styles/Microsoft/Headings.yml +0 -28
- package/styles/Microsoft/Hyphens.yml +0 -14
- package/styles/Microsoft/Negative.yml +0 -13
- package/styles/Microsoft/Ordinal.yml +0 -13
- package/styles/Microsoft/OxfordComma.yml +0 -8
- package/styles/Microsoft/Passive.yml +0 -183
- package/styles/Microsoft/Percentages.yml +0 -7
- package/styles/Microsoft/Plurals.yml +0 -7
- package/styles/Microsoft/Quotes.yml +0 -7
- package/styles/Microsoft/RangeTime.yml +0 -13
- package/styles/Microsoft/Semicolon.yml +0 -8
- package/styles/Microsoft/SentenceLength.yml +0 -6
- package/styles/Microsoft/Spacing.yml +0 -8
- package/styles/Microsoft/Suspended.yml +0 -7
- package/styles/Microsoft/Terms.yml +0 -42
- package/styles/Microsoft/URLFormat.yml +0 -9
- package/styles/Microsoft/Units.yml +0 -16
- package/styles/Microsoft/Vocab.yml +0 -25
- package/styles/Microsoft/We.yml +0 -11
- package/styles/Microsoft/Wordiness.yml +0 -127
- package/styles/Microsoft/meta.json +0 -4
- package/styles/alex/Ablist.yml +0 -274
- package/styles/alex/Condescending.yml +0 -16
- package/styles/alex/Gendered.yml +0 -110
- package/styles/alex/LGBTQ.yml +0 -55
- package/styles/alex/OCD.yml +0 -10
- package/styles/alex/Press.yml +0 -12
- package/styles/alex/ProfanityLikely.yml +0 -1289
- package/styles/alex/ProfanityMaybe.yml +0 -282
- package/styles/alex/ProfanityUnlikely.yml +0 -251
- package/styles/alex/README.md +0 -27
- package/styles/alex/Race.yml +0 -85
- package/styles/alex/Suicide.yml +0 -26
- package/styles/alex/meta.json +0 -4
- package/styles/config/vocabularies/Docs/accept.txt +0 -47
- package/styles/config/vocabularies/Docs/reject.txt +0 -4
- package/styles/proselint/Airlinese.yml +0 -8
- package/styles/proselint/AnimalLabels.yml +0 -48
- package/styles/proselint/Annotations.yml +0 -9
- package/styles/proselint/Apologizing.yml +0 -8
- package/styles/proselint/Archaisms.yml +0 -52
- package/styles/proselint/But.yml +0 -8
- package/styles/proselint/Cliches.yml +0 -782
- package/styles/proselint/CorporateSpeak.yml +0 -30
- package/styles/proselint/Currency.yml +0 -5
- package/styles/proselint/Cursing.yml +0 -15
- package/styles/proselint/DateCase.yml +0 -7
- package/styles/proselint/DateMidnight.yml +0 -7
- package/styles/proselint/DateRedundancy.yml +0 -10
- package/styles/proselint/DateSpacing.yml +0 -7
- package/styles/proselint/DenizenLabels.yml +0 -52
- package/styles/proselint/Diacritical.yml +0 -95
- package/styles/proselint/GenderBias.yml +0 -45
- package/styles/proselint/GroupTerms.yml +0 -39
- package/styles/proselint/Hedging.yml +0 -8
- package/styles/proselint/Hyperbole.yml +0 -6
- package/styles/proselint/Jargon.yml +0 -11
- package/styles/proselint/LGBTOffensive.yml +0 -13
- package/styles/proselint/LGBTTerms.yml +0 -15
- package/styles/proselint/Malapropisms.yml +0 -8
- package/styles/proselint/Needless.yml +0 -358
- package/styles/proselint/Nonwords.yml +0 -38
- package/styles/proselint/Oxymorons.yml +0 -22
- package/styles/proselint/P-Value.yml +0 -6
- package/styles/proselint/RASSyndrome.yml +0 -30
- package/styles/proselint/README.md +0 -12
- package/styles/proselint/Skunked.yml +0 -13
- package/styles/proselint/Spelling.yml +0 -17
- package/styles/proselint/Typography.yml +0 -11
- package/styles/proselint/Uncomparables.yml +0 -50
- package/styles/proselint/Very.yml +0 -6
- package/styles/proselint/meta.json +0 -15
- package/styles/write-good/Cliches.yml +0 -702
- package/styles/write-good/E-Prime.yml +0 -32
- package/styles/write-good/Illusions.yml +0 -11
- package/styles/write-good/Passive.yml +0 -183
- package/styles/write-good/README.md +0 -27
- package/styles/write-good/So.yml +0 -5
- package/styles/write-good/ThereIs.yml +0 -6
- package/styles/write-good/TooWordy.yml +0 -221
- package/styles/write-good/Weasel.yml +0 -29
- package/styles/write-good/meta.json +0 -4
- package/test/dashcam.test.js +0 -137
- package/test/mcp-example-test.yaml +0 -27
- package/test/test_parser.js +0 -47
- package/testdriver/acceptance-sdk/QUICK_REFERENCE.md +0 -61
- package/testdriver/acceptance-sdk/README.md +0 -128
- package/testdriver/acceptance-sdk/TEST_REPORTING.md +0 -245
- package/testdriver/acceptance-sdk/assert.test.mjs +0 -26
- package/testdriver/acceptance-sdk/hooks-example.test.mjs +0 -38
- package/testdriver/acceptance-sdk/presets-example.test.mjs +0 -87
- package/testdriver/acceptance-sdk/setup/testHelpers.mjs +0 -420
- package/testdriver/acceptance-sdk/sully-ai.test.mjs +0 -234
- package/testdriver/acceptance-sdk/type-checking-demo.js +0 -49
- package/vale.ini +0 -18
- package/vitest.config.example.js +0 -19
- package/vitest.config.mjs.bak +0 -44
- /package/docs/{ARCHITECTURE.md → v7/_drafts/architecture.mdx} +0 -0
- /package/docs/{AWESOME_LOGS_QUICK_REF.md → v7/_drafts/awesome-logs-quick-ref.mdx} +0 -0
- /package/docs/v7/{guides → _drafts}/best-practices.mdx +0 -0
- /package/docs/v7/{guides → _drafts}/caching-ai.mdx +0 -0
- /package/docs/v7/{guides → _drafts}/caching.mdx +0 -0
- /package/docs/{MIGRATION.md → v7/_drafts/cli-to-sdk-migration.mdx} +0 -0
- /package/{CONTRIBUTING.md → docs/v7/_drafts/contributing.mdx} +0 -0
- /package/docs/v7/{progressive-apis/CORE.md → _drafts/core.mdx} +0 -0
- /package/docs/v7/{guides → _drafts}/debugging.mdx +0 -0
- /package/docs/v7/{guides → _drafts}/faq.mdx +0 -0
- /package/docs/v7/{progressive-apis/HOOKS.md → _drafts/hooks.mdx} +0 -0
- /package/docs/v7/{guides → _drafts}/migration.mdx +0 -0
- /package/docs/v7/{guides → _drafts}/performance.mdx +0 -0
- /package/docs/{PRESETS.md → v7/_drafts/presets.mdx} +0 -0
- /package/docs/v7/{progressive-apis/PROGRESSIVE_DISCLOSURE.md → _drafts/progressive-disclosure.mdx} +0 -0
- /package/docs/v7/{progressive-apis/PROVISION.md → _drafts/provision.mdx} +0 -0
- /package/docs/{SDK_AWESOME_LOGS.md → v7/_drafts/sdk-awesome-logs.mdx} +0 -0
- /package/docs/{sdk-browser-rendering.md → v7/_drafts/sdk-browser-rendering.mdx} +0 -0
- /package/docs/{TEST_RECORDING.md → v7/_drafts/test-recording.mdx} +0 -0
- /package/docs/v7/{guides → _drafts}/vitest.mdx +0 -0
- /package/docs/v7/{README.md → overview/readme.mdx} +0 -0
- /package/{src → lib}/core/index.d.ts +0 -0
- /package/{src → lib}/core/index.js +0 -0
- /package/{src → lib}/presets/index.mjs +0 -0
- /package/{src → lib}/vitest/hooks.d.ts +0 -0
- /package/{debug-locate-response.js → test/manual/debug-locate-response.js} +0 -0
- /package/{verify-element-api.js → test/manual/verify-element-api.js} +0 -0
- /package/{verify-types.js → test/manual/verify-types.js} +0 -0
- /package/{testdriver/acceptance-sdk → test/testdriver}/chrome-extension.test.mjs +0 -0
- /package/{testdriver/acceptance-sdk → test/testdriver}/setup/globalTeardown.mjs +0 -0
- /package/{testdriver/acceptance-sdk → test/testdriver}/setup/vitestSetup.mjs +0 -0
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
# SDK Test Reporting - Quick Reference
|
|
2
|
-
|
|
3
|
-
## 🚀 Commands
|
|
4
|
-
|
|
5
|
-
```bash
|
|
6
|
-
# Run all tests
|
|
7
|
-
npm run test:sdk
|
|
8
|
-
|
|
9
|
-
# View terminal summary
|
|
10
|
-
npm run test:sdk:results
|
|
11
|
-
|
|
12
|
-
# Open HTML report
|
|
13
|
-
npm run test:sdk:report
|
|
14
|
-
|
|
15
|
-
# Watch mode (dev)
|
|
16
|
-
npm run test:sdk:watch
|
|
17
|
-
|
|
18
|
-
# Interactive UI
|
|
19
|
-
npm run test:sdk:ui
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## 📊 What You Get
|
|
23
|
-
|
|
24
|
-
### Locally
|
|
25
|
-
|
|
26
|
-
1. **Console**: Verbose logs with full test output
|
|
27
|
-
2. **Terminal Summary**: `npm run test:sdk:results` - Quick pass/fail counts
|
|
28
|
-
3. **HTML Report**: `npm run test:sdk:report` - Interactive browser viewer
|
|
29
|
-
|
|
30
|
-
### GitHub Actions
|
|
31
|
-
|
|
32
|
-
1. **Step Summary**: Markdown tables in workflow summary page
|
|
33
|
-
2. **Test Summary Action**: Badge counts and annotations
|
|
34
|
-
3. **Artifacts**: Download junit.xml, results.json, and index.html
|
|
35
|
-
|
|
36
|
-
## 📁 Output Files
|
|
37
|
-
|
|
38
|
-
```
|
|
39
|
-
test-results/
|
|
40
|
-
├── junit.xml # For CI/CD tools
|
|
41
|
-
├── results.json # Machine-readable
|
|
42
|
-
└── index.html # Interactive report
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## ⚡ Quick Tips
|
|
46
|
-
|
|
47
|
-
- **Debugging failures?** → `npm run test:sdk:report` (HTML has best error context)
|
|
48
|
-
- **Quick status check?** → `npm run test:sdk:results` (terminal summary)
|
|
49
|
-
- **PR review?** → Check GitHub Actions summary tab
|
|
50
|
-
- **Need history?** → Download artifacts from GitHub Actions runs
|
|
51
|
-
|
|
52
|
-
## 🔍 GitHub Summary Preview
|
|
53
|
-
|
|
54
|
-
Every test run creates a summary with:
|
|
55
|
-
|
|
56
|
-
- ✅ Pass/fail counts table
|
|
57
|
-
- ❌ Failed test details with errors
|
|
58
|
-
- ✅ List of all passing tests
|
|
59
|
-
- ⏱️ Duration metrics
|
|
60
|
-
|
|
61
|
-
Find it: Actions → Your workflow run → Summary tab
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
# TestDriver SDK Acceptance Tests
|
|
2
|
-
|
|
3
|
-
This directory contains acceptance tests for the TestDriver SDK using Vitest.
|
|
4
|
-
|
|
5
|
-
## Running Tests
|
|
6
|
-
|
|
7
|
-
### Run All Tests (Cross-Platform)
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npm run test:sdk
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
### Run Platform-Specific Tests
|
|
14
|
-
|
|
15
|
-
Use the `TEST_PLATFORM` environment variable to run tests for a specific platform:
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
# Run Windows-only tests
|
|
19
|
-
npm run test:sdk:windows
|
|
20
|
-
|
|
21
|
-
# Run macOS-only tests
|
|
22
|
-
npm run test:sdk:mac
|
|
23
|
-
|
|
24
|
-
# Run Linux-only tests
|
|
25
|
-
npm run test:sdk:linux
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Or set the environment variable directly:
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
TEST_PLATFORM=windows npm run test:sdk
|
|
32
|
-
TEST_PLATFORM=mac npm run test:sdk
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## Test Organization
|
|
36
|
-
|
|
37
|
-
### Cross-Platform Tests
|
|
38
|
-
|
|
39
|
-
Tests without a platform suffix run on all platforms:
|
|
40
|
-
|
|
41
|
-
- `hover-text.test.mjs` - Runs everywhere
|
|
42
|
-
- `scroll.test.mjs` - Runs everywhere
|
|
43
|
-
- `screenshot.test.mjs` - Runs everywhere
|
|
44
|
-
|
|
45
|
-
### Platform-Specific Tests
|
|
46
|
-
|
|
47
|
-
Platform-specific tests use naming conventions:
|
|
48
|
-
|
|
49
|
-
- `*.windows.test.mjs` - Windows-only tests (e.g., `exec-pwsh.windows.test.mjs`)
|
|
50
|
-
- `*.mac.test.mjs` - macOS-only tests
|
|
51
|
-
- `*.linux.test.mjs` - Linux-only tests
|
|
52
|
-
|
|
53
|
-
### Conditional Test Skipping
|
|
54
|
-
|
|
55
|
-
Some tests use `skipIf` to conditionally skip based on the platform:
|
|
56
|
-
|
|
57
|
-
```javascript
|
|
58
|
-
it.skipIf(() => testdriver.os === "linux")(
|
|
59
|
-
"should run on Windows/Mac",
|
|
60
|
-
async () => {
|
|
61
|
-
// This test will be skipped on Linux
|
|
62
|
-
},
|
|
63
|
-
);
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
## Environment Variables
|
|
67
|
-
|
|
68
|
-
- `TEST_PLATFORM` - Filter tests by platform (`windows`, `mac`, `linux`)
|
|
69
|
-
- `TD_OS` - Override the sandbox OS (defaults to `linux`)
|
|
70
|
-
- `TD_API_KEY` - Your TestDriver API key (required)
|
|
71
|
-
- `TD_API_ROOT` - API endpoint (optional)
|
|
72
|
-
- `DEBUG_ENV` - Show environment variable loading (optional)
|
|
73
|
-
- `DEBUG_EVENTS` - Enable detailed event logging (optional)
|
|
74
|
-
|
|
75
|
-
## Examples
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
# Run only Windows tests on a Windows sandbox
|
|
79
|
-
TEST_PLATFORM=windows npm run test:sdk
|
|
80
|
-
|
|
81
|
-
# Run all tests but use a Windows sandbox
|
|
82
|
-
TD_OS=windows npm run test:sdk
|
|
83
|
-
|
|
84
|
-
# Run with debugging enabled
|
|
85
|
-
DEBUG_ENV=true DEBUG_EVENTS=true npm run test:sdk
|
|
86
|
-
|
|
87
|
-
# Watch mode for development
|
|
88
|
-
npm run test:sdk:watch
|
|
89
|
-
|
|
90
|
-
# Generate coverage report
|
|
91
|
-
npm run test:sdk:coverage
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## Test Structure
|
|
95
|
-
|
|
96
|
-
Each test follows this pattern:
|
|
97
|
-
|
|
98
|
-
```javascript
|
|
99
|
-
import { afterEach, beforeEach, describe, it } from "vitest";
|
|
100
|
-
import {
|
|
101
|
-
createTestClient,
|
|
102
|
-
setupTest,
|
|
103
|
-
teardownTest,
|
|
104
|
-
} from "./setup/testHelpers.mjs";
|
|
105
|
-
|
|
106
|
-
describe("My Test", () => {
|
|
107
|
-
let testdriver;
|
|
108
|
-
|
|
109
|
-
beforeEach(async () => {
|
|
110
|
-
testdriver = createTestClient();
|
|
111
|
-
await setupTest(testdriver);
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
afterEach(async () => {
|
|
115
|
-
await teardownTest(testdriver);
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
it("should do something", async () => {
|
|
119
|
-
// Your test logic
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
## See Also
|
|
125
|
-
|
|
126
|
-
- [SDK README](../../SDK_README.md) - Full SDK documentation
|
|
127
|
-
- [Quick Reference](./QUICK_REFERENCE.md) - SDK method quick reference
|
|
128
|
-
- [Test Reporting](./TEST_REPORTING.md) - Test recording and reporting docs
|
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
# TestDriver SDK Test Reporting
|
|
2
|
-
|
|
3
|
-
This guide explains the enhanced test reporting system for the TestDriver SDK acceptance tests.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
The SDK tests use **Vitest** with multiple reporters to provide comprehensive test feedback:
|
|
8
|
-
|
|
9
|
-
1. **Console Output** - Verbose, detailed logs during test execution
|
|
10
|
-
2. **JUnit XML** - For CI/CD integration and third-party tools
|
|
11
|
-
3. **JSON Results** - Machine-readable format for custom reporting
|
|
12
|
-
4. **HTML Report** - Interactive browser-based test results viewer
|
|
13
|
-
5. **GitHub Summary** - Markdown tables in GitHub Actions workflow summaries
|
|
14
|
-
|
|
15
|
-
## Running Tests Locally
|
|
16
|
-
|
|
17
|
-
### Basic Test Run
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
npm run test:sdk
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
This runs all SDK acceptance tests with verbose output.
|
|
24
|
-
|
|
25
|
-
### Watch Mode (for development)
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
npm run test:sdk:watch
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
Re-runs tests automatically when files change.
|
|
32
|
-
|
|
33
|
-
### Interactive UI
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
npm run test:sdk:ui
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
Opens Vitest's web UI for interactive test exploration.
|
|
40
|
-
|
|
41
|
-
### View Results After Running Tests
|
|
42
|
-
|
|
43
|
-
After running tests, you have several options to view results:
|
|
44
|
-
|
|
45
|
-
#### Terminal Summary
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
npm run test:sdk:results
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
Displays a formatted summary in your terminal with:
|
|
52
|
-
|
|
53
|
-
- ✅ Passed test count
|
|
54
|
-
- ❌ Failed test count and error details
|
|
55
|
-
- ⏱️ Test duration
|
|
56
|
-
- 📁 File-by-file breakdown
|
|
57
|
-
|
|
58
|
-
#### HTML Report (Best for detailed analysis)
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
npm run test:sdk:report
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
Opens the interactive HTML report in your browser showing:
|
|
65
|
-
|
|
66
|
-
- Detailed test execution timeline
|
|
67
|
-
- File-by-file results
|
|
68
|
-
- Error stack traces with code context
|
|
69
|
-
- Test duration metrics
|
|
70
|
-
|
|
71
|
-
Or manually open: `test-results/index.html`
|
|
72
|
-
|
|
73
|
-
## GitHub Actions Reporting
|
|
74
|
-
|
|
75
|
-
When tests run in GitHub Actions, you get enhanced reporting automatically:
|
|
76
|
-
|
|
77
|
-
### 📊 GitHub Step Summary
|
|
78
|
-
|
|
79
|
-
The workflow generates a comprehensive summary visible in the Actions run:
|
|
80
|
-
|
|
81
|
-
- **Overview Table**: Pass/fail counts, duration, and totals
|
|
82
|
-
- **Failed Tests Section**: Each failure with error messages and stack traces
|
|
83
|
-
- **Passed Tests Section**: List of all passing tests organized by file
|
|
84
|
-
|
|
85
|
-
To view: Go to the Actions tab → Select your workflow run → Check the "Summary" section
|
|
86
|
-
|
|
87
|
-
### 🧪 Test Summary Action
|
|
88
|
-
|
|
89
|
-
The `test-summary/action` provides:
|
|
90
|
-
|
|
91
|
-
- Test count badges
|
|
92
|
-
- Duration metrics
|
|
93
|
-
- Failure annotations in the Files Changed tab
|
|
94
|
-
|
|
95
|
-
### 📦 Test Artifacts
|
|
96
|
-
|
|
97
|
-
All test results are uploaded as artifacts (retained for 7 days):
|
|
98
|
-
|
|
99
|
-
- `junit.xml` - JUnit format for third-party tools
|
|
100
|
-
- `results.json` - Machine-readable JSON
|
|
101
|
-
- `index.html` - Interactive HTML report (download and open locally)
|
|
102
|
-
|
|
103
|
-
To download artifacts:
|
|
104
|
-
|
|
105
|
-
1. Go to the workflow run
|
|
106
|
-
2. Scroll to "Artifacts" section at the bottom
|
|
107
|
-
3. Download `test-results.zip`
|
|
108
|
-
|
|
109
|
-
## Test Output Files
|
|
110
|
-
|
|
111
|
-
All test results are saved to the `test-results/` directory:
|
|
112
|
-
|
|
113
|
-
```
|
|
114
|
-
test-results/
|
|
115
|
-
├── junit.xml # JUnit XML format
|
|
116
|
-
├── results.json # Detailed JSON results
|
|
117
|
-
└── index.html # Interactive HTML report
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
Add this to your `.gitignore`:
|
|
121
|
-
|
|
122
|
-
```
|
|
123
|
-
test-results/
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
## Reporters Explained
|
|
127
|
-
|
|
128
|
-
### 1. Verbose Reporter (Console)
|
|
129
|
-
|
|
130
|
-
- Shows full test logs in real-time
|
|
131
|
-
- Includes console.log output from tests
|
|
132
|
-
- Color-coded pass/fail indicators
|
|
133
|
-
- Stack traces for failures
|
|
134
|
-
|
|
135
|
-
### 2. JUnit Reporter
|
|
136
|
-
|
|
137
|
-
- Industry-standard XML format
|
|
138
|
-
- Compatible with Jenkins, Azure DevOps, etc.
|
|
139
|
-
- Used by `test-summary/action`
|
|
140
|
-
|
|
141
|
-
### 3. JSON Reporter
|
|
142
|
-
|
|
143
|
-
- Complete test results in JSON format
|
|
144
|
-
- Programmatically parseable
|
|
145
|
-
- Used by the custom results viewer script
|
|
146
|
-
|
|
147
|
-
### 4. HTML Reporter
|
|
148
|
-
|
|
149
|
-
- Interactive web-based viewer
|
|
150
|
-
- Visual timeline of test execution
|
|
151
|
-
- Filterable and searchable results
|
|
152
|
-
- Best for debugging failures locally
|
|
153
|
-
|
|
154
|
-
## Customizing Test Output
|
|
155
|
-
|
|
156
|
-
### Run a Single Test File
|
|
157
|
-
|
|
158
|
-
```bash
|
|
159
|
-
npx vitest run testdriver/acceptance-sdk/assert.test.mjs
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
### Enable Even More Verbose Logging
|
|
163
|
-
|
|
164
|
-
```bash
|
|
165
|
-
VERBOSE=true LOGGING=true npm run test:sdk
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
### Change Parallelism
|
|
169
|
-
|
|
170
|
-
Edit `vitest.config.mjs`:
|
|
171
|
-
|
|
172
|
-
```javascript
|
|
173
|
-
maxForks: 5, // Run 5 tests in parallel instead of 10
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
## Troubleshooting
|
|
177
|
-
|
|
178
|
-
### "No test results found" error
|
|
179
|
-
|
|
180
|
-
Make sure you've run the tests first:
|
|
181
|
-
|
|
182
|
-
```bash
|
|
183
|
-
npm run test:sdk
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
### HTML report won't open
|
|
187
|
-
|
|
188
|
-
Manually navigate to and open `test-results/index.html` in your browser.
|
|
189
|
-
|
|
190
|
-
### Tests timeout
|
|
191
|
-
|
|
192
|
-
Increase timeout in `vitest.config.mjs`:
|
|
193
|
-
|
|
194
|
-
```javascript
|
|
195
|
-
testTimeout: 900000, // 15 minutes
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
## Best Practices
|
|
199
|
-
|
|
200
|
-
1. **Use `test:sdk:results`** for quick terminal summaries
|
|
201
|
-
2. **Use `test:sdk:report`** for deep debugging of failures
|
|
202
|
-
3. **Check GitHub Summary** in PR reviews for test status
|
|
203
|
-
4. **Download artifacts** from GitHub Actions for historical analysis
|
|
204
|
-
5. **Run `test:sdk:watch`** during development for fast feedback
|
|
205
|
-
|
|
206
|
-
## Example GitHub Summary Output
|
|
207
|
-
|
|
208
|
-
```markdown
|
|
209
|
-
# 🧪 TestDriver SDK Test Results
|
|
210
|
-
|
|
211
|
-
## 📊 Overview
|
|
212
|
-
|
|
213
|
-
| Metric | Count |
|
|
214
|
-
| ----------- | ------- |
|
|
215
|
-
| ✅ Passed | 18 |
|
|
216
|
-
| ❌ Failed | 2 |
|
|
217
|
-
| ⏭️ Skipped | 0 |
|
|
218
|
-
| 📝 Total | 20 |
|
|
219
|
-
| ⏱️ Duration | 145.23s |
|
|
220
|
-
|
|
221
|
-
## ❌ Failed Tests
|
|
222
|
-
|
|
223
|
-
### Assert Test > should assert the testdriver login page shows
|
|
224
|
-
|
|
225
|
-
**File:** `testdriver/acceptance-sdk/assert.test.mjs`
|
|
226
|
-
|
|
227
|
-
**Error:**
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
AssertionError: expected false to be truthy
|
|
231
|
-
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
## ✅ Passed Tests
|
|
235
|
-
|
|
236
|
-
### type.test.mjs
|
|
237
|
-
- ✅ should type text into input field
|
|
238
|
-
- ✅ should clear and retype text
|
|
239
|
-
|
|
240
|
-
### scroll.test.mjs
|
|
241
|
-
- ✅ should scroll down the page
|
|
242
|
-
- ✅ should scroll to specific element
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
This summary appears automatically in every GitHub Actions workflow run!
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TestDriver SDK - Assert Test (Vitest)
|
|
3
|
-
* Converted from: testdriver/acceptance/assert.yaml
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { describe, expect, it } from "vitest";
|
|
7
|
-
import { TestDriver } from "../../src/vitest/hooks.mjs";
|
|
8
|
-
|
|
9
|
-
describe("Assert Test", () => {
|
|
10
|
-
it("should assert the testdriver login page shows", async (context) => {
|
|
11
|
-
const testdriver = TestDriver(context, { headless: true, newSandbox: true });
|
|
12
|
-
|
|
13
|
-
// provision.chrome() automatically calls ready() and starts dashcam
|
|
14
|
-
await testdriver.provision.chrome({
|
|
15
|
-
url: 'http://testdriver-sandbox.vercel.app/login',
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
// Assert the TestDriver.ai Sandbox login page is displayed
|
|
19
|
-
const result = await testdriver.assert(
|
|
20
|
-
"the TestDriver.ai Sandbox login page is displayed",
|
|
21
|
-
);
|
|
22
|
-
|
|
23
|
-
expect(result).toBeTruthy();
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TestDriver Hooks API Demo
|
|
3
|
-
* Demonstrates the new React-style hooks for Vitest
|
|
4
|
-
*
|
|
5
|
-
* This is the SIMPLEST way to use TestDriver with Vitest!
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { describe, expect, it } from "vitest";
|
|
9
|
-
import { TestDriver } from "../../src/vitest/hooks.mjs";
|
|
10
|
-
|
|
11
|
-
describe("Hooks API Demo", () => {
|
|
12
|
-
it("should use hooks for automatic lifecycle management", async (context) => {
|
|
13
|
-
// ✨ One line gets you TestDriver + Dashcam with full auto-lifecycle!
|
|
14
|
-
const testdriver = TestDriver(context, { headless: true });
|
|
15
|
-
await testdriver.provision.chrome({ url: 'http://testdriver-sandbox.vercel.app/login' });
|
|
16
|
-
|
|
17
|
-
// Everything is automatic:
|
|
18
|
-
// - Sandbox connection ✅
|
|
19
|
-
// - Dashcam recording ✅
|
|
20
|
-
// - Chrome launch ✅
|
|
21
|
-
// - Recording stop ✅
|
|
22
|
-
// - Cleanup ✅
|
|
23
|
-
|
|
24
|
-
await testdriver.focusApplication("Google Chrome");
|
|
25
|
-
|
|
26
|
-
const signInButton = await testdriver.find(
|
|
27
|
-
"Sign In, black button below the password field",
|
|
28
|
-
);
|
|
29
|
-
await signInButton.click();
|
|
30
|
-
|
|
31
|
-
const result = await testdriver.assert(
|
|
32
|
-
"an error shows that fields are required",
|
|
33
|
-
);
|
|
34
|
-
expect(result).toBeTruthy();
|
|
35
|
-
|
|
36
|
-
// That's it! Dashcam URL automatically registered with the test run
|
|
37
|
-
});
|
|
38
|
-
});
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Examples demonstrating TestDriver Presets
|
|
3
|
-
*
|
|
4
|
-
* Presets provide pre-configured setups for common applications,
|
|
5
|
-
* reducing boilerplate and making tests easier to write.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { test } from 'vitest';
|
|
9
|
-
import { chromePreset, createPreset, electronPreset, vscodePreset } from '../../src/presets/index.mjs';
|
|
10
|
-
|
|
11
|
-
test('Chrome preset - simple navigation', async (context) => {
|
|
12
|
-
const { browser } = await chromePreset(context, {
|
|
13
|
-
url: 'http://testdriver-sandbox.vercel.app/',
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
// Browser is already open and focused on the URL
|
|
17
|
-
const result = await browser.find('main heading text');
|
|
18
|
-
console.log('Found heading:', result);
|
|
19
|
-
}, 60000);
|
|
20
|
-
|
|
21
|
-
test('Chrome preset - with custom options', async (context) => {
|
|
22
|
-
const { browser, dashcam } = await chromePreset(context, {
|
|
23
|
-
url: 'https://google.com',
|
|
24
|
-
maximized: false,
|
|
25
|
-
guest: false,
|
|
26
|
-
dashcam: true, // Dashcam auto-starts and auto-stops
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
await browser.find('search box').type('testdriverai');
|
|
30
|
-
console.log('Dashcam recording:', dashcam.isRecording());
|
|
31
|
-
}, 60000);
|
|
32
|
-
|
|
33
|
-
test.skip('VS Code preset - basic usage', async (context) => {
|
|
34
|
-
const { vscode } = await vscodePreset(context, {
|
|
35
|
-
workspace: '/tmp/test-project',
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
// VS Code is already open with the workspace loaded
|
|
39
|
-
await vscode.find('File menu').click();
|
|
40
|
-
await vscode.find('New File').click();
|
|
41
|
-
}, 60000);
|
|
42
|
-
|
|
43
|
-
test.skip('VS Code preset - with extensions', async (context) => {
|
|
44
|
-
const { vscode } = await vscodePreset(context, {
|
|
45
|
-
workspace: '/tmp/test-project',
|
|
46
|
-
extensions: ['ms-python.python'],
|
|
47
|
-
dashcam: true,
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
// Extensions are pre-installed, dashcam auto-recording
|
|
51
|
-
await vscode.find('Python extension').click();
|
|
52
|
-
}, 120000);
|
|
53
|
-
|
|
54
|
-
test.skip('Custom preset - Electron app', async (context) => {
|
|
55
|
-
const { app } = await electronPreset(context, {
|
|
56
|
-
appPath: '/path/to/electron/app',
|
|
57
|
-
args: ['--enable-logging'],
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
await app.find('main window').click();
|
|
61
|
-
}, 60000);
|
|
62
|
-
|
|
63
|
-
test.skip('Custom preset - create your own', async (context) => {
|
|
64
|
-
// Create a custom preset for your application
|
|
65
|
-
const firefoxPreset = createPreset({
|
|
66
|
-
name: 'Firefox Browser',
|
|
67
|
-
defaults: { os: 'linux', dashcam: true },
|
|
68
|
-
async setup(context, client, dashcam, options) {
|
|
69
|
-
const { url } = options;
|
|
70
|
-
|
|
71
|
-
// Launch Firefox
|
|
72
|
-
await client.exec('sh', `firefox "${url}" >/dev/null 2>&1 &`, 30000);
|
|
73
|
-
await client.focusApplication('Firefox');
|
|
74
|
-
|
|
75
|
-
return {
|
|
76
|
-
browser: client,
|
|
77
|
-
};
|
|
78
|
-
},
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
// Use your custom preset
|
|
82
|
-
const { browser } = await firefoxPreset(context, {
|
|
83
|
-
url: 'https://example.com',
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
await browser.find('page content').click();
|
|
87
|
-
}, 60000);
|