appium-mcp 1.8.11 → 1.8.13
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/CHANGELOG.md +12 -0
- package/dist/command.d.ts +107 -0
- package/dist/command.d.ts.map +1 -0
- package/dist/command.js +214 -0
- package/dist/command.js.map +1 -0
- package/dist/session-store.d.ts +30 -3
- package/dist/session-store.d.ts.map +1 -1
- package/dist/session-store.js +29 -0
- package/dist/session-store.js.map +1 -1
- package/dist/tools/app-management/activate-app.d.ts.map +1 -1
- package/dist/tools/app-management/activate-app.js +2 -1
- package/dist/tools/app-management/activate-app.js.map +1 -1
- package/dist/tools/app-management/install-app.d.ts.map +1 -1
- package/dist/tools/app-management/install-app.js +4 -7
- package/dist/tools/app-management/install-app.js.map +1 -1
- package/dist/tools/app-management/terminate-app.d.ts.map +1 -1
- package/dist/tools/app-management/terminate-app.js +4 -7
- package/dist/tools/app-management/terminate-app.js.map +1 -1
- package/dist/tools/app-management/uninstall-app.d.ts.map +1 -1
- package/dist/tools/app-management/uninstall-app.js +4 -7
- package/dist/tools/app-management/uninstall-app.js.map +1 -1
- package/dist/tools/context/get-contexts.d.ts.map +1 -1
- package/dist/tools/context/get-contexts.js +4 -3
- package/dist/tools/context/get-contexts.js.map +1 -1
- package/dist/tools/context/switch-context.d.ts.map +1 -1
- package/dist/tools/context/switch-context.js +6 -5
- package/dist/tools/context/switch-context.js.map +1 -1
- package/dist/tools/interactions/click.d.ts.map +1 -1
- package/dist/tools/interactions/click.js +3 -4
- package/dist/tools/interactions/click.js.map +1 -1
- package/dist/tools/interactions/double-tap.d.ts.map +1 -1
- package/dist/tools/interactions/double-tap.js +13 -16
- package/dist/tools/interactions/double-tap.js.map +1 -1
- package/dist/tools/interactions/drag-and-drop.d.ts.map +1 -1
- package/dist/tools/interactions/drag-and-drop.js +4 -3
- package/dist/tools/interactions/drag-and-drop.js.map +1 -1
- package/dist/tools/interactions/find.d.ts +2 -2
- package/dist/tools/interactions/find.d.ts.map +1 -1
- package/dist/tools/interactions/find.js +1 -1
- package/dist/tools/interactions/find.js.map +1 -1
- package/dist/tools/interactions/get-page-source.d.ts.map +1 -1
- package/dist/tools/interactions/get-page-source.js +2 -1
- package/dist/tools/interactions/get-page-source.js.map +1 -1
- package/dist/tools/interactions/get-text.d.ts.map +1 -1
- package/dist/tools/interactions/get-text.js +3 -4
- package/dist/tools/interactions/get-text.js.map +1 -1
- package/dist/tools/interactions/long-press.d.ts.map +1 -1
- package/dist/tools/interactions/long-press.js +16 -20
- package/dist/tools/interactions/long-press.js.map +1 -1
- package/dist/tools/interactions/screenshot.d.ts +2 -4
- package/dist/tools/interactions/screenshot.d.ts.map +1 -1
- package/dist/tools/interactions/screenshot.js +3 -4
- package/dist/tools/interactions/screenshot.js.map +1 -1
- package/dist/tools/interactions/set-value.d.ts.map +1 -1
- package/dist/tools/interactions/set-value.js +3 -4
- package/dist/tools/interactions/set-value.js.map +1 -1
- package/dist/tools/navigations/scroll-to-element.js.map +1 -1
- package/dist/tools/navigations/scroll.d.ts.map +1 -1
- package/dist/tools/navigations/scroll.js +16 -23
- package/dist/tools/navigations/scroll.js.map +1 -1
- package/dist/tools/navigations/swipe.d.ts.map +1 -1
- package/dist/tools/navigations/swipe.js +13 -17
- package/dist/tools/navigations/swipe.js.map +1 -1
- package/dist/tools/test-generation/locators.d.ts.map +1 -1
- package/dist/tools/test-generation/locators.js +14 -6
- package/dist/tools/test-generation/locators.js.map +1 -1
- package/package.json +12 -3
- package/server.json +2 -2
- package/.github/dependabot.yml +0 -17
- package/.github/workflows/ci.yml +0 -44
- package/.github/workflows/pr-title.yml +0 -10
- package/.github/workflows/publish.yml +0 -66
- package/.gitmodules +0 -9
- package/.prettierignore +0 -29
- package/.prettierrc +0 -9
- package/.releaserc +0 -37
- package/docs/CONTRIBUTING.md +0 -424
- package/eslint.config.js +0 -23
- package/examples/android-gmail.md +0 -7
- package/examples/android-todo-app.md +0 -9
- package/jest.config.js +0 -23
- package/src/devicemanager/adb-manager.ts +0 -164
- package/src/devicemanager/ios-manager.ts +0 -145
- package/src/index.ts +0 -45
- package/src/locators/element-filter.ts +0 -136
- package/src/locators/generate-all-locators.ts +0 -150
- package/src/locators/locator-generation.ts +0 -657
- package/src/locators/source-parsing.ts +0 -149
- package/src/logger.ts +0 -11
- package/src/resources/caps.json +0 -697
- package/src/resources/index.ts +0 -8
- package/src/resources/java/template.ts +0 -83
- package/src/resources/submodules/appium/.github/PULL_REQUEST_TEMPLATE.md +0 -28
- package/src/resources/submodules/appium/CHANGELOG.md +0 -45
- package/src/resources/submodules/appium/CONDUCT.md +0 -48
- package/src/resources/submodules/appium/GOVERNANCE.md +0 -185
- package/src/resources/submodules/appium/IDEAS.md +0 -16
- package/src/resources/submodules/appium/README.md +0 -221
- package/src/resources/submodules/appium/ROADMAP.md +0 -30
- package/src/resources/submodules/appium/SPONSORS.md +0 -3
- package/src/resources/submodules/appium/docs/README.md +0 -6
- package/src/resources/submodules/appium/docs/payout.md +0 -35
- package/src/resources/submodules/appium/packages/appium/CHANGELOG.md +0 -1437
- package/src/resources/submodules/appium/packages/appium/README.md +0 -221
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/index.md +0 -2
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-appiumconf2024.md +0 -45
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-browserstack-as-strategic-partner.md +0 -46
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-headspin-as-development-partner.md +0 -47
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-lambdatest-as-strategic-partner.md +0 -42
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-sauce-labs-as-strategic-partner.md +0 -36
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-sponsorship-program.md +0 -48
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/appium3.md +0 -40
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/hello-world.md +0 -15
- package/src/resources/submodules/appium/packages/appium/docs/en/contributing/index.md +0 -150
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-docs.md +0 -86
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-doctor-checks.md +0 -141
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-drivers.md +0 -860
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-plugins.md +0 -514
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/config-system.md +0 -451
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/index.md +0 -18
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/sensitive.md +0 -49
- package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/clients.md +0 -132
- package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/drivers.md +0 -207
- package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/index.md +0 -45
- package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/plugins.md +0 -138
- package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/tools.md +0 -83
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/branch-testing.md +0 -57
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/caching.md +0 -76
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/caps.md +0 -275
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/config.md +0 -98
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/context.md +0 -44
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/event-timing.md +0 -73
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/execute-methods.md +0 -122
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/grid.md +0 -166
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/headers.md +0 -17
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/log-filters.md +0 -86
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/managing-exts.md +0 -87
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/migrating-1-to-2.md +0 -368
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/migrating-2-to-3.md +0 -464
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/security.md +0 -89
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/settings.md +0 -68
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/tls.md +0 -42
- package/src/resources/submodules/appium/packages/appium/docs/en/index.md +0 -59
- package/src/resources/submodules/appium/packages/appium/docs/en/intro/appium.md +0 -202
- package/src/resources/submodules/appium/packages/appium/docs/en/intro/clients.md +0 -127
- package/src/resources/submodules/appium/packages/appium/docs/en/intro/drivers.md +0 -188
- package/src/resources/submodules/appium/packages/appium/docs/en/intro/history.md +0 -196
- package/src/resources/submodules/appium/packages/appium/docs/en/intro/index.md +0 -39
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/index.md +0 -29
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/install.md +0 -50
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/next-steps.md +0 -23
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/requirements.md +0 -29
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-dotnet.md +0 -105
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-java.md +0 -23
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-js.md +0 -75
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-py.md +0 -60
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-rb.md +0 -83
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/uiauto2-driver.md +0 -144
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/appium.md +0 -394
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/bidi.md +0 -70
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/index.md +0 -30
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/jsonwp.md +0 -214
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/mjsonwp.md +0 -151
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/others.md +0 -671
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/plugins.md +0 -289
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/webdriver.md +0 -1114
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/env-vars.md +0 -31
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/extensions.md +0 -239
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/index.md +0 -35
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/server.md +0 -76
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/setup.md +0 -76
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/index.md +0 -25
- package/src/resources/submodules/appium/packages/appium/docs/en/resources/index.md +0 -28
- package/src/resources/submodules/appium/packages/appium/docs/en/sponsors/index.md +0 -64
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/index.md +0 -2
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-appiumconf2024.md +0 -45
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-browserstack-as-strategic-partner.md +0 -46
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-headspin-as-development-partner.md +0 -47
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-lambdatest-as-strategic-partner.md +0 -41
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-sauce-labs-as-strategic-partner.md +0 -36
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-sponsorship-program.md +0 -48
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/appium3.md +0 -40
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/hello-world.md +0 -15
- package/src/resources/submodules/appium/packages/appium/docs/ja/contributing/index.md +0 -158
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-docs.md +0 -86
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-doctor-checks.md +0 -141
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-drivers.md +0 -866
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-plugins.md +0 -520
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/config-system.md +0 -468
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/index.md +0 -18
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/sensitive.md +0 -49
- package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/clients.md +0 -143
- package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/drivers.md +0 -219
- package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/index.md +0 -45
- package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/plugins.md +0 -140
- package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/tools.md +0 -87
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/branch-testing.md +0 -57
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/caching.md +0 -78
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/caps.md +0 -259
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/config.md +0 -102
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/context.md +0 -44
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/event-timing.md +0 -75
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/execute-methods.md +0 -142
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/grid.md +0 -166
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/headers.md +0 -17
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/log-filters.md +0 -86
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/managing-exts.md +0 -89
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/migrating-1-to-2.md +0 -402
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/migrating-2-to-3.md +0 -458
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/security.md +0 -89
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/settings.md +0 -70
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/tls.md +0 -43
- package/src/resources/submodules/appium/packages/appium/docs/ja/index.md +0 -55
- package/src/resources/submodules/appium/packages/appium/docs/ja/intro/appium.md +0 -191
- package/src/resources/submodules/appium/packages/appium/docs/ja/intro/clients.md +0 -139
- package/src/resources/submodules/appium/packages/appium/docs/ja/intro/drivers.md +0 -188
- package/src/resources/submodules/appium/packages/appium/docs/ja/intro/history.md +0 -196
- package/src/resources/submodules/appium/packages/appium/docs/ja/intro/index.md +0 -39
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/index.md +0 -23
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/install.md +0 -47
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/next-steps.md +0 -19
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/requirements.md +0 -29
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-dotnet.md +0 -107
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-java.md +0 -23
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-js.md +0 -77
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-py.md +0 -63
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-rb.md +0 -85
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/uiauto2-driver.md +0 -148
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/appium.md +0 -395
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/bidi.md +0 -71
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/index.md +0 -30
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/jsonwp.md +0 -215
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/mjsonwp.md +0 -152
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/others.md +0 -672
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/plugins.md +0 -291
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/webdriver.md +0 -1114
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/env-vars.md +0 -31
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/extensions.md +0 -240
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/index.md +0 -35
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/server.md +0 -76
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/setup.md +0 -78
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/index.md +0 -25
- package/src/resources/submodules/appium/packages/appium/docs/ja/resources/index.md +0 -28
- package/src/resources/submodules/appium/packages/appium/docs/ja/sponsors/index.md +0 -61
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-horiz-white.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-horiz.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-white.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-dark.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-light.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-dark.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-light.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-sauce.png +0 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/index.md +0 -2
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-appiumconf2024.md +0 -45
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-browserstack-as-strategic-partner.md +0 -46
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-headspin-as-development-partner.md +0 -47
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-lambdatest-as-strategic-partner.md +0 -41
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-sauce-labs-as-strategic-partner.md +0 -36
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-sponsorship-program.md +0 -48
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/appium3.md +0 -40
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/hello-world.md +0 -15
- package/src/resources/submodules/appium/packages/appium/docs/zh/contributing/index.md +0 -132
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-docs.md +0 -86
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-doctor-checks.md +0 -141
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-drivers.md +0 -866
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-plugins.md +0 -520
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/config-system.md +0 -468
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/index.md +0 -18
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/sensitive.md +0 -49
- package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/clients.md +0 -143
- package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/drivers.md +0 -219
- package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/index.md +0 -45
- package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/plugins.md +0 -140
- package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/tools.md +0 -87
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/branch-testing.md +0 -57
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/caching.md +0 -78
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/caps.md +0 -284
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/config.md +0 -102
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/context.md +0 -44
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/event-timing.md +0 -75
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/execute-methods.md +0 -142
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/grid.md +0 -166
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/headers.md +0 -17
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/log-filters.md +0 -86
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/managing-exts.md +0 -89
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/migrating-1-to-2.md +0 -410
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/migrating-2-to-3.md +0 -459
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/security.md +0 -89
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/settings.md +0 -70
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/tls.md +0 -43
- package/src/resources/submodules/appium/packages/appium/docs/zh/index.md +0 -54
- package/src/resources/submodules/appium/packages/appium/docs/zh/intro/appium.md +0 -200
- package/src/resources/submodules/appium/packages/appium/docs/zh/intro/clients.md +0 -139
- package/src/resources/submodules/appium/packages/appium/docs/zh/intro/drivers.md +0 -188
- package/src/resources/submodules/appium/packages/appium/docs/zh/intro/history.md +0 -196
- package/src/resources/submodules/appium/packages/appium/docs/zh/intro/index.md +0 -39
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/index.md +0 -23
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/install.md +0 -47
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/next-steps.md +0 -19
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/requirements.md +0 -21
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-dotnet.md +0 -99
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-java.md +0 -20
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-js.md +0 -62
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-py.md +0 -57
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-rb.md +0 -80
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/uiauto2-driver.md +0 -148
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/appium.md +0 -395
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/bidi.md +0 -71
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/index.md +0 -30
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/jsonwp.md +0 -215
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/mjsonwp.md +0 -152
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/others.md +0 -672
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/plugins.md +0 -291
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/webdriver.md +0 -1114
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/env-vars.md +0 -31
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/extensions.md +0 -240
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/index.md +0 -35
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/server.md +0 -76
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/setup.md +0 -78
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/index.md +0 -25
- package/src/resources/submodules/appium/packages/appium/docs/zh/resources/index.md +0 -28
- package/src/resources/submodules/appium/packages/appium/docs/zh/sponsors/index.md +0 -61
- package/src/resources/submodules/appium/packages/appium/types/manifest/README.md +0 -30
- package/src/resources/submodules/appium/packages/base-driver/CHANGELOG.md +0 -1131
- package/src/resources/submodules/appium/packages/base-driver/README.md +0 -15
- package/src/resources/submodules/appium/packages/base-driver/docs/mjsonwp/errors.md +0 -82
- package/src/resources/submodules/appium/packages/base-driver/docs/mjsonwp/protocol-methods.md +0 -182
- package/src/resources/submodules/appium/packages/base-driver/static/appium.png +0 -0
- package/src/resources/submodules/appium/packages/base-plugin/CHANGELOG.md +0 -672
- package/src/resources/submodules/appium/packages/base-plugin/README.md +0 -15
- package/src/resources/submodules/appium/packages/docutils/CHANGELOG.md +0 -948
- package/src/resources/submodules/appium/packages/docutils/README.md +0 -27
- package/src/resources/submodules/appium/packages/driver-test-support/CHANGELOG.md +0 -717
- package/src/resources/submodules/appium/packages/driver-test-support/README.md +0 -112
- package/src/resources/submodules/appium/packages/eslint-config-appium-ts/CHANGELOG.md +0 -168
- package/src/resources/submodules/appium/packages/eslint-config-appium-ts/README.md +0 -33
- package/src/resources/submodules/appium/packages/execute-driver-plugin/CHANGELOG.md +0 -603
- package/src/resources/submodules/appium/packages/execute-driver-plugin/README.md +0 -42
- package/src/resources/submodules/appium/packages/fake-driver/CHANGELOG.md +0 -545
- package/src/resources/submodules/appium/packages/fake-driver/README.md +0 -7
- package/src/resources/submodules/appium/packages/fake-driver/lib/screen.png +0 -0
- package/src/resources/submodules/appium/packages/fake-plugin/CHANGELOG.md +0 -683
- package/src/resources/submodules/appium/packages/fake-plugin/README.md +0 -7
- package/src/resources/submodules/appium/packages/images-plugin/CHANGELOG.md +0 -602
- package/src/resources/submodules/appium/packages/images-plugin/README.md +0 -27
- package/src/resources/submodules/appium/packages/images-plugin/docs/find-by-image.md +0 -65
- package/src/resources/submodules/appium/packages/images-plugin/docs/image-comparison.md +0 -203
- package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/appstore.png +0 -0
- package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/img1.png +0 -0
- package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/img2.png +0 -0
- package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/img2_part.png +0 -0
- package/src/resources/submodules/appium/packages/logger/CHANGELOG.md +0 -162
- package/src/resources/submodules/appium/packages/logger/README.md +0 -31
- package/src/resources/submodules/appium/packages/opencv/CHANGELOG.md +0 -384
- package/src/resources/submodules/appium/packages/opencv/README.md +0 -68
- package/src/resources/submodules/appium/packages/opencv/test/e2e/images/appium-diagram.jpg +0 -0
- package/src/resources/submodules/appium/packages/opencv/test/e2e/images/cc1.png +0 -0
- package/src/resources/submodules/appium/packages/opencv/test/e2e/images/cc2.png +0 -0
- package/src/resources/submodules/appium/packages/opencv/test/e2e/images/cc_rotated.png +0 -0
- package/src/resources/submodules/appium/packages/opencv/test/e2e/images/findwaldo.jpg +0 -0
- package/src/resources/submodules/appium/packages/opencv/test/e2e/images/number5.png +0 -0
- package/src/resources/submodules/appium/packages/opencv/test/e2e/images/waldo.jpg +0 -0
- package/src/resources/submodules/appium/packages/plugin-test-support/CHANGELOG.md +0 -539
- package/src/resources/submodules/appium/packages/plugin-test-support/README.md +0 -49
- package/src/resources/submodules/appium/packages/relaxed-caps-plugin/CHANGELOG.md +0 -154
- package/src/resources/submodules/appium/packages/relaxed-caps-plugin/README.md +0 -35
- package/src/resources/submodules/appium/packages/schema/CHANGELOG.md +0 -271
- package/src/resources/submodules/appium/packages/schema/README.md +0 -50
- package/src/resources/submodules/appium/packages/storage-plugin/CHANGELOG.md +0 -73
- package/src/resources/submodules/appium/packages/storage-plugin/README.md +0 -83
- package/src/resources/submodules/appium/packages/strongbox/CHANGELOG.md +0 -94
- package/src/resources/submodules/appium/packages/strongbox/README.md +0 -96
- package/src/resources/submodules/appium/packages/support/CHANGELOG.md +0 -1054
- package/src/resources/submodules/appium/packages/support/README.md +0 -161
- package/src/resources/submodules/appium/packages/test-support/CHANGELOG.md +0 -712
- package/src/resources/submodules/appium/packages/test-support/README.md +0 -61
- package/src/resources/submodules/appium/packages/tsconfig/CHANGELOG.md +0 -131
- package/src/resources/submodules/appium/packages/tsconfig/README.md +0 -19
- package/src/resources/submodules/appium/packages/types/CHANGELOG.md +0 -793
- package/src/resources/submodules/appium/packages/types/README.md +0 -21
- package/src/resources/submodules/appium/packages/universal-xml-plugin/CHANGELOG.md +0 -435
- package/src/resources/submodules/appium/packages/universal-xml-plugin/README.md +0 -53
- package/src/resources/submodules/appium/renovate/README.md +0 -63
- package/src/resources/submodules/appium-uiautomator2-driver/CHANGELOG.md +0 -1204
- package/src/resources/submodules/appium-uiautomator2-driver/README.md +0 -2077
- package/src/resources/submodules/appium-uiautomator2-driver/docs/actions.md +0 -72
- package/src/resources/submodules/appium-uiautomator2-driver/docs/activity-startup.md +0 -47
- package/src/resources/submodules/appium-uiautomator2-driver/docs/android-appbundle.md +0 -69
- package/src/resources/submodules/appium-uiautomator2-driver/docs/android-mobile-gestures.md +0 -352
- package/src/resources/submodules/appium-uiautomator2-driver/docs/bidi.md +0 -50
- package/src/resources/submodules/appium-uiautomator2-driver/docs/capability-sets.md +0 -136
- package/src/resources/submodules/appium-uiautomator2-driver/docs/scheduled-actions.md +0 -155
- package/src/resources/submodules/appium-uiautomator2-driver/docs/uiautomator-uiselector.md +0 -51
- package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/main.md +0 -95
- package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/screen1.png +0 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/screen2.png +0 -0
- package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/checkered-squares.png +0 -0
- package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/start-button.png +0 -0
- package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/stop-button.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/.github/ISSUE_TEMPLATE.md +0 -4
- package/src/resources/submodules/appium-xcuitest-driver/CHANGELOG.md +0 -2594
- package/src/resources/submodules/appium-xcuitest-driver/README.md +0 -55
- package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-logo-white.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-logo.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-plus-xctest.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/contributing.md +0 -45
- package/src/resources/submodules/appium-xcuitest-driver/docs/endpoints-wda.md +0 -61
- package/src/resources/submodules/appium-xcuitest-driver/docs/endpoints.md +0 -98
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/keynote.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/on_my_iphone.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/top_files.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/attach-to-running-wda.md +0 -43
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/audio-capture.md +0 -78
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/capability-sets.md +0 -169
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/ci-setup.md +0 -47
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/clipboard.md +0 -47
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/elements-lookup-troubleshooting.md +0 -158
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/file-transfer.md +0 -147
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/gestures.md +0 -52
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/hybrid.md +0 -137
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/input-events.md +0 -67
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/install-certificate.md +0 -19
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/multiple-xcode-versions.md +0 -37
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/parallel-tests.md +0 -39
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/run-prebuilt-wda.md +0 -135
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/run-preinstalled-wda.md +0 -178
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/touch-id.md +0 -33
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/troubleshooting.md +0 -191
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/tvos.md +0 -114
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/wda-custom-server.md +0 -283
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/wda-slowness.md +0 -231
- package/src/resources/submodules/appium-xcuitest-driver/docs/index.md +0 -36
- package/src/resources/submodules/appium-xcuitest-driver/docs/installation/index.md +0 -137
- package/src/resources/submodules/appium-xcuitest-driver/docs/overview.md +0 -19
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/check-prov-prof.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/create-new-project.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/create-single-page.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/no-prov-prof.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/project-prov-prof.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/set-up-bundle.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/untrusted-dev.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-bundle-id.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-config.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-facebook-fail.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-facebook-succeed.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/index.md +0 -51
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-basic-auto.md +0 -49
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-basic-manual.md +0 -40
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-full-manual.md +0 -50
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-generic-manual.md +0 -49
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/real-device-config.md +0 -100
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/assets/images/useXctestrunFile.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/bidi.md +0 -75
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/capabilities.md +0 -165
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/commands.md +0 -490
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/element-attributes.md +0 -27
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/execute-methods.md +0 -2206
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/ios-predicate.md +0 -196
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/locator-strategies.md +0 -19
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/scripts.md +0 -29
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/security-flags.md +0 -22
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/server-args.md +0 -16
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/settings.md +0 -49
- package/src/resources/submodules/appium-xcuitest-driver/test/assets/TestApp-iphonesimulator.app/Default-568h@2x.png +0 -0
- package/src/resources/submodules/appium-xcuitest-driver/test/assets/test.png +0 -0
- package/src/schema.ts +0 -5
- package/src/scripts/simple-index-documentation.ts +0 -93
- package/src/scripts/simple-query-documentation.ts +0 -61
- package/src/server.ts +0 -40
- package/src/session-store.ts +0 -117
- package/src/tests/README.md +0 -83
- package/src/tests/__mocks__/@appium/support.ts +0 -30
- package/src/tests/generate-all-locators.test.ts +0 -178
- package/src/tests/screenshot.test.ts +0 -279
- package/src/tests/test-setup-wda.ts +0 -255
- package/src/tools/README.md +0 -179
- package/src/tools/app-management/activate-app.ts +0 -46
- package/src/tools/app-management/install-app.ts +0 -54
- package/src/tools/app-management/list-apps.ts +0 -87
- package/src/tools/app-management/terminate-app.ts +0 -56
- package/src/tools/app-management/uninstall-app.ts +0 -56
- package/src/tools/context/get-contexts.ts +0 -78
- package/src/tools/context/switch-context.ts +0 -106
- package/src/tools/documentation/answer-appium.ts +0 -73
- package/src/tools/documentation/index.ts +0 -98
- package/src/tools/documentation/reasoning-rag.ts +0 -435
- package/src/tools/documentation/sentence-transformers-embeddings.ts +0 -144
- package/src/tools/documentation/simple-pdf-indexer.ts +0 -508
- package/src/tools/documentation/uploads/documents.json +0 -1
- package/src/tools/index.ts +0 -159
- package/src/tools/interactions/click.ts +0 -50
- package/src/tools/interactions/double-tap.ts +0 -99
- package/src/tools/interactions/drag-and-drop.ts +0 -238
- package/src/tools/interactions/find.ts +0 -61
- package/src/tools/interactions/get-page-source.ts +0 -65
- package/src/tools/interactions/get-text.ts +0 -50
- package/src/tools/interactions/long-press.ts +0 -120
- package/src/tools/interactions/screenshot.ts +0 -119
- package/src/tools/interactions/set-value.ts +0 -54
- package/src/tools/ios/boot-simulator.ts +0 -88
- package/src/tools/ios/install-wda.ts +0 -277
- package/src/tools/ios/setup-wda.ts +0 -217
- package/src/tools/navigations/scroll-to-element.ts +0 -198
- package/src/tools/navigations/scroll.ts +0 -113
- package/src/tools/navigations/swipe.ts +0 -368
- package/src/tools/session/create-session.ts +0 -379
- package/src/tools/session/delete-session.ts +0 -56
- package/src/tools/session/select-device.ts +0 -326
- package/src/tools/session/select-platform.ts +0 -250
- package/src/tools/test-generation/generate-tests.ts +0 -48
- package/src/tools/test-generation/locators.ts +0 -101
- package/src/types/appium-ios-device.d.ts +0 -8
- package/src/types/appium-xcuitest-driver.d.ts +0 -5
- package/src/ui/mcp-ui-utils.ts +0 -1630
- package/tsconfig.json +0 -15
- package/tsconfig.tsbuildinfo +0 -1
package/src/session-store.ts
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { AndroidUiautomator2Driver } from 'appium-uiautomator2-driver';
|
|
2
|
-
import { XCUITestDriver } from 'appium-xcuitest-driver';
|
|
3
|
-
import type { Client } from 'webdriver';
|
|
4
|
-
import log from './logger.js';
|
|
5
|
-
|
|
6
|
-
let driver: any = null;
|
|
7
|
-
let sessionId: string | null = null;
|
|
8
|
-
let isDeletingSession = false; // Lock to prevent concurrent deletion
|
|
9
|
-
|
|
10
|
-
export const PLATFORM = {
|
|
11
|
-
android: 'Android',
|
|
12
|
-
ios: 'iOS',
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Determine whether the provided driver represents a remote driver session.
|
|
17
|
-
*
|
|
18
|
-
* This checks for the presence of a string-valued `sessionId` property on the
|
|
19
|
-
* driver object, which indicates a remote/WebDriver session.
|
|
20
|
-
*
|
|
21
|
-
* @param driver - The driver instance to inspect (may be a Client, AndroidUiautomator2Driver, XCUITestDriver, or null).
|
|
22
|
-
* @returns `true` if `driver` is non-null and has a string `sessionId`; otherwise `false`.
|
|
23
|
-
*/
|
|
24
|
-
export function isRemoteDriverSession(
|
|
25
|
-
driver: Client | AndroidUiautomator2Driver | XCUITestDriver | null
|
|
26
|
-
): boolean {
|
|
27
|
-
if (driver) {
|
|
28
|
-
return (
|
|
29
|
-
!(driver instanceof AndroidUiautomator2Driver) &&
|
|
30
|
-
!(driver instanceof XCUITestDriver)
|
|
31
|
-
);
|
|
32
|
-
}
|
|
33
|
-
return false;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export function setSession(
|
|
37
|
-
d: Client | AndroidUiautomator2Driver | XCUITestDriver,
|
|
38
|
-
id: string | null
|
|
39
|
-
) {
|
|
40
|
-
driver = d;
|
|
41
|
-
sessionId = id;
|
|
42
|
-
// Reset deletion flag when setting a new session
|
|
43
|
-
if (d && id) {
|
|
44
|
-
isDeletingSession = false;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export function getDriver():
|
|
49
|
-
| Client
|
|
50
|
-
| AndroidUiautomator2Driver
|
|
51
|
-
| XCUITestDriver {
|
|
52
|
-
return driver;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export function getSessionId() {
|
|
56
|
-
return sessionId;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export function isDeletingSessionInProgress() {
|
|
60
|
-
return isDeletingSession;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export function hasActiveSession(): boolean {
|
|
64
|
-
return driver !== null && sessionId !== null && !isDeletingSession;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export async function safeDeleteSession(): Promise<boolean> {
|
|
68
|
-
// Check if there's no session to delete
|
|
69
|
-
if (!driver || !sessionId) {
|
|
70
|
-
log.info('No active session to delete.');
|
|
71
|
-
return false;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// Check if deletion is already in progress
|
|
75
|
-
if (isDeletingSession) {
|
|
76
|
-
log.info('Session deletion already in progress, skipping...');
|
|
77
|
-
return false;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Set lock
|
|
81
|
-
isDeletingSession = true;
|
|
82
|
-
|
|
83
|
-
try {
|
|
84
|
-
log.info('Deleting current session');
|
|
85
|
-
await driver.deleteSession();
|
|
86
|
-
|
|
87
|
-
// Clear the session from store
|
|
88
|
-
driver = null;
|
|
89
|
-
sessionId = null;
|
|
90
|
-
|
|
91
|
-
log.info('Session deleted successfully.');
|
|
92
|
-
return true;
|
|
93
|
-
} catch (error) {
|
|
94
|
-
log.error('Error deleting session:', error);
|
|
95
|
-
throw error;
|
|
96
|
-
} finally {
|
|
97
|
-
// Always release lock
|
|
98
|
-
isDeletingSession = false;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
export const getPlatformName = (driver: any): string => {
|
|
103
|
-
if (driver instanceof AndroidUiautomator2Driver) {
|
|
104
|
-
return PLATFORM.android;
|
|
105
|
-
}
|
|
106
|
-
if (driver instanceof XCUITestDriver) {
|
|
107
|
-
return PLATFORM.ios;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
if ((driver as Client).isAndroid) {
|
|
111
|
-
return PLATFORM.android;
|
|
112
|
-
} else if ((driver as Client).isIOS) {
|
|
113
|
-
return PLATFORM.ios;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
throw new Error('Unknown driver type');
|
|
117
|
-
};
|
package/src/tests/README.md
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
# Tests for Mobile Agent
|
|
2
|
-
|
|
3
|
-
This directory contains unit tests for the Mobile Agent project.
|
|
4
|
-
|
|
5
|
-
## Running Tests
|
|
6
|
-
|
|
7
|
-
To run all tests:
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npm test
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
To run specific test files:
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
# Run tests for the locator generation functionality
|
|
17
|
-
npm run test:locators
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## Test Files
|
|
21
|
-
|
|
22
|
-
### generate-all-locators.test.ts
|
|
23
|
-
|
|
24
|
-
This file contains tests for the `generateAllElementLocators` function, which is responsible for generating locators for all elements in a page source XML.
|
|
25
|
-
|
|
26
|
-
The tests cover:
|
|
27
|
-
|
|
28
|
-
1. Basic functionality with valid XML
|
|
29
|
-
2. Handling of invalid/empty XML
|
|
30
|
-
3. Various filtering options:
|
|
31
|
-
- `includeTagNames` - Include only specific element types
|
|
32
|
-
- `excludeTagNames` - Exclude specific element types
|
|
33
|
-
- `minAttributeCount` - Filter elements by minimum attribute count
|
|
34
|
-
- `fetchableOnly` - Include only interactable elements (platform-specific)
|
|
35
|
-
- `clickableOnly` - Include only clickable elements
|
|
36
|
-
|
|
37
|
-
## Adding New Tests
|
|
38
|
-
|
|
39
|
-
When adding new tests:
|
|
40
|
-
|
|
41
|
-
1. Create a new test file in the `src/tests` directory with the `.test.ts` extension
|
|
42
|
-
2. Import the necessary functions and types from the source files
|
|
43
|
-
3. Use Jest's `describe`, `test`, and `expect` functions to structure your tests
|
|
44
|
-
4. Add a new script to `package.json` for running your specific test file
|
|
45
|
-
|
|
46
|
-
## Test Structure
|
|
47
|
-
|
|
48
|
-
Tests should follow this general structure:
|
|
49
|
-
|
|
50
|
-
```typescript
|
|
51
|
-
import { describe, test, expect } from '@jest/globals';
|
|
52
|
-
import { functionToTest } from '../path/to/function.js';
|
|
53
|
-
|
|
54
|
-
describe('functionToTest', () => {
|
|
55
|
-
test('should do something specific', () => {
|
|
56
|
-
// Arrange - set up test data
|
|
57
|
-
const input = 'some input';
|
|
58
|
-
|
|
59
|
-
// Act - call the function
|
|
60
|
-
const result = functionToTest(input);
|
|
61
|
-
|
|
62
|
-
// Assert - verify the result
|
|
63
|
-
expect(result).toBe('expected output');
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
## Mocking
|
|
69
|
-
|
|
70
|
-
For tests that require mocking dependencies, use Jest's mocking capabilities:
|
|
71
|
-
|
|
72
|
-
```typescript
|
|
73
|
-
import { jest } from '@jest/globals';
|
|
74
|
-
|
|
75
|
-
// Mock a module
|
|
76
|
-
jest.mock('../path/to/module.js');
|
|
77
|
-
|
|
78
|
-
// Create a mock function
|
|
79
|
-
const mockFunction = jest.fn();
|
|
80
|
-
mockFunction.mockReturnValue('mocked value');
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
Note that when working with ESM modules, you may need to use different mocking approaches than with CommonJS modules.
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
// Mock @appium/support for Jest tests
|
|
2
|
-
// This avoids the ESM/CommonJS mismatch with uuid dependency
|
|
3
|
-
|
|
4
|
-
export const logger = {
|
|
5
|
-
getLogger: (name: string) =>
|
|
6
|
-
// Simple logger implementation for tests
|
|
7
|
-
// No-op functions that match the logger interface
|
|
8
|
-
({
|
|
9
|
-
debug: (message: string, ...args: any[]) => {
|
|
10
|
-
// Silent in tests by default
|
|
11
|
-
},
|
|
12
|
-
info: (message: string, ...args: any[]) => {
|
|
13
|
-
// Silent in tests by default
|
|
14
|
-
},
|
|
15
|
-
warn: (message: string, ...args: any[]) => {
|
|
16
|
-
// Silent in tests by default
|
|
17
|
-
},
|
|
18
|
-
error: (message: string, ...args: any[]) => {
|
|
19
|
-
// Silent in tests by default
|
|
20
|
-
},
|
|
21
|
-
trace: (message: string, ...args: any[]) => {
|
|
22
|
-
// Silent in tests by default
|
|
23
|
-
},
|
|
24
|
-
}),
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
// Export other commonly used utilities from @appium/support if needed
|
|
28
|
-
export default {
|
|
29
|
-
logger,
|
|
30
|
-
};
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
import { describe, test, expect } from '@jest/globals';
|
|
2
|
-
import {
|
|
3
|
-
generateAllElementLocators,
|
|
4
|
-
ElementWithLocators,
|
|
5
|
-
} from '../locators/generate-all-locators.js';
|
|
6
|
-
|
|
7
|
-
describe('generateAllElementLocators', () => {
|
|
8
|
-
// Sample XML for testing
|
|
9
|
-
const sampleXML = `
|
|
10
|
-
<hierarchy>
|
|
11
|
-
<android.widget.FrameLayout resource-id="android:id/content">
|
|
12
|
-
<android.widget.LinearLayout>
|
|
13
|
-
<android.widget.TextView text="Hello World" resource-id="com.example:id/text_view" clickable="true" enabled="true" displayed="true" />
|
|
14
|
-
<android.widget.Button text="Click Me" resource-id="com.example:id/button" clickable="true" enabled="true" displayed="true" />
|
|
15
|
-
<android.widget.EditText text="" resource-id="com.example:id/edit_text" clickable="true" enabled="true" displayed="true" />
|
|
16
|
-
</android.widget.LinearLayout>
|
|
17
|
-
</android.widget.FrameLayout>
|
|
18
|
-
</hierarchy>
|
|
19
|
-
`;
|
|
20
|
-
|
|
21
|
-
// Sample iOS XML for testing
|
|
22
|
-
const sampleIOSXML = `
|
|
23
|
-
<hierarchy>
|
|
24
|
-
<XCUIElementTypeApplication>
|
|
25
|
-
<XCUIElementTypeWindow>
|
|
26
|
-
<XCUIElementTypeButton name="Click Me" enabled="true" visible="true" />
|
|
27
|
-
<XCUIElementTypeTextField name="Enter text" enabled="true" visible="true" />
|
|
28
|
-
<XCUIElementTypeStaticText name="Hello World" enabled="true" visible="true" />
|
|
29
|
-
</XCUIElementTypeWindow>
|
|
30
|
-
</XCUIElementTypeApplication>
|
|
31
|
-
</hierarchy>
|
|
32
|
-
`;
|
|
33
|
-
|
|
34
|
-
test('should return an array when given valid XML', () => {
|
|
35
|
-
// Call the function with the sample XML
|
|
36
|
-
const result = generateAllElementLocators(sampleXML, true, 'uiautomator2');
|
|
37
|
-
|
|
38
|
-
// Basic validation of the result
|
|
39
|
-
expect(Array.isArray(result)).toBe(true);
|
|
40
|
-
expect(result.length).toBeGreaterThan(0);
|
|
41
|
-
|
|
42
|
-
// Verify the structure of the returned elements
|
|
43
|
-
if (result.length > 0) {
|
|
44
|
-
const element = result[0];
|
|
45
|
-
expect(element).toHaveProperty('tagName');
|
|
46
|
-
expect(element).toHaveProperty('locators');
|
|
47
|
-
expect(element).toHaveProperty('text');
|
|
48
|
-
expect(element).toHaveProperty('contentDesc');
|
|
49
|
-
expect(element).toHaveProperty('resourceId');
|
|
50
|
-
expect(element).toHaveProperty('clickable');
|
|
51
|
-
expect(element).toHaveProperty('enabled');
|
|
52
|
-
expect(element).toHaveProperty('displayed');
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
test('should return an empty array when given invalid XML', () => {
|
|
57
|
-
// Call the function with invalid XML (just a root element with no content)
|
|
58
|
-
const result = generateAllElementLocators(
|
|
59
|
-
'<hierarchy></hierarchy>',
|
|
60
|
-
true,
|
|
61
|
-
'uiautomator2'
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
// Verify the result is an empty array or at least doesn't throw an error
|
|
65
|
-
expect(Array.isArray(result)).toBe(true);
|
|
66
|
-
expect(result.length).toBe(0);
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
test('should apply includeTagNames filter correctly', () => {
|
|
70
|
-
// Call the function with filters
|
|
71
|
-
const result = generateAllElementLocators(sampleXML, true, 'uiautomator2', {
|
|
72
|
-
includeTagNames: ['android.widget.Button'],
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
// If the filter works, either the result will be empty (if no buttons found)
|
|
76
|
-
// or all elements will be buttons
|
|
77
|
-
if (result.length > 0) {
|
|
78
|
-
expect(
|
|
79
|
-
result.every((element) => element.tagName.includes('Button'))
|
|
80
|
-
).toBe(true);
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
test('should apply excludeTagNames filter correctly', () => {
|
|
85
|
-
// Call the function with excludeTagNames filter
|
|
86
|
-
const result = generateAllElementLocators(sampleXML, true, 'uiautomator2', {
|
|
87
|
-
excludeTagNames: ['android.widget.Button'],
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
// Verify no Button elements are included
|
|
91
|
-
expect(result.every((element) => !element.tagName.includes('Button'))).toBe(
|
|
92
|
-
true
|
|
93
|
-
);
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
test('should apply minAttributeCount filter correctly', () => {
|
|
97
|
-
// Call the function with minAttributeCount filter
|
|
98
|
-
const result = generateAllElementLocators(sampleXML, true, 'uiautomator2', {
|
|
99
|
-
minAttributeCount: 3,
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
// All elements should have at least 3 attributes
|
|
103
|
-
if (result.length > 0) {
|
|
104
|
-
// We can't directly check the attributes count since we only have the processed elements
|
|
105
|
-
// But we can verify that elements with fewer attributes are filtered out
|
|
106
|
-
expect(result.length).toBeLessThanOrEqual(
|
|
107
|
-
generateAllElementLocators(sampleXML, true, 'uiautomator2').length
|
|
108
|
-
);
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
test('should handle fetchableOnly filter for Android', () => {
|
|
113
|
-
// Call the function with fetchableOnly filter
|
|
114
|
-
const result = generateAllElementLocators(sampleXML, true, 'uiautomator2', {
|
|
115
|
-
fetchableOnly: true,
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
// Verify the result contains only interactable elements
|
|
119
|
-
if (result.length > 0) {
|
|
120
|
-
const interactableTags = [
|
|
121
|
-
'EditText',
|
|
122
|
-
'Button',
|
|
123
|
-
'ImageButton',
|
|
124
|
-
'CheckBox',
|
|
125
|
-
'RadioButton',
|
|
126
|
-
'Switch',
|
|
127
|
-
'ToggleButton',
|
|
128
|
-
'TextView',
|
|
129
|
-
];
|
|
130
|
-
|
|
131
|
-
expect(
|
|
132
|
-
result.every(
|
|
133
|
-
(element) =>
|
|
134
|
-
interactableTags.some((tag) => element.tagName.includes(tag)) ||
|
|
135
|
-
element.clickable === true
|
|
136
|
-
)
|
|
137
|
-
).toBe(true);
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
test('should handle fetchableOnly filter for iOS', () => {
|
|
142
|
-
// Call the function with fetchableOnly filter for iOS
|
|
143
|
-
const result = generateAllElementLocators(sampleIOSXML, true, 'xcuitest', {
|
|
144
|
-
fetchableOnly: true,
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
// Verify the result contains only interactable iOS elements
|
|
148
|
-
if (result.length > 0) {
|
|
149
|
-
const interactableTags = [
|
|
150
|
-
'XCUIElementTypeTextField',
|
|
151
|
-
'XCUIElementTypeSecureTextField',
|
|
152
|
-
'XCUIElementTypeButton',
|
|
153
|
-
'XCUIElementTypeImage',
|
|
154
|
-
'XCUIElementTypeSwitch',
|
|
155
|
-
'XCUIElementTypeStaticText',
|
|
156
|
-
'XCUIElementTypeTextView',
|
|
157
|
-
'XCUIElementTypeCell',
|
|
158
|
-
'XCUIElementTypeLink',
|
|
159
|
-
];
|
|
160
|
-
|
|
161
|
-
expect(
|
|
162
|
-
result.every((element) =>
|
|
163
|
-
interactableTags.some((tag) => element.tagName.includes(tag))
|
|
164
|
-
)
|
|
165
|
-
).toBe(true);
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
test('should handle clickableOnly filter correctly', () => {
|
|
170
|
-
// Call the function with clickableOnly filter
|
|
171
|
-
const result = generateAllElementLocators(sampleXML, true, 'uiautomator2', {
|
|
172
|
-
clickableOnly: true,
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
// Verify all elements are clickable
|
|
176
|
-
expect(result.every((element) => element.clickable === true)).toBe(true);
|
|
177
|
-
});
|
|
178
|
-
});
|
|
@@ -1,279 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
describe,
|
|
3
|
-
test,
|
|
4
|
-
expect,
|
|
5
|
-
beforeEach,
|
|
6
|
-
afterEach,
|
|
7
|
-
jest,
|
|
8
|
-
} from '@jest/globals';
|
|
9
|
-
import { join, isAbsolute } from 'path';
|
|
10
|
-
import * as os from 'node:os';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Local implementation of resolveScreenshotDir for testing.
|
|
14
|
-
* This mirrors the implementation in screenshot.ts to avoid importing
|
|
15
|
-
* the module which has heavy dependencies.
|
|
16
|
-
*/
|
|
17
|
-
function resolveScreenshotDir(): string {
|
|
18
|
-
const screenshotDir = process.env.SCREENSHOTS_DIR;
|
|
19
|
-
|
|
20
|
-
if (!screenshotDir) {
|
|
21
|
-
return os.tmpdir();
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
if (isAbsolute(screenshotDir)) {
|
|
25
|
-
return screenshotDir;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
return join(process.cwd(), screenshotDir);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Interface for screenshot dependencies (mirrors screenshot.ts).
|
|
33
|
-
*/
|
|
34
|
-
interface ScreenshotDeps {
|
|
35
|
-
getDriver: () => { getScreenshot: () => Promise<string> } | null;
|
|
36
|
-
writeFile: (path: string, data: Buffer) => Promise<void>;
|
|
37
|
-
mkdir: (path: string, options: { recursive: boolean }) => Promise<void>;
|
|
38
|
-
resolveScreenshotDir: () => string;
|
|
39
|
-
dateNow: () => number;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Local implementation of executeScreenshot for testing.
|
|
44
|
-
* This mirrors the implementation in screenshot.ts.
|
|
45
|
-
*/
|
|
46
|
-
async function executeScreenshot(deps: ScreenshotDeps): Promise<any> {
|
|
47
|
-
const driver = deps.getDriver();
|
|
48
|
-
if (!driver) {
|
|
49
|
-
throw new Error('No driver found');
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
try {
|
|
53
|
-
const screenshotBase64 = await driver.getScreenshot();
|
|
54
|
-
const screenshotBuffer = Buffer.from(screenshotBase64, 'base64');
|
|
55
|
-
const timestamp = deps.dateNow();
|
|
56
|
-
const filename = `screenshot_${timestamp}.png`;
|
|
57
|
-
const screenshotDir = deps.resolveScreenshotDir();
|
|
58
|
-
|
|
59
|
-
await deps.mkdir(screenshotDir, { recursive: true });
|
|
60
|
-
const filepath = join(screenshotDir, filename);
|
|
61
|
-
await deps.writeFile(filepath, screenshotBuffer);
|
|
62
|
-
|
|
63
|
-
return {
|
|
64
|
-
content: [
|
|
65
|
-
{
|
|
66
|
-
type: 'text',
|
|
67
|
-
text: `Screenshot saved successfully to: ${filename}`,
|
|
68
|
-
},
|
|
69
|
-
],
|
|
70
|
-
};
|
|
71
|
-
} catch (err: any) {
|
|
72
|
-
return {
|
|
73
|
-
content: [
|
|
74
|
-
{
|
|
75
|
-
type: 'text',
|
|
76
|
-
text: `Failed to take screenshot. err: ${err.toString()}`,
|
|
77
|
-
},
|
|
78
|
-
],
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
describe('resolveScreenshotDir', () => {
|
|
84
|
-
const originalEnv = process.env.SCREENSHOTS_DIR;
|
|
85
|
-
const cwd = process.cwd();
|
|
86
|
-
|
|
87
|
-
beforeEach(() => {
|
|
88
|
-
delete process.env.SCREENSHOTS_DIR;
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
afterEach(() => {
|
|
92
|
-
if (originalEnv !== undefined) {
|
|
93
|
-
process.env.SCREENSHOTS_DIR = originalEnv;
|
|
94
|
-
} else {
|
|
95
|
-
delete process.env.SCREENSHOTS_DIR;
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
test('should return os.tmpdir() when SCREENSHOTS_DIR is not set', () => {
|
|
100
|
-
const result = resolveScreenshotDir();
|
|
101
|
-
expect(result).toBe(os.tmpdir());
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
test('should return os.tmpdir() when SCREENSHOTS_DIR is empty string', () => {
|
|
105
|
-
process.env.SCREENSHOTS_DIR = '';
|
|
106
|
-
const result = resolveScreenshotDir();
|
|
107
|
-
expect(result).toBe(os.tmpdir());
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
test('should return absolute path as-is when SCREENSHOTS_DIR is absolute', () => {
|
|
111
|
-
const absolutePath = '/tmp/screenshots';
|
|
112
|
-
process.env.SCREENSHOTS_DIR = absolutePath;
|
|
113
|
-
const result = resolveScreenshotDir();
|
|
114
|
-
expect(result).toBe(absolutePath);
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
test('should join relative path with process.cwd()', () => {
|
|
118
|
-
const relativePath = 'screenshots';
|
|
119
|
-
process.env.SCREENSHOTS_DIR = relativePath;
|
|
120
|
-
const result = resolveScreenshotDir();
|
|
121
|
-
expect(result).toBe(join(cwd, relativePath));
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
test('should handle nested relative paths', () => {
|
|
125
|
-
const relativePath = 'output/screenshots/test';
|
|
126
|
-
process.env.SCREENSHOTS_DIR = relativePath;
|
|
127
|
-
const result = resolveScreenshotDir();
|
|
128
|
-
expect(result).toBe(join(cwd, relativePath));
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
test('should handle relative path starting with ./', () => {
|
|
132
|
-
const relativePath = './screenshots';
|
|
133
|
-
process.env.SCREENSHOTS_DIR = relativePath;
|
|
134
|
-
const result = resolveScreenshotDir();
|
|
135
|
-
expect(result).toBe(join(cwd, relativePath));
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
test('should handle relative path with parent directory reference', () => {
|
|
139
|
-
const relativePath = '../screenshots';
|
|
140
|
-
process.env.SCREENSHOTS_DIR = relativePath;
|
|
141
|
-
const result = resolveScreenshotDir();
|
|
142
|
-
expect(result).toBe(join(cwd, relativePath));
|
|
143
|
-
});
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
describe('executeScreenshot', () => {
|
|
147
|
-
const mockBase64 = 'dGVzdA=='; // 'test' in base64
|
|
148
|
-
const mockTimestamp = 1234567890;
|
|
149
|
-
|
|
150
|
-
function createMockDeps(
|
|
151
|
-
overrides: Partial<ScreenshotDeps> = {}
|
|
152
|
-
): ScreenshotDeps {
|
|
153
|
-
return {
|
|
154
|
-
getDriver: jest.fn(() => ({
|
|
155
|
-
getScreenshot: jest.fn(() => Promise.resolve(mockBase64)),
|
|
156
|
-
})) as any,
|
|
157
|
-
writeFile: jest.fn(() => Promise.resolve()) as any,
|
|
158
|
-
mkdir: jest.fn(() => Promise.resolve()) as any,
|
|
159
|
-
resolveScreenshotDir: jest.fn(() => '/mock/screenshots') as any,
|
|
160
|
-
dateNow: jest.fn(() => mockTimestamp) as any,
|
|
161
|
-
...overrides,
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
test('should throw error when no driver found', async () => {
|
|
166
|
-
const deps = createMockDeps({
|
|
167
|
-
getDriver: jest.fn(() => null) as any,
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
await expect(executeScreenshot(deps)).rejects.toThrow('No driver found');
|
|
171
|
-
});
|
|
172
|
-
|
|
173
|
-
test('should return success content with filename', async () => {
|
|
174
|
-
const deps = createMockDeps();
|
|
175
|
-
|
|
176
|
-
const result = await executeScreenshot(deps);
|
|
177
|
-
|
|
178
|
-
expect(result).toEqual({
|
|
179
|
-
content: [
|
|
180
|
-
{
|
|
181
|
-
type: 'text',
|
|
182
|
-
text: `Screenshot saved successfully to: screenshot_${mockTimestamp}.png`,
|
|
183
|
-
},
|
|
184
|
-
],
|
|
185
|
-
});
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
test('should use resolved screenshot directory from SCREENSHOTS_DIR', async () => {
|
|
189
|
-
const customDir = '/custom/path/screenshots';
|
|
190
|
-
const deps = createMockDeps({
|
|
191
|
-
resolveScreenshotDir: jest.fn(() => customDir) as any,
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
await executeScreenshot(deps);
|
|
195
|
-
|
|
196
|
-
expect(deps.mkdir).toHaveBeenCalledWith(customDir, { recursive: true });
|
|
197
|
-
expect(deps.writeFile).toHaveBeenCalledWith(
|
|
198
|
-
join(customDir, `screenshot_${mockTimestamp}.png`),
|
|
199
|
-
expect.any(Buffer)
|
|
200
|
-
);
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
test('should create directory with recursive option', async () => {
|
|
204
|
-
const deps = createMockDeps();
|
|
205
|
-
|
|
206
|
-
await executeScreenshot(deps);
|
|
207
|
-
|
|
208
|
-
expect(deps.mkdir).toHaveBeenCalledWith('/mock/screenshots', {
|
|
209
|
-
recursive: true,
|
|
210
|
-
});
|
|
211
|
-
});
|
|
212
|
-
|
|
213
|
-
test('should write screenshot buffer to correct filepath', async () => {
|
|
214
|
-
const deps = createMockDeps();
|
|
215
|
-
|
|
216
|
-
await executeScreenshot(deps);
|
|
217
|
-
|
|
218
|
-
expect(deps.writeFile).toHaveBeenCalledWith(
|
|
219
|
-
`/mock/screenshots/screenshot_${mockTimestamp}.png`,
|
|
220
|
-
Buffer.from(mockBase64, 'base64')
|
|
221
|
-
);
|
|
222
|
-
});
|
|
223
|
-
|
|
224
|
-
test('should return error content when screenshot fails', async () => {
|
|
225
|
-
const errorMessage = 'Screenshot capture failed';
|
|
226
|
-
const deps = createMockDeps({
|
|
227
|
-
getDriver: jest.fn(() => ({
|
|
228
|
-
getScreenshot: jest.fn(() => Promise.reject(new Error(errorMessage))),
|
|
229
|
-
})) as any,
|
|
230
|
-
});
|
|
231
|
-
|
|
232
|
-
const result = await executeScreenshot(deps);
|
|
233
|
-
|
|
234
|
-
expect(result).toEqual({
|
|
235
|
-
content: [
|
|
236
|
-
{
|
|
237
|
-
type: 'text',
|
|
238
|
-
text: `Failed to take screenshot. err: Error: ${errorMessage}`,
|
|
239
|
-
},
|
|
240
|
-
],
|
|
241
|
-
});
|
|
242
|
-
});
|
|
243
|
-
|
|
244
|
-
test('should return error content when mkdir fails', async () => {
|
|
245
|
-
const errorMessage = 'Permission denied';
|
|
246
|
-
const deps = createMockDeps({
|
|
247
|
-
mkdir: jest.fn(() => Promise.reject(new Error(errorMessage))) as any,
|
|
248
|
-
});
|
|
249
|
-
|
|
250
|
-
const result = await executeScreenshot(deps);
|
|
251
|
-
|
|
252
|
-
expect(result).toEqual({
|
|
253
|
-
content: [
|
|
254
|
-
{
|
|
255
|
-
type: 'text',
|
|
256
|
-
text: `Failed to take screenshot. err: Error: ${errorMessage}`,
|
|
257
|
-
},
|
|
258
|
-
],
|
|
259
|
-
});
|
|
260
|
-
});
|
|
261
|
-
|
|
262
|
-
test('should return error content when writeFile fails', async () => {
|
|
263
|
-
const errorMessage = 'Disk full';
|
|
264
|
-
const deps = createMockDeps({
|
|
265
|
-
writeFile: jest.fn(() => Promise.reject(new Error(errorMessage))) as any,
|
|
266
|
-
});
|
|
267
|
-
|
|
268
|
-
const result = await executeScreenshot(deps);
|
|
269
|
-
|
|
270
|
-
expect(result).toEqual({
|
|
271
|
-
content: [
|
|
272
|
-
{
|
|
273
|
-
type: 'text',
|
|
274
|
-
text: `Failed to take screenshot. err: Error: ${errorMessage}`,
|
|
275
|
-
},
|
|
276
|
-
],
|
|
277
|
-
});
|
|
278
|
-
});
|
|
279
|
-
});
|