appium-mcp 0.0.1 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +37 -0
- package/.github/workflows/pr-title.yml +15 -0
- package/.github/workflows/publish.yml +31 -0
- package/.gitmodules +9 -0
- package/.prettierignore +29 -0
- package/.prettierrc +10 -0
- package/.releaserc +37 -0
- package/CHANGELOG.md +37 -0
- package/LICENSE +21 -0
- package/README.md +153 -0
- package/dist/devicemanager/adb-manager.d.ts +71 -0
- package/dist/devicemanager/adb-manager.js +140 -0
- package/dist/devicemanager/adb-manager.js.map +1 -0
- package/dist/devicemanager/ios-manager.d.ts +58 -0
- package/dist/devicemanager/ios-manager.js +122 -0
- package/dist/devicemanager/ios-manager.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/locators/element-filter.d.ts +13 -0
- package/dist/locators/element-filter.js +79 -0
- package/dist/locators/element-filter.js.map +1 -0
- package/dist/locators/generate-all-locators.d.ts +21 -0
- package/dist/locators/generate-all-locators.js +72 -0
- package/dist/locators/generate-all-locators.js.map +1 -0
- package/dist/locators/locator-generation.d.ts +36 -0
- package/dist/locators/locator-generation.js +501 -0
- package/dist/locators/locator-generation.js.map +1 -0
- package/dist/locators/logger.d.ts +5 -0
- package/dist/locators/logger.js +9 -0
- package/dist/locators/logger.js.map +1 -0
- package/dist/locators/source-parsing.d.ts +43 -0
- package/dist/locators/source-parsing.js +100 -0
- package/dist/locators/source-parsing.js.map +1 -0
- package/dist/resources/index.d.ts +1 -0
- package/dist/resources/index.js +7 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/java/template.d.ts +4 -0
- package/dist/resources/java/template.js +82 -0
- package/dist/resources/java/template.js.map +1 -0
- package/dist/schema.d.ts +2 -0
- package/dist/schema.js +5 -0
- package/dist/schema.js.map +1 -0
- package/dist/scripts/simple-index-documentation.d.ts +20 -0
- package/dist/scripts/simple-index-documentation.js +77 -0
- package/dist/scripts/simple-index-documentation.js.map +1 -0
- package/dist/scripts/simple-query-documentation.d.ts +12 -0
- package/dist/scripts/simple-query-documentation.js +52 -0
- package/dist/scripts/simple-query-documentation.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.js +37 -0
- package/dist/server.js.map +1 -0
- package/dist/tests/__mocks__/@appium/support.d.ts +21 -0
- package/dist/tests/__mocks__/@appium/support.js +30 -0
- package/dist/tests/__mocks__/@appium/support.js.map +1 -0
- package/dist/tests/generate-all-locators.test.d.ts +1 -0
- package/dist/tests/generate-all-locators.test.js +140 -0
- package/dist/tests/generate-all-locators.test.js.map +1 -0
- package/dist/tests/test-setup-wda.d.ts +1 -0
- package/dist/tests/test-setup-wda.js +202 -0
- package/dist/tests/test-setup-wda.js.map +1 -0
- package/dist/tools/answer-appium.d.ts +1 -0
- package/dist/tools/answer-appium.js +71 -0
- package/dist/tools/answer-appium.js.map +1 -0
- package/dist/tools/boot-simulator.d.ts +1 -0
- package/dist/tools/boot-simulator.js +71 -0
- package/dist/tools/boot-simulator.js.map +1 -0
- package/dist/tools/create-session.d.ts +1 -0
- package/dist/tools/create-session.js +192 -0
- package/dist/tools/create-session.js.map +1 -0
- package/dist/tools/delete-session.d.ts +1 -0
- package/dist/tools/delete-session.js +47 -0
- package/dist/tools/delete-session.js.map +1 -0
- package/dist/tools/documentation/index.d.ts +28 -0
- package/dist/tools/documentation/index.js +63 -0
- package/dist/tools/documentation/index.js.map +1 -0
- package/dist/tools/documentation/reasoning-rag.d.ts +88 -0
- package/dist/tools/documentation/reasoning-rag.js +281 -0
- package/dist/tools/documentation/reasoning-rag.js.map +1 -0
- package/dist/tools/documentation/sentence-transformers-embeddings.d.ts +34 -0
- package/dist/tools/documentation/sentence-transformers-embeddings.js +111 -0
- package/dist/tools/documentation/sentence-transformers-embeddings.js.map +1 -0
- package/dist/tools/documentation/simple-pdf-indexer.d.ts +45 -0
- package/dist/tools/documentation/simple-pdf-indexer.js +402 -0
- package/dist/tools/documentation/simple-pdf-indexer.js.map +1 -0
- package/dist/tools/documentation/uploads/documents.json +1 -0
- package/dist/tools/generate-tests.d.ts +2 -0
- package/dist/tools/generate-tests.js +46 -0
- package/dist/tools/generate-tests.js.map +1 -0
- package/dist/tools/index.d.ts +16 -0
- package/dist/tools/index.js +112 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/install-wda.d.ts +1 -0
- package/dist/tools/install-wda.js +219 -0
- package/dist/tools/install-wda.js.map +1 -0
- package/dist/tools/interactions/activate-app.d.ts +2 -0
- package/dist/tools/interactions/activate-app.js +44 -0
- package/dist/tools/interactions/activate-app.js.map +1 -0
- package/dist/tools/interactions/click.d.ts +2 -0
- package/dist/tools/interactions/click.js +45 -0
- package/dist/tools/interactions/click.js.map +1 -0
- package/dist/tools/interactions/double-tap.d.ts +2 -0
- package/dist/tools/interactions/double-tap.js +81 -0
- package/dist/tools/interactions/double-tap.js.map +1 -0
- package/dist/tools/interactions/find.d.ts +13 -0
- package/dist/tools/interactions/find.js +55 -0
- package/dist/tools/interactions/find.js.map +1 -0
- package/dist/tools/interactions/get-text.d.ts +2 -0
- package/dist/tools/interactions/get-text.js +45 -0
- package/dist/tools/interactions/get-text.js.map +1 -0
- package/dist/tools/interactions/install-app.d.ts +2 -0
- package/dist/tools/interactions/install-app.js +43 -0
- package/dist/tools/interactions/install-app.js.map +1 -0
- package/dist/tools/interactions/list-apps.d.ts +2 -0
- package/dist/tools/interactions/list-apps.js +59 -0
- package/dist/tools/interactions/list-apps.js.map +1 -0
- package/dist/tools/interactions/screenshot.d.ts +2 -0
- package/dist/tools/interactions/screenshot.js +49 -0
- package/dist/tools/interactions/screenshot.js.map +1 -0
- package/dist/tools/interactions/set-value.d.ts +2 -0
- package/dist/tools/interactions/set-value.js +46 -0
- package/dist/tools/interactions/set-value.js.map +1 -0
- package/dist/tools/interactions/terminate-app.d.ts +2 -0
- package/dist/tools/interactions/terminate-app.js +45 -0
- package/dist/tools/interactions/terminate-app.js.map +1 -0
- package/dist/tools/interactions/uninstall-app.d.ts +2 -0
- package/dist/tools/interactions/uninstall-app.js +45 -0
- package/dist/tools/interactions/uninstall-app.js.map +1 -0
- package/dist/tools/locators.d.ts +1 -0
- package/dist/tools/locators.js +71 -0
- package/dist/tools/locators.js.map +1 -0
- package/dist/tools/scroll-to-element.d.ts +1 -0
- package/dist/tools/scroll-to-element.js +155 -0
- package/dist/tools/scroll-to-element.js.map +1 -0
- package/dist/tools/scroll.d.ts +1 -0
- package/dist/tools/scroll.js +91 -0
- package/dist/tools/scroll.js.map +1 -0
- package/dist/tools/select-device.d.ts +5 -0
- package/dist/tools/select-device.js +222 -0
- package/dist/tools/select-device.js.map +1 -0
- package/dist/tools/select-platform.d.ts +1 -0
- package/dist/tools/select-platform.js +195 -0
- package/dist/tools/select-platform.js.map +1 -0
- package/dist/tools/session-store.d.ts +7 -0
- package/dist/tools/session-store.js +64 -0
- package/dist/tools/session-store.js.map +1 -0
- package/dist/tools/setup-wda.d.ts +1 -0
- package/dist/tools/setup-wda.js +177 -0
- package/dist/tools/setup-wda.js.map +1 -0
- package/docs/CONTRIBUTING.md +424 -0
- package/eslint.config.js +49 -0
- package/examples/android-gmail.md +7 -0
- package/examples/android-todo-app.md +9 -0
- package/jest.config.js +23 -0
- package/package.json +71 -6
- package/scripts/setup-submodules-sparse.sh +53 -0
- package/scripts/update-submodules.sh +14 -0
- package/src/devicemanager/adb-manager.ts +164 -0
- package/src/devicemanager/ios-manager.ts +145 -0
- package/src/index.ts +47 -0
- package/src/locators/element-filter.ts +134 -0
- package/src/locators/generate-all-locators.ts +149 -0
- package/src/locators/locator-generation.ts +657 -0
- package/src/locators/logger.ts +11 -0
- package/src/locators/source-parsing.ts +149 -0
- package/src/resources/caps.json +697 -0
- package/src/resources/index.ts +7 -0
- package/src/resources/java/template.ts +83 -0
- package/src/resources/submodules/appium/.github/PULL_REQUEST_TEMPLATE.md +28 -0
- package/src/resources/submodules/appium/CHANGELOG.md +45 -0
- package/src/resources/submodules/appium/CONDUCT.md +48 -0
- package/src/resources/submodules/appium/GOVERNANCE.md +185 -0
- package/src/resources/submodules/appium/IDEAS.md +16 -0
- package/src/resources/submodules/appium/README.md +221 -0
- package/src/resources/submodules/appium/ROADMAP.md +30 -0
- package/src/resources/submodules/appium/SPONSORS.md +3 -0
- package/src/resources/submodules/appium/docs/README.md +6 -0
- package/src/resources/submodules/appium/docs/payout.md +35 -0
- package/src/resources/submodules/appium/packages/appium/CHANGELOG.md +1437 -0
- package/src/resources/submodules/appium/packages/appium/README.md +221 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/index.md +2 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-appiumconf2024.md +45 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-headspin-as-development-partner.md +47 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-lambdatest-as-strategic-partner.md +42 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-sponsorship-program.md +48 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/appium3.md +40 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/hello-world.md +15 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/contributing/index.md +150 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-docs.md +86 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-doctor-checks.md +141 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-drivers.md +860 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-plugins.md +514 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/config-system.md +451 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/index.md +18 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/developing/sensitive.md +49 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/clients.md +132 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/drivers.md +207 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/index.md +45 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/plugins.md +138 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/tools.md +83 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/branch-testing.md +57 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/caching.md +76 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/caps.md +275 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/config.md +98 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/context.md +44 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/event-timing.md +73 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/execute-methods.md +122 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/grid.md +166 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/headers.md +17 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/log-filters.md +86 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/managing-exts.md +87 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/migrating-1-to-2.md +368 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/migrating-2-to-3.md +464 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/security.md +89 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/settings.md +68 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/guides/tls.md +42 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/index.md +59 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/intro/appium.md +202 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/intro/clients.md +127 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/intro/drivers.md +188 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/intro/history.md +196 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/intro/index.md +39 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/index.md +29 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/install.md +50 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/next-steps.md +23 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/requirements.md +29 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-dotnet.md +105 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-java.md +23 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-js.md +75 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-py.md +60 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-rb.md +83 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/uiauto2-driver.md +144 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/appium.md +394 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/bidi.md +70 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/index.md +30 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/jsonwp.md +214 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/mjsonwp.md +151 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/others.md +671 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/plugins.md +289 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/webdriver.md +1114 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/env-vars.md +31 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/extensions.md +239 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/index.md +35 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/server.md +76 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/setup.md +76 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/reference/index.md +25 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/resources/index.md +28 -0
- package/src/resources/submodules/appium/packages/appium/docs/en/sponsors/index.md +64 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/index.md +2 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-appiumconf2024.md +45 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-headspin-as-development-partner.md +47 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-lambdatest-as-strategic-partner.md +41 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-sponsorship-program.md +48 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/appium3.md +40 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/hello-world.md +15 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/contributing/index.md +158 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-docs.md +86 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-doctor-checks.md +141 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-drivers.md +866 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-plugins.md +520 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/config-system.md +468 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/index.md +18 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/developing/sensitive.md +49 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/clients.md +143 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/drivers.md +219 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/index.md +45 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/plugins.md +140 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/tools.md +87 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/branch-testing.md +57 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/caching.md +78 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/caps.md +259 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/config.md +102 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/context.md +44 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/event-timing.md +75 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/execute-methods.md +142 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/grid.md +166 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/headers.md +17 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/log-filters.md +86 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/managing-exts.md +89 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/migrating-1-to-2.md +402 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/migrating-2-to-3.md +458 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/security.md +89 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/settings.md +70 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/guides/tls.md +43 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/index.md +55 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/intro/appium.md +191 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/intro/clients.md +139 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/intro/drivers.md +188 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/intro/history.md +196 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/intro/index.md +39 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/index.md +23 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/install.md +47 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/next-steps.md +19 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/requirements.md +29 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-dotnet.md +107 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-java.md +23 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-js.md +77 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-py.md +63 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-rb.md +85 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/uiauto2-driver.md +148 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/appium.md +395 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/bidi.md +71 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/index.md +30 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/jsonwp.md +215 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/mjsonwp.md +152 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/others.md +672 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/plugins.md +291 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/webdriver.md +1114 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/env-vars.md +31 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/extensions.md +240 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/index.md +35 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/server.md +76 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/setup.md +78 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/reference/index.md +25 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/resources/index.md +28 -0
- package/src/resources/submodules/appium/packages/appium/docs/ja/sponsors/index.md +61 -0
- 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 +2 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-appiumconf2024.md +45 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-headspin-as-development-partner.md +47 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-lambdatest-as-strategic-partner.md +41 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-sponsorship-program.md +48 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/appium3.md +40 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/hello-world.md +15 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/contributing/index.md +132 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-docs.md +86 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-doctor-checks.md +141 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-drivers.md +866 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-plugins.md +520 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/config-system.md +468 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/index.md +18 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/developing/sensitive.md +49 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/clients.md +143 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/drivers.md +219 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/index.md +45 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/plugins.md +140 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/tools.md +87 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/branch-testing.md +57 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/caching.md +78 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/caps.md +284 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/config.md +102 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/context.md +44 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/event-timing.md +75 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/execute-methods.md +142 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/grid.md +166 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/headers.md +17 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/log-filters.md +86 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/managing-exts.md +89 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/migrating-1-to-2.md +410 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/migrating-2-to-3.md +459 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/security.md +89 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/settings.md +70 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/guides/tls.md +43 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/index.md +54 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/intro/appium.md +200 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/intro/clients.md +139 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/intro/drivers.md +188 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/intro/history.md +196 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/intro/index.md +39 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/index.md +23 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/install.md +47 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/next-steps.md +19 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/requirements.md +21 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-dotnet.md +99 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-java.md +20 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-js.md +62 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-py.md +57 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-rb.md +80 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/uiauto2-driver.md +148 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/appium.md +395 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/bidi.md +71 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/index.md +30 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/jsonwp.md +215 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/mjsonwp.md +152 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/others.md +672 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/plugins.md +291 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/webdriver.md +1114 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/env-vars.md +31 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/extensions.md +240 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/index.md +35 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/server.md +76 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/setup.md +78 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/reference/index.md +25 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/resources/index.md +28 -0
- package/src/resources/submodules/appium/packages/appium/docs/zh/sponsors/index.md +61 -0
- package/src/resources/submodules/appium/packages/appium/types/manifest/README.md +30 -0
- package/src/resources/submodules/appium/packages/base-driver/CHANGELOG.md +1131 -0
- package/src/resources/submodules/appium/packages/base-driver/README.md +15 -0
- package/src/resources/submodules/appium/packages/base-driver/docs/mjsonwp/errors.md +82 -0
- package/src/resources/submodules/appium/packages/base-driver/docs/mjsonwp/protocol-methods.md +182 -0
- package/src/resources/submodules/appium/packages/base-driver/static/appium.png +0 -0
- package/src/resources/submodules/appium/packages/base-plugin/CHANGELOG.md +672 -0
- package/src/resources/submodules/appium/packages/base-plugin/README.md +15 -0
- package/src/resources/submodules/appium/packages/docutils/CHANGELOG.md +948 -0
- package/src/resources/submodules/appium/packages/docutils/README.md +27 -0
- package/src/resources/submodules/appium/packages/driver-test-support/CHANGELOG.md +717 -0
- package/src/resources/submodules/appium/packages/driver-test-support/README.md +112 -0
- package/src/resources/submodules/appium/packages/eslint-config-appium-ts/CHANGELOG.md +168 -0
- package/src/resources/submodules/appium/packages/eslint-config-appium-ts/README.md +33 -0
- package/src/resources/submodules/appium/packages/execute-driver-plugin/CHANGELOG.md +603 -0
- package/src/resources/submodules/appium/packages/execute-driver-plugin/README.md +42 -0
- package/src/resources/submodules/appium/packages/fake-driver/CHANGELOG.md +545 -0
- package/src/resources/submodules/appium/packages/fake-driver/README.md +7 -0
- package/src/resources/submodules/appium/packages/fake-driver/lib/screen.png +0 -0
- package/src/resources/submodules/appium/packages/fake-plugin/CHANGELOG.md +683 -0
- package/src/resources/submodules/appium/packages/fake-plugin/README.md +7 -0
- package/src/resources/submodules/appium/packages/images-plugin/CHANGELOG.md +602 -0
- package/src/resources/submodules/appium/packages/images-plugin/README.md +27 -0
- package/src/resources/submodules/appium/packages/images-plugin/docs/find-by-image.md +65 -0
- package/src/resources/submodules/appium/packages/images-plugin/docs/image-comparison.md +203 -0
- 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 +162 -0
- package/src/resources/submodules/appium/packages/logger/README.md +31 -0
- package/src/resources/submodules/appium/packages/opencv/CHANGELOG.md +384 -0
- package/src/resources/submodules/appium/packages/opencv/README.md +68 -0
- 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 +539 -0
- package/src/resources/submodules/appium/packages/plugin-test-support/README.md +49 -0
- package/src/resources/submodules/appium/packages/relaxed-caps-plugin/CHANGELOG.md +154 -0
- package/src/resources/submodules/appium/packages/relaxed-caps-plugin/README.md +35 -0
- package/src/resources/submodules/appium/packages/schema/CHANGELOG.md +271 -0
- package/src/resources/submodules/appium/packages/schema/README.md +50 -0
- package/src/resources/submodules/appium/packages/storage-plugin/CHANGELOG.md +73 -0
- package/src/resources/submodules/appium/packages/storage-plugin/README.md +83 -0
- package/src/resources/submodules/appium/packages/strongbox/CHANGELOG.md +94 -0
- package/src/resources/submodules/appium/packages/strongbox/README.md +96 -0
- package/src/resources/submodules/appium/packages/support/CHANGELOG.md +1054 -0
- package/src/resources/submodules/appium/packages/support/README.md +161 -0
- package/src/resources/submodules/appium/packages/test-support/CHANGELOG.md +712 -0
- package/src/resources/submodules/appium/packages/test-support/README.md +61 -0
- package/src/resources/submodules/appium/packages/tsconfig/CHANGELOG.md +131 -0
- package/src/resources/submodules/appium/packages/tsconfig/README.md +19 -0
- package/src/resources/submodules/appium/packages/types/CHANGELOG.md +793 -0
- package/src/resources/submodules/appium/packages/types/README.md +21 -0
- package/src/resources/submodules/appium/packages/universal-xml-plugin/CHANGELOG.md +435 -0
- package/src/resources/submodules/appium/packages/universal-xml-plugin/README.md +53 -0
- package/src/resources/submodules/appium/renovate/README.md +63 -0
- package/src/resources/submodules/appium-uiautomator2-driver/CHANGELOG.md +1204 -0
- package/src/resources/submodules/appium-uiautomator2-driver/README.md +2077 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/actions.md +72 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/activity-startup.md +47 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/android-appbundle.md +69 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/android-mobile-gestures.md +352 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/bidi.md +50 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/capability-sets.md +136 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/scheduled-actions.md +155 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/uiautomator-uiselector.md +51 -0
- package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/main.md +95 -0
- 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 +4 -0
- package/src/resources/submodules/appium-xcuitest-driver/CHANGELOG.md +2594 -0
- package/src/resources/submodules/appium-xcuitest-driver/README.md +55 -0
- 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 +45 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/endpoints-wda.md +61 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/endpoints.md +98 -0
- 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 +43 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/audio-capture.md +78 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/capability-sets.md +169 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/ci-setup.md +47 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/clipboard.md +47 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/elements-lookup-troubleshooting.md +158 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/file-transfer.md +147 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/gestures.md +52 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/hybrid.md +137 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/input-events.md +67 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/install-certificate.md +19 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/multiple-xcode-versions.md +37 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/parallel-tests.md +39 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/run-prebuilt-wda.md +135 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/run-preinstalled-wda.md +178 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/touch-id.md +33 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/troubleshooting.md +191 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/tvos.md +114 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/wda-custom-server.md +283 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/guides/wda-slowness.md +231 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/index.md +36 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/installation/index.md +137 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/overview.md +19 -0
- 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 +51 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-basic-auto.md +49 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-basic-manual.md +40 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-full-manual.md +50 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-generic-manual.md +49 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/real-device-config.md +100 -0
- 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 +75 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/capabilities.md +165 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/commands.md +490 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/element-attributes.md +27 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/execute-methods.md +2206 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/ios-predicate.md +196 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/locator-strategies.md +19 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/scripts.md +29 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/security-flags.md +22 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/server-args.md +16 -0
- package/src/resources/submodules/appium-xcuitest-driver/docs/reference/settings.md +49 -0
- 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 +5 -0
- package/src/scripts/simple-index-documentation.ts +93 -0
- package/src/scripts/simple-query-documentation.ts +61 -0
- package/src/server.ts +40 -0
- package/src/tests/README.md +83 -0
- package/src/tests/__mocks__/@appium/support.ts +31 -0
- package/src/tests/generate-all-locators.test.ts +179 -0
- package/src/tests/test-setup-wda.ts +247 -0
- package/src/tools/README.md +170 -0
- package/src/tools/answer-appium.ts +75 -0
- package/src/tools/boot-simulator.ts +87 -0
- package/src/tools/create-session.ts +270 -0
- package/src/tools/delete-session.ts +46 -0
- package/src/tools/documentation/index.ts +97 -0
- package/src/tools/documentation/reasoning-rag.ts +434 -0
- package/src/tools/documentation/sentence-transformers-embeddings.ts +142 -0
- package/src/tools/documentation/simple-pdf-indexer.ts +509 -0
- package/src/tools/documentation/uploads/documents.json +1 -0
- package/src/tools/generate-tests.ts +50 -0
- package/src/tools/index.ts +133 -0
- package/src/tools/install-wda.ts +277 -0
- package/src/tools/interactions/activate-app.ts +46 -0
- package/src/tools/interactions/click.ts +47 -0
- package/src/tools/interactions/double-tap.ts +87 -0
- package/src/tools/interactions/find.ts +58 -0
- package/src/tools/interactions/get-text.ts +47 -0
- package/src/tools/interactions/install-app.ts +45 -0
- package/src/tools/interactions/list-apps.ts +65 -0
- package/src/tools/interactions/screenshot.ts +56 -0
- package/src/tools/interactions/set-value.ts +48 -0
- package/src/tools/interactions/terminate-app.ts +47 -0
- package/src/tools/interactions/uninstall-app.ts +47 -0
- package/src/tools/locators.ts +83 -0
- package/src/tools/scroll-to-element.ts +188 -0
- package/src/tools/scroll.ts +97 -0
- package/src/tools/select-device.ts +298 -0
- package/src/tools/select-platform.ts +243 -0
- package/src/tools/session-store.ts +72 -0
- package/src/tools/setup-wda.ts +218 -0
- package/src/types/appium-ios-device.d.ts +8 -0
- package/src/types/appium-xcuitest-driver.d.ts +5 -0
- package/tsconfig.json +23 -0
- package/index.js +0 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Run Prebuilt WebDriverAgentRunner
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
The XCUITest driver runs `xcodebuild` to build and install the WebDriverAgentRunner (WDA) app on the
|
|
6
|
+
target device. Running the command every time could slow down new session creation.
|
|
7
|
+
You can manually run a modified version of this command in order to prebuild the WDA.
|
|
8
|
+
|
|
9
|
+
## Understanding How `xcodebuild` Works
|
|
10
|
+
|
|
11
|
+
By default, `xcodebuild` is run with two commands: `build-for-testing` and `test-without-building`.
|
|
12
|
+
`build-for-testing` builds a test bundle package, whereas `test-without-building` actually runs it.
|
|
13
|
+
|
|
14
|
+
For instance, XCUITest driver issues an `xcodebuild` command like so:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
xcodebuild build-for-testing test-without-building \
|
|
18
|
+
-project WebDriverAgent.xcodeproj \
|
|
19
|
+
-derivedDataPath wda_build \
|
|
20
|
+
-scheme WebDriverAgentRunner \
|
|
21
|
+
-destination "platform=iOS Simulator,name=iPhone 14 Pro" \
|
|
22
|
+
CODE_SIGNING_ALLOWED=NO
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
This translates to `xcodebuild` building `WebDriverAgent.xcodeproj` and running the resulting
|
|
26
|
+
package on the specified device. The built package will be located in the `wda_build` path.
|
|
27
|
+
|
|
28
|
+
The command can be split into `build-for-testing` and `test-without-building` parts as follows:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
xcodebuild build-for-testing \
|
|
32
|
+
-project WebDriverAgent.xcodeproj \
|
|
33
|
+
-derivedDataPath wda_build \
|
|
34
|
+
-scheme WebDriverAgentRunner \
|
|
35
|
+
-destination "platform=iOS Simulator,name=iPhone 14 Pro" \
|
|
36
|
+
CODE_SIGNING_ALLOWED=NO
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
xcodebuild test-without-building \
|
|
41
|
+
-xctestrun wda_build/Build/Products/WebDriverAgentRunner_iphonesimulator16.2-arm64.xctestrun \
|
|
42
|
+
-destination "platform=iOS Simulator,name=iPhone 14 Pro"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
* The `build-for-testing` command generates two files: an `.app` package and an `.xctestrun` file, e.g.:
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
wda_build/Build/Products/Debug-iphonesimulator/WebDriverAgentRunner-Runner.app
|
|
49
|
+
wda_build/Build/Products/WebDriverAgentRunner_iphonesimulator16.2-arm64.xctestrun
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The `.xctestrun` file name depends on the `-destination` preference. The file contains metadata
|
|
53
|
+
about the package (the `DependentProductPaths` key).
|
|
54
|
+
|
|
55
|
+
* The `test-without-building` command starts the WDA application for testing by referencing the
|
|
56
|
+
provided `.xctestrun` file. Once this is done, `http://localhost:8100` will be able to receive
|
|
57
|
+
commands for the target device.
|
|
58
|
+
|
|
59
|
+
## Preparation performance improvement ideas
|
|
60
|
+
|
|
61
|
+
### Download Prebuilt WDA and run them with `appium:prebuiltWDAPath` and `appium:usePreinstalledWDA`
|
|
62
|
+
|
|
63
|
+
This approach allows the XCUITest driver to start WDA without running `xcodebuild` by using prebuilt WDA packages.
|
|
64
|
+
We recommend this method if you don't need to modify the WDA source code.
|
|
65
|
+
|
|
66
|
+
[The Appium WebDriverAgent GitHub page](https://github.com/appium/WebDriverAgent/releases) provides
|
|
67
|
+
downloads for WebDriverAgent packages for real devices and simulators.
|
|
68
|
+
WebDriverAgent packages for real devices do not have embedded XCTest frameworks so that
|
|
69
|
+
they can run on iOS 17+ devices. Please read [Run Preinstalled WebDriverAgentRunner](./run-preinstalled-wda.md)
|
|
70
|
+
for more details about running on real devices. Understanding app signing is also important when working with real devices.
|
|
71
|
+
Simulators need everything, so WDA package sizes for simulators are greater than for real devices.
|
|
72
|
+
The [Release](https://github.com/appium/appium-xcuitest-driver/actions/workflows/publish.js.yml) and
|
|
73
|
+
[Building WebDriverAgent](https://github.com/appium/WebDriverAgent/actions/workflows/wda-package.yml)
|
|
74
|
+
workflows may help with validating the build script.
|
|
75
|
+
|
|
76
|
+
[Run Preinstalled WebDriverAgentRunner](./run-preinstalled-wda.md) provides `appium:prebuiltWDAPath`
|
|
77
|
+
and `appium:usePreinstalledWDA` capabilities.
|
|
78
|
+
These capabilities allow the XCUITest driver to install prebuilt WDA specified with
|
|
79
|
+
`appium:prebuiltWDAPath` and start it **without** running `xcodebuild`.
|
|
80
|
+
|
|
81
|
+
The `download-wda-sim` command helps to download the proper version of WDA for your XCUITest driver version
|
|
82
|
+
for simulator use.
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
appium driver run xcuitest download-wda-sim --outdir=/path/to/target/directory
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Then, starting a new session with capabilities below:
|
|
89
|
+
|
|
90
|
+
```json
|
|
91
|
+
{
|
|
92
|
+
"appium:usePreinstalledWDA": true,
|
|
93
|
+
"appium:prebuiltWDAPath": "/path/to/target/directory/WebDriverAgentRunner-Runner.app"
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
The new session starts without an `xcodebuild` run.
|
|
98
|
+
|
|
99
|
+
### Capabilities for Prebuilt WDA with `appium:useXctestrunFile`, `appium:usePrebuiltWDA` or `appium:prebuildWDA`
|
|
100
|
+
|
|
101
|
+
The XCUITest driver provides two capabilities that allow skipping the `build-for-testing` command,
|
|
102
|
+
and executing only the `test-without-building` command: __`appium:useXctestrunFile`__ and
|
|
103
|
+
__`appium:bootstrapPath`__ (see [Capabilities](../reference/capabilities.md#webdriveragent)).
|
|
104
|
+
|
|
105
|
+
!!! note
|
|
106
|
+
|
|
107
|
+
These capabilities expect that the WDA files are already prebuild, so make sure to first run
|
|
108
|
+
`xcodebuild` to create the files.
|
|
109
|
+
|
|
110
|
+
This method can be used on both real devices and simulators, but real devices requires proper
|
|
111
|
+
signing as described in [Run Preinstalled WebDriverAgentRunner](./run-preinstalled-wda.md).
|
|
112
|
+
|
|
113
|
+
The capabilities can be used as follows:
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"platformName": "ios",
|
|
118
|
+
"appium:automationName": "xcuitest",
|
|
119
|
+
"appium:platformVersion": "18.4",
|
|
120
|
+
"appium:deviceName": "iPhone 16",
|
|
121
|
+
"appium:useXctestrunFile": true,
|
|
122
|
+
"appium:bootstrapPath": "/path/to/wda_build/Build/Products"
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Not all combinations have been tested, but the target device can probably be anything.
|
|
127
|
+
|
|
128
|
+
The same thing can be achieved with the __`appium:derivedDataPath`__ and __`appium:usePrebuiltWDA`__
|
|
129
|
+
capabilities, but this may fail if `xcodebuild` cannot find or handle the `.xctestrun` file
|
|
130
|
+
properly. The stability depends on Xcode.
|
|
131
|
+
|
|
132
|
+
__`appium:prebuildWDA`__ lets the XCUITest driver build the WDA before running it, then the session
|
|
133
|
+
will be handled with `appium:usePrebuiltWDA`.
|
|
134
|
+
It might have additional building steps than with `appium:derivedDataPath` and `appium:usePrebuiltWDA`
|
|
135
|
+
combination, but it could help `appium:usePrebuiltWDA` to not manage the WDA project.
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Run Preinstalled WebDriverAgentRunner
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
The XCUITest driver can be configured to launch an already-installed `WebDriverAgentRunner-Runner`
|
|
6
|
+
application (WDA) on a real device and a simulator. This allows you to start a session without the `xcodebuild`
|
|
7
|
+
command execution, improving the session startup performance.
|
|
8
|
+
|
|
9
|
+
!!! warning
|
|
10
|
+
|
|
11
|
+
iOS/tvOS 17+ specific:
|
|
12
|
+
|
|
13
|
+
This method currently works over `devicectl` for iOS 17+ with Xcode 15+ environment since XCUITest driver v7.5.0.
|
|
14
|
+
This may not work for tvOS 17+.
|
|
15
|
+
iOS/tvOS 16 and lower ones work over [appium-ios-device](https://github.com/appium/appium-ios-device) directly.
|
|
16
|
+
|
|
17
|
+
## Capabilities
|
|
18
|
+
|
|
19
|
+
- Required
|
|
20
|
+
- [`appium:usePreinstalledWDA`](../reference/capabilities.md#webdriveragent)
|
|
21
|
+
- Optional
|
|
22
|
+
- [`appium:updatedWDABundleId`](../reference/capabilities.md#webdriveragent)
|
|
23
|
+
- [`appium:updatedWDABundleIdSuffix`](../reference/capabilities.md#webdriveragent)
|
|
24
|
+
- Since XCUITest driver v7.6.0
|
|
25
|
+
- [`appium:prebuiltWDAPath`](../reference/capabilities.md#webdriveragent)
|
|
26
|
+
|
|
27
|
+
## Install WebDriverAgent
|
|
28
|
+
|
|
29
|
+
### Using Xcode
|
|
30
|
+
|
|
31
|
+
Running a test for the WDA package in Xcode is the easiest way to prepare the device environment:
|
|
32
|
+
|
|
33
|
+
1. Open WebDriverAgent project in Xcode
|
|
34
|
+
- You can run `appium driver run xcuitest open-wda` if using XCUITest driver 4.13 or newer
|
|
35
|
+
2. Select the _WebDriverAgentRunner_ scheme
|
|
36
|
+
3. Select the scheme as _Product -> Scheme -> WebDriverAgentRunner_ (or _WebDriverAgentRunner\_tvOS_ for tvOS)
|
|
37
|
+
4. Select your device in _Product -> Destination_
|
|
38
|
+
5. Select _Product -> Test_ to build and install the WDA app
|
|
39
|
+
|
|
40
|
+
If using a real device, you may need to change your bundle ID. Please check the
|
|
41
|
+
[Full Manual Provisioning Profile setup](../preparation/prov-profile-full-manual.md) for details.
|
|
42
|
+
|
|
43
|
+
### Using 3rd Party Tools
|
|
44
|
+
|
|
45
|
+
Some 3rd party tools such as [pymobiledevice3](https://github.com/doronz88/pymobiledevice3),
|
|
46
|
+
[ios-deploy](https://github.com/ios-control/ios-deploy), [go-ios](https://github.com/danielpaulus/go-ios) and
|
|
47
|
+
[tidevice](https://github.com/alibaba/taobao-iphone-device), [ios-app-signer](https://github.com/DanTheMan827/ios-app-signer)
|
|
48
|
+
can install the WebDriverAgent package.
|
|
49
|
+
|
|
50
|
+
Some tools let you set an arbitrary bundle identifier (`CFBundleIdentifier` for the `Info.plist`) and sign it with the bundle identifier.
|
|
51
|
+
It may not have `.xctrunner` as the bundle identifier.
|
|
52
|
+
XCUITest driver automatically adds the `.xctrunner` suffix to the provided bundle identifier unless a different suffix is specified by the `appium:updatedWDABundleIdSuffix` capability.
|
|
53
|
+
If the value is an empty string, then no suffix will be added to the provided bundle identifier.
|
|
54
|
+
|
|
55
|
+
The WDA app package (`WebDriverAgentRunner-Runner.app`) can be generated in the _derivedDataPath_
|
|
56
|
+
directory, as explained in [Manual Configuration for a Generic Device](../preparation/prov-profile-generic-manual.md).
|
|
57
|
+
The app can then be installed without `xcodebuild` using the 3rd party tools.
|
|
58
|
+
|
|
59
|
+
### Additional requirement for iOS 17+/tvOS17+
|
|
60
|
+
|
|
61
|
+
To launch the WebDriverAgentRunner package with `xcrun devicectl device process launch` for real devices it should not have `Frameworks/XC**` files.
|
|
62
|
+
|
|
63
|
+
For example, after building the WebDriverAgent with Xcode with proper sign, it generates `/Users/<user>/Library/Developer/Xcode/DerivedData/WebDriverAgent-ezumztihszjoxgacuhatrhxoklbh/Build/Products/Debug-appletvos/WebDriverAgentRunner-Runner.app`.
|
|
64
|
+
Then you can remove `Frameworks/XC**` in `WebDriverAgentRunner-Runner.app` like `rm Frameworks/WebDriverAgentRunner-Runner.app/XC**`.
|
|
65
|
+
|
|
66
|
+
Configuring `appium:prebuiltWDAPath` to the `/Users/<user>/Library/Developer/Xcode/DerivedData/WebDriverAgent-ezumztihszjoxgacuhatrhxoklbh/Build/Products/Debug-appletvos/WebDriverAgentRunner-Runner.app` would install the `WebDriverAgentRunner-Runner.app`, which has no `Frameworks/XC**` to the target device and launch it with `devicectl` command as part of `appium:usePreinstalledWDA` functionality.
|
|
67
|
+
|
|
68
|
+
!!! note
|
|
69
|
+
|
|
70
|
+
You can also remove `Frameworks/Testing.framework` and `Frameworks/libXCTestSwiftSupport.dylib` to reduce the package size
|
|
71
|
+
because WebDriverAgent doesn't need both. Then, the total size of the WebDriverAgent runner app can be 3MB or less.
|
|
72
|
+
`Testing.framework` is almost 6MB and `libXCTestSwiftSupport.dylib` is 2.6MB with Xcode 16 build.
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
## Launch the Session
|
|
76
|
+
|
|
77
|
+
After installing the `WebDriverAgentRunner-Runner` application, you can start the Appium server
|
|
78
|
+
and launch an XCUITest driver session with the specified capabilities:
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
appium
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
```ruby
|
|
85
|
+
# Ruby
|
|
86
|
+
capabilities: {
|
|
87
|
+
"platformName": "ios",
|
|
88
|
+
"appium:automationName": "xcuitest",
|
|
89
|
+
"appium:udid": "<udid>",
|
|
90
|
+
"appium:usePreinstalledWDA": true,
|
|
91
|
+
"appium:updatedWDABundleId": "com.appium.WebDriverAgentRunner"
|
|
92
|
+
}
|
|
93
|
+
@core = Appium::Core.for capabilities: capabilities
|
|
94
|
+
driver = @core.start_driver
|
|
95
|
+
# do something
|
|
96
|
+
driver.quit
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
If the `<udid>` device has a WebDriverAgent package with `com.appium.WebDriverAgentRunner.xctrunner`
|
|
100
|
+
bundle ID, the session will launch the WebDriverAgent process without `xcodebuild`.
|
|
101
|
+
|
|
102
|
+
!!! note
|
|
103
|
+
|
|
104
|
+
Please ensure that the WDA application is launchable before starting an XCUITest driver session.
|
|
105
|
+
For example, check whether the provisioning profile is trusted.
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
!!! note
|
|
109
|
+
|
|
110
|
+
Please make sure the device under test has the developer disk image mounted.
|
|
111
|
+
This is necessary to start an XCTest session and load the required XCTest libraries from the device.
|
|
112
|
+
For example, starting Xcode after connecting the device to the host machine will mount the developer disk image automatically.
|
|
113
|
+
Using third-party tools can also help to mount the developer disk image service.
|
|
114
|
+
Please check the documentation for each tool to understand how to mount the developer disk image.
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
```ruby
|
|
118
|
+
# Ruby
|
|
119
|
+
capabilities: {
|
|
120
|
+
"platformName": "ios",
|
|
121
|
+
"appium:automationName": "xcuitest",
|
|
122
|
+
"appium:udid": "<udid>",
|
|
123
|
+
"appium:usePreinstalledWDA": true,
|
|
124
|
+
"appium:updatedWDABundleId": "io.appium.wda"
|
|
125
|
+
"appium:updatedWDABundleIdSuffix": ""
|
|
126
|
+
}
|
|
127
|
+
@core = Appium::Core.for capabilities: capabilities
|
|
128
|
+
driver = @core.start_driver
|
|
129
|
+
# do something
|
|
130
|
+
driver.quit
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
If the `<udid>` device has a WebDriverAgent package with `io.appium.wda` bundle ID (it does not have `.xctrunner`),
|
|
134
|
+
the session will launch the WebDriverAgent process without `xcodebuild`.
|
|
135
|
+
|
|
136
|
+
## Set `appium:prebuiltWDAPath`
|
|
137
|
+
|
|
138
|
+
If the `appium:prebuiltWDAPath` capability is provided with a `WebDriverAgentRunner-Runner.app` test bundle,
|
|
139
|
+
the XCUITest driver will install the application and launch it every test session.
|
|
140
|
+
Test bundles cannot be versioned using `CFBundleVersion` as vanilla applications do usually,
|
|
141
|
+
which is why it is necessary to (re)install them for every test session.
|
|
142
|
+
The test bundle should be signed properly for real devices.
|
|
143
|
+
|
|
144
|
+
Usually you can find the WDA application bundle at the below location if you use Xcode to build it.
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
~/Library/Developer/Xcode/DerivedData/WebDriverAgent-<random string>/Build/Products/Debug-iphoneos/WebDriverAgentRunner-Runner.app
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
You can then set your Appium capabilities as follows:
|
|
151
|
+
|
|
152
|
+
```ruby
|
|
153
|
+
# Ruby
|
|
154
|
+
capabilities: {
|
|
155
|
+
"platformName": "ios",
|
|
156
|
+
"appium:automationName": "xcuitest",
|
|
157
|
+
"appium:udid": "<udid>",
|
|
158
|
+
"appium:usePreinstalledWDA": true,
|
|
159
|
+
"appium:prebuiltWDAPath": "/path/to/Library/Developer/Xcode/DerivedData/WebDriverAgent-<random string>/Build/Products/Debug-iphoneos/WebDriverAgentRunner-Runner.app"
|
|
160
|
+
}
|
|
161
|
+
@core = Appium::Core.for capabilities: capabilities
|
|
162
|
+
driver = @core.start_driver
|
|
163
|
+
# do something
|
|
164
|
+
driver.quit
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
!!! note
|
|
168
|
+
|
|
169
|
+
As of iOS 17, the testmanagerd service name has changed from `com.apple.testmanagerd` to
|
|
170
|
+
`com.apple.dt.testmanagerd.runner`. It causes an unexpected WDA process crash with embedded
|
|
171
|
+
XCTest frameworks while running a single WebDriverAgent package on various OS environments
|
|
172
|
+
without `xcodebuild`.
|
|
173
|
+
|
|
174
|
+
Since WDA v5.10.0, the module can refer to the device's local XCTest frameworks. It lets the
|
|
175
|
+
Appium/WebDriverAgent package use proper dependencies for the device with a single prebuilt
|
|
176
|
+
WebDriverAgent package. To set this up, you should remove the package internal frameworks from
|
|
177
|
+
`WebDriverAgentRunner-Runner.app` with `rm -rf WebDriverAgentRunner-Runner.app/Frameworks/XC*.framework`.
|
|
178
|
+
The WDA package itself is available from <https://github.com/appium/WebDriverAgent>.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
hide:
|
|
3
|
+
- toc
|
|
4
|
+
|
|
5
|
+
title: Touch ID
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
The XCUITest driver has the capability to simulate [Touch ID](https://support.apple.com/en-ca/HT201371).
|
|
9
|
+
|
|
10
|
+
!!! note
|
|
11
|
+
|
|
12
|
+
This functionality is only supported on simulators.
|
|
13
|
+
|
|
14
|
+
## Configuration
|
|
15
|
+
|
|
16
|
+
To use Touch ID, the application that Appium launches from (Terminal, iTerm, etc.) must be added to
|
|
17
|
+
the accessibility preferences on your Mac. Navigate to _System Preferences -> Privacy & Security ->
|
|
18
|
+
Accessibility_ and under _Allow the apps below to control your computer_ add the application.
|
|
19
|
+
|
|
20
|
+
Why this is needed: The only way Appium can enable enrollment and toggling of Touch ID is to use
|
|
21
|
+
system-level accessibility APIs to simulate mouse clicks on the simulator menus via AppleScript.
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
* Set the capability `appium:allowTouchIdEnroll` to `true`.
|
|
26
|
+
* When the Simulator starts, Touch ID enrollment will be enabled by default
|
|
27
|
+
* You can toggle Touch ID enrollment by calling the
|
|
28
|
+
[`mobile: enrollBiometric`](../reference/execute-methods.md#mobile-enrollbiometric) extension
|
|
29
|
+
|
|
30
|
+
!!! note
|
|
31
|
+
|
|
32
|
+
Remember that not all iOS devices have Touch ID, so your tests should handle cases where
|
|
33
|
+
Touch ID is not supported.
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Troubleshooting
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## Known Problems
|
|
6
|
+
|
|
7
|
+
* Real devices with iOS/iPadOS 15+ show an overlay with the text `Automation Running Hold both
|
|
8
|
+
volume buttons to stop` while WebDriverAgent is running. This is a known limitation of the XCTest
|
|
9
|
+
framework. Note that screenshotting functionality is not affected (i.e. the overlay is not visible
|
|
10
|
+
on taken screenshots).
|
|
11
|
+
* Real devices with iOS/iPadOS 15+ [require passcode or Touch ID](https://github.com/appium/appium/issues/15898#issuecomment-927340411)
|
|
12
|
+
when starting a new session. A workaround for this is to disable passcode/Touch ID on the device.
|
|
13
|
+
* After many failures on a real device, it could transition to a state where connections are no
|
|
14
|
+
longer being accepted. Rebooting the device can help remedy this problem. Please read
|
|
15
|
+
[this issue](https://github.com/facebook/WebDriverAgent/issues/507) for more details.
|
|
16
|
+
* `shake` is implemented via AppleScript and works only on Simulator due to lack of support from Apple
|
|
17
|
+
|
|
18
|
+
## Interact with dialogs managed by `com.apple.springboard`
|
|
19
|
+
|
|
20
|
+
System dialogs, such as permission dialogs, might not be interactable directly when the active application is not `com.apple.springboard`.
|
|
21
|
+
Despite a similar look, dialogs belonging to the active session application (e.g. initially passed as `appium:app` or `appium:bundleId` capability value)
|
|
22
|
+
do not require such adjustment.
|
|
23
|
+
|
|
24
|
+
XCUITest driver offers a couple of approaches to handle them:
|
|
25
|
+
|
|
26
|
+
- Set the [respectSystemAlerts setting](../reference/settings.md) to `true`. It enforces the active application
|
|
27
|
+
detection algorithm to check a presence of system alerts and to return the Springboard app if this check succeeds.
|
|
28
|
+
Such approach emulates the driver behavior prior to version 6 of XCUITest driver, although it might slightly
|
|
29
|
+
slow down your scripts because each attempt to detect an active app would require to also query for alerts
|
|
30
|
+
presence.
|
|
31
|
+
- Start a session without `appium:app` nor `appium:bundleId`. Then XCUITest driver attempts to get the current active application. This requires you to start an application after a new session request with [`mobile: installApp`](../reference/execute-methods.md#mobile-installapp) to install an app if needed and [`mobile: launchApp`](../reference/execute-methods.md#mobile-launchapp)/[`mobile: activateApp`](../reference/execute-methods.md#mobile-activateapp), but it could automatically change the active application with `com.apple.springboard` or activate an application at the foreground. (Note that the automatic app detection might be lengthy, thus each action could take more time.)
|
|
32
|
+
- When a permission alert exists at the foreground, it could select the `com.apple.springboard`
|
|
33
|
+
- When another application is at the foreground by accepting/denying the system alert, or [`mobile: activateApp`](../reference/execute-methods.md#mobile-activateapp), the application would be selected as an active application.
|
|
34
|
+
- [`mobile: alert`](../reference/execute-methods.md#mobile-alert)
|
|
35
|
+
- `defaultActiveApplication` setting in [Settings](../reference/settings.md).
|
|
36
|
+
- e.g. With the [Appium Ruby client](https://github.com/appium/ruby_lib_core)
|
|
37
|
+
```ruby
|
|
38
|
+
# Interacting with the test target
|
|
39
|
+
driver.settings.update({defaultActiveApplication: "com.apple.springboard"})
|
|
40
|
+
# to accept the alert
|
|
41
|
+
driver.find_element("accessibility_id", "Allow Once").click
|
|
42
|
+
driver.settings.update({defaultActiveApplication: "auto"})
|
|
43
|
+
# keep interacting with the test target
|
|
44
|
+
```
|
|
45
|
+
- Enable `appium:autoAcceptAlerts`/`appium:autoDismissAlerts`, or interact with alerts via [User Prompts](https://www.w3.org/TR/webdriver1/#user-prompts) in WebDriver endpoints
|
|
46
|
+
- e.g. `driver.switch_to.alert.accept` with the [Appium Ruby client](https://github.com/appium/ruby_lib_core)
|
|
47
|
+
- It might be necessary to coordinate element selection via `acceptAlertButtonSelector`/`dismissAlertButtonSelector` settings in [Settings](../reference/settings.md)
|
|
48
|
+
- Activate `com.apple.springboard` with [`mobile: activateApp`](../reference/execute-methods.md#mobile-activateapp) before interacting with dialogs
|
|
49
|
+
|
|
50
|
+
[`mobile: activeAppInfo`](../reference/execute-methods.md#mobile-activateappinfo) helps to understand what application (bundleId) is considered as active for the XCUITest driver.
|
|
51
|
+
|
|
52
|
+
## Interact with dialogs managed by `com.apple.ContactsUI.LimitedAccessPromptView`
|
|
53
|
+
|
|
54
|
+
iOS 18 introduced a new process named `com.apple.ContactsUI.LimitedAccessPromptView`. See [this issue](https://github.com/appium/appium/issues/20591) for more details.
|
|
55
|
+
As of XCUITest driver v7.26.4, the only workaround to interact with views available through the process is the below method:
|
|
56
|
+
|
|
57
|
+
- `defaultActiveApplication` setting in [Settings](../reference/settings.md).
|
|
58
|
+
- e.g. With the [Appium Ruby client](https://github.com/appium/ruby_lib_core)
|
|
59
|
+
```ruby
|
|
60
|
+
# Interacting with the test target
|
|
61
|
+
driver.settings.update({defaultActiveApplication: "com.apple.ContactsUI.LimitedAccessPromptView"})
|
|
62
|
+
# to accept the alert
|
|
63
|
+
driver.find_element("accessibility_id", "Select Contacts").click
|
|
64
|
+
driver.settings.update({defaultActiveApplication: "auto"})
|
|
65
|
+
# keep interacting with the test target
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
The `com.apple.ContactsUI.LimitedAccessPromptView` process can get elements available through `com.apple.springboard`, such as several system permission dialogs.
|
|
69
|
+
iOS 18+ devices may be possible to use `com.apple.ContactsUI.LimitedAccessPromptView` to interact with elements managed either by `com.apple.ContactsUI.LimitedAccessPromptView` or `com.apple.springboard`.
|
|
70
|
+
|
|
71
|
+
## Leftover Application Data on Real Devices
|
|
72
|
+
|
|
73
|
+
There might be a situation where application data is present on the real device, even if the
|
|
74
|
+
application itself is not installed. This could happen if:
|
|
75
|
+
|
|
76
|
+
- The app is in an [offloaded state](https://discussions.apple.com/thread/254887240)
|
|
77
|
+
- The application state is cached
|
|
78
|
+
- There was an unexpected failure while installing the app. An example of such failure is the
|
|
79
|
+
`ApplicationVerificationFailed` which happens while installing an app signed with an invalid provisioning profile.
|
|
80
|
+
|
|
81
|
+
In the above cases, the application identifier will not be listed in the output of
|
|
82
|
+
[`mobile: listApps`](../reference/execute-methods.md#mobile-listapps), and it will not be detected
|
|
83
|
+
by [`mobile: isAppInstalled`](../reference/execute-methods.md#mobile-isappinstalled). Setting
|
|
84
|
+
`appium:fullReset` or `appium:enforceAppInstall` capabilities to `true` also will not help clear this data.
|
|
85
|
+
|
|
86
|
+
The only way to completely get rid of the cached application data is to call the
|
|
87
|
+
[`mobile: removeApp`](../reference/execute-methods.md#mobile-removeapp) command with the appropriate
|
|
88
|
+
bundle identifier.
|
|
89
|
+
|
|
90
|
+
The driver does automatically try to resolve application installs that failed because of the
|
|
91
|
+
`MismatchedApplicationIdentifierEntitlement` error. However, in cases when the previously installed
|
|
92
|
+
application's provisioning profile is different from what currently the driver is trying to
|
|
93
|
+
install, and if you explicitly set the driver to _not_ perform application uninstall, then consider
|
|
94
|
+
calling [`mobile: removeApp`](../reference/execute-methods.md#mobile-removeapp) before the
|
|
95
|
+
`MismatchedApplicationIdentifierEntitlement` error occurs. Example steps can be as follows:
|
|
96
|
+
|
|
97
|
+
1. Start a session without `appium:app` and `appium:bundleId` capabilities
|
|
98
|
+
2. Call [`mobile: removeApp`](../reference/execute-methods.md#mobile-removeapp) for the target
|
|
99
|
+
application's bundle id
|
|
100
|
+
3. Install the test target with [`mobile: installApp`](../reference/execute-methods.md#mobile-installapp)
|
|
101
|
+
4. Launch the application with [`mobile: launchApp`](../reference/execute-methods.md#mobile-launchapp)
|
|
102
|
+
or [`mobile: activateApp`](../reference/execute-methods.md#mobile-activateapp)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
!!! note
|
|
106
|
+
|
|
107
|
+
We observed that iOS 18+ environments can retain the permission preference even after reinstallation.
|
|
108
|
+
Please refer to [this issue](https://github.com/appium/appium-xcuitest-driver/issues/2572) for more information about this behavior.
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
## Weird State
|
|
112
|
+
|
|
113
|
+
### Real Device Stops Responding
|
|
114
|
+
|
|
115
|
+
Running tests on a real device is particularly flakey. If things stop responding, the only recourse
|
|
116
|
+
is, most often, to restart the device. Logs in the form of the following _may_ start to occur:
|
|
117
|
+
|
|
118
|
+
```shell
|
|
119
|
+
info JSONWP Proxy Proxying [POST /session] to [POST http://10.35.4.122:8100/session] with body: {"desiredCapabilities":{"ap..."
|
|
120
|
+
dbug WebDriverAgent Device: Jul 26 13:20:42 iamPhone XCTRunner[240] <Warning>: Listening on USB
|
|
121
|
+
dbug WebDriverAgent Device: Jul 26 13:21:42 iamPhone XCTRunner[240] <Warning>: Enqueue Failure: UI Testing Failure - Unable to update application state promptly. <unknown> 0 1
|
|
122
|
+
dbug WebDriverAgent Device: Jul 26 13:21:57 iamPhone XCTRunner[240] <Warning>: Enqueue Failure: UI Testing Failure - Failed to get screenshot within 15s <unknown> 0 1
|
|
123
|
+
dbug WebDriverAgent Device: Jul 26 13:22:57 iamPhone XCTRunner[240] <Warning>: Enqueue Failure: UI Testing Failure - App state of (null) is still unknown <unknown> 0 1
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Command Takes 60+ Seconds
|
|
127
|
+
|
|
128
|
+
Sometimes it is possible to encounter slowdowns for an additional 60 seconds for a command that
|
|
129
|
+
usually should not take long. This may be caused by a crash in the `testmanagerd` process on the
|
|
130
|
+
device under test. In such a case, the OS tries to restore the process, then wait for the resurrected
|
|
131
|
+
daemon to connect to the target process, which causes the aforementioned delay.
|
|
132
|
+
|
|
133
|
+
This can be fixed by terminating the target application process. For example, if this behavior
|
|
134
|
+
occurs while calling `mobile: queryAppState`, you can terminate the application once, or restart the
|
|
135
|
+
device entirely. Please check [this pull request](https://github.com/appium/WebDriverAgent/pull/774)
|
|
136
|
+
for more details.
|
|
137
|
+
|
|
138
|
+
## Real Device Security Settings
|
|
139
|
+
|
|
140
|
+
On some systems, especially CI ones, where tests are executed by command line agents, macOS
|
|
141
|
+
Accessibility restrictions result in the WebDriverAgent process being unable to retrieve the
|
|
142
|
+
development keys from the system keychain. This usually manifests by `xcodebuild` returning error
|
|
143
|
+
code `65`. One workaround for this is to use a private key that is not stored on the system
|
|
144
|
+
keychain. See [this issue](https://github.com/appium/appium/issues/6955) and
|
|
145
|
+
[this Stack Exchange post](http://stackoverflow.com/questions/16550594/jenkins-xcode-build-works-codesign-fails).
|
|
146
|
+
|
|
147
|
+
To export the key, use
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
security create-keychain -p [keychain_password] MyKeychain.keychain
|
|
151
|
+
security import MyPrivateKey.p12 -t agg -k MyKeychain.keychain -P [p12_Password] -A
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
where `MyPrivateKey.p12` is the private development key exported from the system keychain.
|
|
155
|
+
|
|
156
|
+
You can then use the [`appium:keychainPath`](../reference/capabilities.md#webdriveragent) and
|
|
157
|
+
[`appium:keychainPassword`](../reference/capabilities.md#webdriveragent) capabilities to pass this
|
|
158
|
+
keychain to WebDriverAgent.
|
|
159
|
+
|
|
160
|
+
## Simulator Resetting
|
|
161
|
+
|
|
162
|
+
When testing on simulators, the driver tries to leave the simulator state as it found it:
|
|
163
|
+
|
|
164
|
+
* If no `udid` is provided, the driver will create a new iOS simulator, run tests on it, and then
|
|
165
|
+
delete the simulator
|
|
166
|
+
* If a specific `udid` is provided for a simulator that _is not_ running, the driver will boot the
|
|
167
|
+
specified simulator, run tests on it, and then shut the simulator down
|
|
168
|
+
* If a specific `udid` is provided for a simulator that _is_ running, the driver will connect to the
|
|
169
|
+
existing simulator, run tests, and then leave the simulator running
|
|
170
|
+
|
|
171
|
+
You can use the `appium:noReset` capability to adjust this behavior: setting it to `true` will
|
|
172
|
+
leave the simulator running at the end of a test session.
|
|
173
|
+
|
|
174
|
+
## Caching Issues During Build
|
|
175
|
+
|
|
176
|
+
Testing on iOS generates files that can sometimes get large. These include logs, temporary files,
|
|
177
|
+
and derived data from Xcode runs, all of which are safe to delete if any issues arise. The files are
|
|
178
|
+
usually found in the following locations, should they need to be deleted:
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
$HOME/Library/Logs/CoreSimulator/*
|
|
182
|
+
$HOME/Library/Developer/Xcode/DerivedData/*
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## Frequent `Disconnecting from remote debugger` error in iOS 17
|
|
186
|
+
|
|
187
|
+
Please try out iOS 17.6 or a newer version which includes [a possible fix by Apple](https://developer.apple.com/documentation/safari-release-notes/safari-17_6-release-notes#Web-Inspector).
|
|
188
|
+
|
|
189
|
+
Frequent Web Inspector debugger disconnection started since iOS 17.2 (or iOS 17.0), that eventually caused `Disconnecting from remote debugger` error.
|
|
190
|
+
It could be improved since iOS 17.6.
|
|
191
|
+
Please check [the corresponding pull request](https://github.com/appium/appium-xcuitest-driver/pull/2334) for more details.
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: tvOS Support
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
The XCUITest driver supports automation of the tvOS platform.
|
|
6
|
+
|
|
7
|
+
<img src="https://user-images.githubusercontent.com/5511591/55161297-876e0200-51a8-11e9-8313-8d9f15a0db9d.gif" width=50%>
|
|
8
|
+
|
|
9
|
+
!!! warning
|
|
10
|
+
|
|
11
|
+
Apple TV 4K is not supported. This is because [`appium-ios-device`](https://github.com/appium/appium-ios-device),
|
|
12
|
+
which is used to support low-level communication with devices, only supports devices connected via USB.
|
|
13
|
+
|
|
14
|
+
## Setup
|
|
15
|
+
|
|
16
|
+
You can run tests for tvOS by setting the `platformName` capability to `tvOS`:
|
|
17
|
+
|
|
18
|
+
```json
|
|
19
|
+
{
|
|
20
|
+
"platformName": "tvOS", // here
|
|
21
|
+
"appium:automationName": "XCUITest",
|
|
22
|
+
"appium:platformVersion": "12.2",
|
|
23
|
+
"appium:deviceName": "Apple TV",
|
|
24
|
+
...
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
!!! note
|
|
29
|
+
|
|
30
|
+
If using a simulator, make sure the tvOS simulator exists in your simulator list. You can run
|
|
31
|
+
`xcrun simctl list | grep "com.apple.CoreSimulator.SimRuntime.tvOS"` to verify this.
|
|
32
|
+
|
|
33
|
+
## Basic Actions
|
|
34
|
+
|
|
35
|
+
tvOS provides [remote controller](https://developer.apple.com/design/human-interface-guidelines/tvos/remote-and-controllers/remote/)
|
|
36
|
+
based actions. The XCUITest driver implements these actions using the
|
|
37
|
+
[`mobile: pressButton`](../reference/execute-methods.md#mobile-pressbutton) extension, with the
|
|
38
|
+
following button values: `menu`, `up/down/left/right`, `home`, `playpause` and `select`.
|
|
39
|
+
|
|
40
|
+
All actions are performed on the _focused_ element (which has the `focus` attribute set). The
|
|
41
|
+
focused element is automatically changed after using `mobile: pressButton`.
|
|
42
|
+
|
|
43
|
+
It is also possible to use the standard `findElement` and `click` methods. The XCUITest driver will
|
|
44
|
+
automatically calculate the necessary sequence of `up/down/left/right` and `select` button presses,
|
|
45
|
+
so you should not care about which keys should be pressed to reach an arbitrary element every time.
|
|
46
|
+
|
|
47
|
+
=== "Java"
|
|
48
|
+
|
|
49
|
+
```java
|
|
50
|
+
WebElement element = driver.findElementByAccessibilityId("element on the app");
|
|
51
|
+
element.getAttribute("focused"); // => 'true'
|
|
52
|
+
// Appium moves the focus to the element by pressing the corresponding keys and clicking the element
|
|
53
|
+
element.click();
|
|
54
|
+
driver.queryAppState("test.package.name"); // => :running_in_foreground
|
|
55
|
+
driver.executeScript("mobile: pressButton", ImmutableMap.of("name", "Home"));
|
|
56
|
+
driver.executeScript("mobile: pressButton", ImmutableMap.of("name", "Up"));
|
|
57
|
+
element = driver.switchTo().activeElement();
|
|
58
|
+
element.getAttribute("label");
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
=== "JS (WebdriverIO)"
|
|
62
|
+
|
|
63
|
+
```javascript
|
|
64
|
+
const element = $('~SomeAccessibilityId');
|
|
65
|
+
element.getAttribute('focused');
|
|
66
|
+
element.click();
|
|
67
|
+
driver.execute('mobile: pressButton', {name: 'Home'});
|
|
68
|
+
driver.execute('mobile: pressButton', {name: 'Up'});
|
|
69
|
+
const activeElement = driver.getActiveElement();
|
|
70
|
+
activeElement.getAttribute('label');
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
=== "Python"
|
|
74
|
+
|
|
75
|
+
```Python
|
|
76
|
+
element = driver.find_element_by_accessibility_id('element on the app')
|
|
77
|
+
element.get_attribute('focused')
|
|
78
|
+
element.click()
|
|
79
|
+
driver.query_app_state('test.package.name')
|
|
80
|
+
driver.execute_script('mobile: pressButton', { 'name': 'Home' })
|
|
81
|
+
driver.execute_script('mobile: pressButton', { 'name': 'Up' })
|
|
82
|
+
element = driver.switch_to.active_element
|
|
83
|
+
element.get_attribute('label')
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
=== "Ruby"
|
|
87
|
+
|
|
88
|
+
```ruby
|
|
89
|
+
element = @driver.find_element :accessibility_id, 'element on the app'
|
|
90
|
+
element.focused
|
|
91
|
+
element.click
|
|
92
|
+
@driver.app_state('test.package.name')
|
|
93
|
+
@driver.execute_script 'mobile: pressButton', { name: 'Home' }
|
|
94
|
+
@driver.execute_script 'mobile: pressButton', { name: 'Up' }
|
|
95
|
+
element = @driver.switch_to.active_element
|
|
96
|
+
element.label
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## More Actions
|
|
100
|
+
|
|
101
|
+
* Consider using `wait` methods, since tvOS also has animation
|
|
102
|
+
* The `menu` button works as _back_ for iOS context in tvOS
|
|
103
|
+
|
|
104
|
+
## Known Limitations
|
|
105
|
+
|
|
106
|
+
* Gesture commands do not work for tvOS. Some commands such as pasteboard do not work as well.
|
|
107
|
+
|
|
108
|
+
## Related Tickets
|
|
109
|
+
|
|
110
|
+
* <https://github.com/appium/appium/pull/12401>
|
|
111
|
+
* <https://github.com/appium/appium-xcuitest-driver/pull/911>
|
|
112
|
+
* <https://github.com/appium/appium-xcuitest-driver/pull/931>
|
|
113
|
+
* <https://github.com/appium/appium-xcuitest-driver/pull/939>
|
|
114
|
+
* <https://github.com/appium/WebDriverAgent/pull/163>
|