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,283 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Manage WebDriverAgent by Yourself
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
The XCUITest driver uses [WebDriverAgent](https://github.com/appium/WebDriverAgent) (WDA) as the
|
|
6
|
+
automation backend. This backend is based on Apple's XCTest framework and shares all the known
|
|
7
|
+
problems that are present in XCTest. For some of them we have workarounds, but there are some that
|
|
8
|
+
are hardly possible to workaround ([here is one example](https://github.com/facebookarchive/WebDriverAgent/issues/507)).
|
|
9
|
+
The approach described in this article enables you to have full control over how WDA is built,
|
|
10
|
+
managed, and run on the device. This way you may fine-tune your automated tests in a CI environment
|
|
11
|
+
and make them more stable inlong-running perspective.
|
|
12
|
+
|
|
13
|
+
!!! note
|
|
14
|
+
|
|
15
|
+
* The steps below are not necessary if default Appium capabilities are used. The server will do
|
|
16
|
+
everything for you, however, you will not have so much control over WDA.
|
|
17
|
+
* It is mandatory to have SSH or physical access to the machine to which the device under test
|
|
18
|
+
is connected.
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### WDA Setup
|
|
22
|
+
|
|
23
|
+
In order to setup and launch WDA, please check the provided steps in the
|
|
24
|
+
[Run Preinstalled WDA](./run-preinstalled-wda.md#using-xcode) documentation.
|
|
25
|
+
|
|
26
|
+
### WDA Startup via Code
|
|
27
|
+
|
|
28
|
+
WebDriverAgent application acts as a REST server, which proxies external API requests to native
|
|
29
|
+
XCTest calls for your application under test. The server address will be `localhost` if you run your
|
|
30
|
+
tests on a simulator, or the actual phone IP address in case of real device. Appium uses
|
|
31
|
+
[`appium-ios-device`](https://github.com/appium/appium-ios-device) to route network requests to a
|
|
32
|
+
real device from `localhost` via USB, which means one can use this tool to unify the WDA network
|
|
33
|
+
addresses for a simulator and real device.
|
|
34
|
+
|
|
35
|
+
You can use `appium-ios-device` to connect to a remote device by requiring the module from your
|
|
36
|
+
JavaScript code. Alternatively, you can use [`iproxy`](https://github.com/libimobiledevice/libusbmuxd#iproxy),
|
|
37
|
+
[`go-ios`](https://github.com/danielpaulus/go-ios) or [`tidevice`](https://github.com/alibaba/taobao-iphone-device)
|
|
38
|
+
to handle the WDA process outside Appium, by installing and launching the WDA package. For instance,
|
|
39
|
+
`iproxy` can be installed using `npm`: `npm install -g iproxy`.
|
|
40
|
+
|
|
41
|
+
This helper class written in Java illustrates the main implementation details with `iproxy`:
|
|
42
|
+
|
|
43
|
+
```java
|
|
44
|
+
public class WDAServer {
|
|
45
|
+
private static final Logger log = ZLogger.getLog(WDAServer.class.getSimpleName());
|
|
46
|
+
|
|
47
|
+
private static final int MAX_REAL_DEVICE_RESTART_RETRIES = 1;
|
|
48
|
+
private static final Timedelta REAL_DEVICE_RUNNING_TIMEOUT = Timedelta.ofMinutes(4);
|
|
49
|
+
private static final Timedelta RESTART_TIMEOUT = Timedelta.ofMinutes(1);
|
|
50
|
+
|
|
51
|
+
// These settings are needed to properly sign WDA for real device tests
|
|
52
|
+
// See https://github.com/appium/appium-xcuitest-driver for more details
|
|
53
|
+
private static final File KEYCHAIN = new File(String.format("%s/%s",
|
|
54
|
+
System.getProperty("user.home"), "/Library/Keychains/MyKeychain.keychain"));
|
|
55
|
+
private static final String KEYCHAIN_PASSWORD = "******";
|
|
56
|
+
|
|
57
|
+
private static final File IPROXY_EXECUTABLE = new File("/usr/local/bin/iproxy");
|
|
58
|
+
private static final File XCODEBUILD_EXECUTABLE = new File("/usr/bin/xcodebuild");
|
|
59
|
+
private static final File WDA_PROJECT =
|
|
60
|
+
new File("~/.appium/node_modules/appium-xcuitest-driver/node_modules/appium-webdriveragent" +
|
|
61
|
+
"/WebDriverAgent.xcodeproj");
|
|
62
|
+
private static final String WDA_SCHEME = "WebDriverAgentRunner";
|
|
63
|
+
private static final String WDA_CONFIGURATION = "Debug";
|
|
64
|
+
private static final File XCODEBUILD_LOG = new File("/usr/local/var/log/appium/build.log");
|
|
65
|
+
private static final File IPROXY_LOG = new File("/usr/local/var/log/appium/iproxy.log");
|
|
66
|
+
|
|
67
|
+
private static final int PORT = 8100;
|
|
68
|
+
public static final String SERVER_URL = String.format("http://127.0.0.1:%d", PORT);
|
|
69
|
+
|
|
70
|
+
private static final String[] IPROXY_CMDLINE = new String[]{
|
|
71
|
+
IPROXY_EXECUTABLE.getAbsolutePath(),
|
|
72
|
+
Integer.toString(PORT),
|
|
73
|
+
Integer.toString(PORT),
|
|
74
|
+
String.format("> %s 2>&1 &", IPROXY_LOG.getAbsolutePath())
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
private static WDAServer instance = null;
|
|
78
|
+
private final boolean isRealDevice;
|
|
79
|
+
private final String deviceId;
|
|
80
|
+
private final String platformVersion;
|
|
81
|
+
private int failedRestartRetriesCount = 0;
|
|
82
|
+
|
|
83
|
+
private WDAServer() {
|
|
84
|
+
try {
|
|
85
|
+
this.isRealDevice = !getIsSimulatorFromConfig(getClass());
|
|
86
|
+
final String udid;
|
|
87
|
+
if (isRealDevice) {
|
|
88
|
+
udid = IOSRealDeviceHelpers.getUDID();
|
|
89
|
+
} else {
|
|
90
|
+
udid = IOSSimulatorHelpers.getId();
|
|
91
|
+
}
|
|
92
|
+
this.deviceId = udid;
|
|
93
|
+
this.platformVersion = getPlatformVersionFromConfig(getClass());
|
|
94
|
+
} catch (Exception e) {
|
|
95
|
+
throw new RuntimeException(e);
|
|
96
|
+
}
|
|
97
|
+
ensureToolsExistence();
|
|
98
|
+
ensureParentDirExistence();
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
public synchronized static WDAServer getInstance() {
|
|
102
|
+
if (instance == null) {
|
|
103
|
+
instance = new WDAServer();
|
|
104
|
+
}
|
|
105
|
+
return instance;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
private boolean waitUntilIsRunning(Timedelta timeout) throws Exception {
|
|
109
|
+
final URL status = new URL(SERVER_URL + "/status");
|
|
110
|
+
try {
|
|
111
|
+
if (timeout.asSeconds() > 5) {
|
|
112
|
+
log.debug(String.format("Waiting max %s until WDA server starts responding...", timeout));
|
|
113
|
+
}
|
|
114
|
+
new UrlChecker().waitUntilAvailable(timeout.asMillis(), TimeUnit.MILLISECONDS, status);
|
|
115
|
+
return true;
|
|
116
|
+
} catch (UrlChecker.TimeoutException e) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
private static void ensureParentDirExistence() {
|
|
122
|
+
if (!XCODEBUILD_LOG.getParentFile().exists()) {
|
|
123
|
+
if (!XCODEBUILD_LOG.getParentFile().mkdirs()) {
|
|
124
|
+
throw new IllegalStateException(String.format(
|
|
125
|
+
"The script has failed to create '%s' folder for Appium logs. " +
|
|
126
|
+
"Please make sure your account has correct access permissions on the parent folder(s)",
|
|
127
|
+
XCODEBUILD_LOG.getParentFile().getAbsolutePath()));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
private void ensureToolsExistence() {
|
|
133
|
+
if (isRealDevice && !IPROXY_EXECUTABLE.exists()) {
|
|
134
|
+
throw new IllegalStateException(String.format("%s tool is expected to be installed (`npm install -g iproxy`)",
|
|
135
|
+
IPROXY_EXECUTABLE.getAbsolutePath()));
|
|
136
|
+
}
|
|
137
|
+
if (!XCODEBUILD_EXECUTABLE.exists()) {
|
|
138
|
+
throw new IllegalStateException(String.format("xcodebuild tool is not detected on the current system at %s",
|
|
139
|
+
XCODEBUILD_EXECUTABLE.getAbsolutePath()));
|
|
140
|
+
}
|
|
141
|
+
if (!WDA_PROJECT.exists()) {
|
|
142
|
+
throw new IllegalStateException(String.format("WDA project is expected to exist at %s",
|
|
143
|
+
WDA_PROJECT.getAbsolutePath()));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
private List<String> generateXcodebuildCmdline() {
|
|
148
|
+
final List<String> result = new ArrayList<>();
|
|
149
|
+
result.add(XCODEBUILD_EXECUTABLE.getAbsolutePath());
|
|
150
|
+
result.add("clean build-for-testing test-without-building");
|
|
151
|
+
result.add(String.format("-project %s", WDA_PROJECT.getAbsolutePath()));
|
|
152
|
+
result.add(String.format("-scheme %s", WDA_SCHEME));
|
|
153
|
+
result.add(String.format("-destination id=%s", deviceId));
|
|
154
|
+
result.add(String.format("-configuration %s", WDA_CONFIGURATION));
|
|
155
|
+
result.add(String.format("IPHONEOS_DEPLOYMENT_TARGET=%s", platformVersion));
|
|
156
|
+
result.add(String.format("> %s 2>&1 &", XCODEBUILD_LOG.getAbsolutePath()));
|
|
157
|
+
return result;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
private static List<String> generateKeychainUnlockCmdlines() throws Exception {
|
|
161
|
+
final List<String> result = new ArrayList<>();
|
|
162
|
+
result.add(String.format("/usr/bin/security -v list-keychains -s %s", KEYCHAIN.getAbsolutePath()));
|
|
163
|
+
result.add(String.format("/usr/bin/security -v unlock-keychain -p %s %s",
|
|
164
|
+
KEYCHAIN_PASSWORD, KEYCHAIN.getAbsolutePath()));
|
|
165
|
+
result.add(String.format("/usr/bin/security set-keychain-settings -t 3600 %s", KEYCHAIN.getAbsolutePath()));
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
public synchronized void restart() throws Exception {
|
|
170
|
+
if (isRealDevice && failedRestartRetriesCount >= MAX_REAL_DEVICE_RESTART_RETRIES) {
|
|
171
|
+
throw new IllegalStateException(String.format(
|
|
172
|
+
"WDA server cannot start on the connected device with udid %s after %s retries. " +
|
|
173
|
+
"Reboot the device manually and try again", deviceId, MAX_REAL_DEVICE_RESTART_RETRIES));
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
final String hostname = InetAddress.getLocalHost().getHostName();
|
|
177
|
+
log.info(String.format("Trying to (re)start WDA server on %s:%s...", hostname, PORT));
|
|
178
|
+
UnixProcessHelpers.killProcessesGracefully(IPROXY_EXECUTABLE.getName(), XCODEBUILD_EXECUTABLE.getName());
|
|
179
|
+
|
|
180
|
+
final File scriptFile = File.createTempFile("script", ".sh");
|
|
181
|
+
try {
|
|
182
|
+
final List<String> scriptContent = new ArrayList<>();
|
|
183
|
+
scriptContent.add("#!/bin/bash");
|
|
184
|
+
if (isRealDevice && isRunningInJenkinsNetwork()) {
|
|
185
|
+
scriptContent.add(String.join("\n", generateKeychainUnlockCmdlines()));
|
|
186
|
+
}
|
|
187
|
+
if (isRealDevice) {
|
|
188
|
+
scriptContent.add(String.join(" ", IPROXY_CMDLINE));
|
|
189
|
+
}
|
|
190
|
+
final String wdaBuildCmdline = String.join(" ", generateXcodebuildCmdline());
|
|
191
|
+
log.debug(String.format("Building WDA with command line:\n%s\n", wdaBuildCmdline));
|
|
192
|
+
scriptContent.add(wdaBuildCmdline);
|
|
193
|
+
try (Writer output = new BufferedWriter(new FileWriter(scriptFile))) {
|
|
194
|
+
output.write(String.join("\n", scriptContent));
|
|
195
|
+
}
|
|
196
|
+
new ProcessBuilder("/bin/chmod", "u+x", scriptFile.getCanonicalPath())
|
|
197
|
+
.redirectErrorStream(true).start().waitFor(5, TimeUnit.SECONDS);
|
|
198
|
+
final ProcessBuilder pb = new ProcessBuilder("/bin/bash", scriptFile.getCanonicalPath());
|
|
199
|
+
final Map<String, String> env = pb.environment();
|
|
200
|
+
// This is needed for Jenkins
|
|
201
|
+
env.put("BUILD_ID", "dontKillMe");
|
|
202
|
+
// This line is important. If USE_PORT environment variable is not set then WDA
|
|
203
|
+
// takes port number zero by default and won't accept any incoming requests
|
|
204
|
+
env.put("USE_PORT", Integer.toString(PORT));
|
|
205
|
+
log.info(String.format("Waiting max %s for WDA to be (re)started on %s:%s...", RESTART_TIMEOUT.toString(),
|
|
206
|
+
hostname, PORT));
|
|
207
|
+
final Timedelta started = Timedelta.now();
|
|
208
|
+
pb.redirectErrorStream(true).start().waitFor(RESTART_TIMEOUT.asMillis(), TimeUnit.MILLISECONDS);
|
|
209
|
+
if (!waitUntilIsRunning(RESTART_TIMEOUT)) {
|
|
210
|
+
++failedRestartRetriesCount;
|
|
211
|
+
throw new IllegalStateException(
|
|
212
|
+
String.format("WDA server has failed to start after %s timeout on server '%s'.\n"
|
|
213
|
+
+ "Please make sure that iDevice is properly connected and you can build "
|
|
214
|
+
+ "WDA manually from XCode.\n"
|
|
215
|
+
+ "Xcodebuild logs:\n\n%s\n\n\niproxy logs:\n\n%s\n\n\n",
|
|
216
|
+
RESTART_TIMEOUT, hostname,
|
|
217
|
+
getLog(XCODEBUILD_LOG).orElse("EMPTY"), getLog(IPROXY_LOG).orElse("EMPTY"))
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
log.info(String.format("WDA server has been successfully (re)started after %s " +
|
|
222
|
+
"and now is listening on %s:%s", Timedelta.now().diff(started).toString(), hostname, PORT));
|
|
223
|
+
} finally {
|
|
224
|
+
scriptFile.delete();
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
public boolean isRunning() throws Exception {
|
|
229
|
+
if (!isProcessRunning(XCODEBUILD_EXECUTABLE.getName())
|
|
230
|
+
|| (isRealDevice && !isProcessRunning(IPROXY_EXECUTABLE.getName()))) {
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
return waitUntilIsRunning(isRealDevice ? REAL_DEVICE_RUNNING_TIMEOUT : Timedelta.ofSeconds(3));
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
public Optional<String> getLog(File logFile) {
|
|
237
|
+
if (logFile.exists()) {
|
|
238
|
+
try {
|
|
239
|
+
return Optional.of(new String(Files.readAllBytes(logFile.toPath()), Charset.forName("UTF-8")));
|
|
240
|
+
} catch (IOException e) {
|
|
241
|
+
e.printStackTrace();
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return Optional.empty();
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
The following piece of code should then be called before starting the XCUITest driver:
|
|
250
|
+
|
|
251
|
+
```java
|
|
252
|
+
if (!WDAServer.getInstance().isRunning()) {
|
|
253
|
+
WDAServer.getInstance().restart();
|
|
254
|
+
}
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
It is important to set the `appium:webDriverAgentUrl` capability for the driver to let it know
|
|
258
|
+
that WDA is ready for use:
|
|
259
|
+
|
|
260
|
+
```java
|
|
261
|
+
capabilities.setCapability("webDriverAgentUrl", WDAServer.SERVER_URL);
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### Important Notes
|
|
265
|
+
|
|
266
|
+
* The process does not have direct access to keychain if it is executed by a continuous integration
|
|
267
|
+
agent, so the keychain must be prepared before compiling WDA for real device, otherwise
|
|
268
|
+
codesigning will fail. Check the [CI Setup](./ci-setup.md) documentation for details.
|
|
269
|
+
* The `xcodebuild` and `iproxy` processes are killed before restart to make sure compilation
|
|
270
|
+
succeeds, in case the processes are frozen
|
|
271
|
+
* A dedicated `bash` script is used to detach the `iproxy`/`xcodebuild` processes, so they can
|
|
272
|
+
continue running in background even after the actual code execution is finished. This is extremely
|
|
273
|
+
important if multiple tests/suites are executed on the same machine/node in automation lab, which
|
|
274
|
+
requires minimum human interaction
|
|
275
|
+
* The value of the `BUILD_ID` environment variable is changed to avoid the CI agent killing the
|
|
276
|
+
background process after the job is finished
|
|
277
|
+
* The `isRunning` check is done by verifying the actual network endpoint
|
|
278
|
+
* The output of daemonized processes is logged, so it is possible to track errors and unexpected
|
|
279
|
+
failures. The content of the log files is automatically added to the actual error message if the
|
|
280
|
+
server fails to (re)start.
|
|
281
|
+
* Real device id can be parsed from `system_profiler SPUSBDataType` output
|
|
282
|
+
* Simulator id can be parsed from `xcrun simctl list` output
|
|
283
|
+
* The `UrlChecker` class is imported from the `org.openqa.selenium.net` package
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Diagnosing WebDriverAgent Slowness
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
The XCUITest driver is based on Apple's [XCTest](https://developer.apple.com/documentation/xctest)
|
|
6
|
+
test automation framework and thus inherits most (if not all) properties and features this framework
|
|
7
|
+
provides. The purpose of this article is to help with optimization of automation scenarios that
|
|
8
|
+
don't perform well and/or to explain possible causes of such behavior.
|
|
9
|
+
|
|
10
|
+
## "Slowness" could be different
|
|
11
|
+
|
|
12
|
+
First, it is important to figure out what exactly is slow.
|
|
13
|
+
The Appium ecosystem is complicated and
|
|
14
|
+
consists of multiple layers, where each layer could influence the overall duration.
|
|
15
|
+
For example, when an API call is invoked from a client script, it must go through the following stages:
|
|
16
|
+
|
|
17
|
+
Your automation script (Java, Python, C#, etc; runs on your machine)
|
|
18
|
+
--> Appium Client Lib (Java, Python, C#, etc; runs on your machine)
|
|
19
|
+
--> Appium Server (Node.js HTTP server; runs on your machine or a remote one)
|
|
20
|
+
--> XCUITest Driver and/or Plugin (Node.js HTTP handler; runs on your machine or a remote one)
|
|
21
|
+
--> WDA Server (ObjectiveC HTTP Server; runs on the remote mobile device)
|
|
22
|
+
|
|
23
|
+
The example above is the simplest flow. If you run your scripts using cloud providers
|
|
24
|
+
infrastructure then the amount of intermediate components in this chain may be much greater.
|
|
25
|
+
Like it was mentioned above, it is very important to know on which stage(s)
|
|
26
|
+
(or between them) the bottleneck is observed.
|
|
27
|
+
|
|
28
|
+
This particular article focuses only on the last stage: the WDA Server one.
|
|
29
|
+
|
|
30
|
+
## WebDriverAgent (WDA) Server
|
|
31
|
+
|
|
32
|
+
WDA source code is located in the separate [repository](https://github.com/appium/WebDriverAgent/tree/master).
|
|
33
|
+
The content of this repository is published as [appium-webdriveragent](https://www.npmjs.com/package/appium-webdriveragent)
|
|
34
|
+
NPM package and contains several helper Node.js modules along with the WDA source code itself.
|
|
35
|
+
This source code is compiled into an .xctrunner bundle, which is a special application type
|
|
36
|
+
that contains tests (also it has some higher privileges in comparison to vanilla apps).
|
|
37
|
+
WebDriverAgent project itself consists of three main parts:
|
|
38
|
+
|
|
39
|
+
- Vendor Libs
|
|
40
|
+
- WebDriverAgentLib
|
|
41
|
+
- WebDriverAgentRunner
|
|
42
|
+
|
|
43
|
+
Vendor libs, like RoutingHTTPServer, ensure the support for low-level HTTP- and TCP-server APIs.
|
|
44
|
+
WebDriverAgentLib defines handlers for [W3C WebDriver](https://www.w3.org/TR/webdriver/) endpoints
|
|
45
|
+
and implements all the heavy-lifting procedures related to Apple's XCTest communication
|
|
46
|
+
and some more custom stuff specific for the XCUITest driver.
|
|
47
|
+
WebDriverAgentRunner is actually one long test, whose main purpose
|
|
48
|
+
is to run the HTTP server implemented by the WebDriverAgentLib.
|
|
49
|
+
|
|
50
|
+
Important conclusions from the above information:
|
|
51
|
+
|
|
52
|
+
- WDA is an HTTP server, which executes API commands by invoking HTTP response handlers
|
|
53
|
+
- WDA uses Apple's XCTest APIs with various custom additions
|
|
54
|
+
|
|
55
|
+
## How to confirm my script's bottleneck is WDA
|
|
56
|
+
|
|
57
|
+
Check the server logs in order to verify how long it takes for the XCUITest driver to receive a
|
|
58
|
+
response from WDA. The log line that is written before an HTTP request is proxied to WDA looks
|
|
59
|
+
like `Proxying [X] to [Y]`. Also consider enabling server timestamps by providing the
|
|
60
|
+
`--log-timestamp` command line parameter. If you observe timestamps between the above log line and the
|
|
61
|
+
next one differ too much and the difference is an anomaly (e.g. the same step is (much) faster
|
|
62
|
+
for other apps/environments/parameter combinations) then it might serve as a confirmation of a
|
|
63
|
+
suspicious slowness.
|
|
64
|
+
|
|
65
|
+
## Patterns lookup
|
|
66
|
+
|
|
67
|
+
After the slowness is confirmed it is important to determine behavior patterns, e.g. under which
|
|
68
|
+
circumstances does it happen, if it is always reproducible, etc. This article only targets specific
|
|
69
|
+
patterns that the author knows of or dealt with. If your pattern is not present here then try to
|
|
70
|
+
look for possible occurrences in existing [issues](https://github.com/appium/appium/issues),
|
|
71
|
+
[Appium forum](https://discuss.appium.io) or just search the internet.
|
|
72
|
+
|
|
73
|
+
## Pattern: Application startup is slow
|
|
74
|
+
|
|
75
|
+
### Symptoms
|
|
76
|
+
|
|
77
|
+
You observe timeouts or unusual slowness (in comparison to manual execution performance)
|
|
78
|
+
of the application startup on session init (if it also includes app startup)
|
|
79
|
+
or mid-session app startup.
|
|
80
|
+
|
|
81
|
+
### Causes
|
|
82
|
+
|
|
83
|
+
When XCTest starts an app it ensures the accessibility layer of it is ready for interactions.
|
|
84
|
+
To check that the framework verifies the application is idling (e.g. does not perform any actions
|
|
85
|
+
on the main thread) as well as all animations have been finished. If this check times out
|
|
86
|
+
an exception is thrown or WDA may try to continue without any guarantees the app could be
|
|
87
|
+
interacted with (a.k.a. best effort strategy).
|
|
88
|
+
|
|
89
|
+
### Solutions
|
|
90
|
+
|
|
91
|
+
I was observing applications that were constantly running something on the main thread in an endless loop.
|
|
92
|
+
Most likely such apps are not automatable at all or hardly automatable without fixing the app
|
|
93
|
+
source code itself.
|
|
94
|
+
You may still try to tune the following capabilities and settings to influence the above timeout:
|
|
95
|
+
|
|
96
|
+
- [appium:waitForIdleTimeout](../reference/capabilities.md)
|
|
97
|
+
- [waitForIdleTimeout](../reference/settings.md)
|
|
98
|
+
- [animationCoolOffTimeout](../reference/settings.md)
|
|
99
|
+
|
|
100
|
+
## Pattern: Element location with XPath is slow
|
|
101
|
+
|
|
102
|
+
### Symptoms
|
|
103
|
+
|
|
104
|
+
You observe timeouts or unusual slowness (in comparison to other location strategies)
|
|
105
|
+
of XPath locators.
|
|
106
|
+
|
|
107
|
+
### Causes
|
|
108
|
+
|
|
109
|
+
The [XPath](../reference/locator-strategies.md) location strategy
|
|
110
|
+
is not natively supported by XCTest. It's a custom addition
|
|
111
|
+
which is only available in WDA. Such locators have more features than others, but the price
|
|
112
|
+
for it is the observed slowness as we cannot rely on native XCTest location APIs
|
|
113
|
+
while looking for elements using XPath.
|
|
114
|
+
In order to perform XPath lookup WDA needs to take a snapshot of the whole accessibility
|
|
115
|
+
hierarchy with all element attributes resolved, which is a time-expensive operation.
|
|
116
|
+
Location slowness might be observed if:
|
|
117
|
+
- The current app hierarchy is too large (e.g. has hundreds of elements). This is a known
|
|
118
|
+
XCTest limitation.
|
|
119
|
+
- The app is not idling/has active animations
|
|
120
|
+
- It takes too long to determine each element's `visible` or `accessible` attributes, which are custom
|
|
121
|
+
ones and are not present in the original XCTest implementation
|
|
122
|
+
|
|
123
|
+
### Solutions
|
|
124
|
+
|
|
125
|
+
Depending on the actual cause there might be different applicable solutions. In general, the common
|
|
126
|
+
advice would be to avoid XPath locators where possible and use locators that are natively
|
|
127
|
+
supported by XCTest (like predicates or ids) and have better speed ranking.
|
|
128
|
+
If the usage of an XPath locators is a single available option then you may try to apply the following
|
|
129
|
+
suggestions:
|
|
130
|
+
- Reduce the size of the app hierarchy using the [snapshotMaxDepth setting](../reference/settings.md).
|
|
131
|
+
This might not help if the destination element is deeply nested -
|
|
132
|
+
it won't be found if the value of this setting is lower than its nesting level.
|
|
133
|
+
- Exclude the `visible` and/or `accessible` attributes from your query. These are
|
|
134
|
+
custom attributes exclusive to WDA and their calculation is expensive in comparison
|
|
135
|
+
to other native attributes.
|
|
136
|
+
- Reduce various timeouts similarly to how it's advised in the
|
|
137
|
+
[Application startup is slow](#pattern-application-startup-is-slow) pattern
|
|
138
|
+
- Fix the source code of the application under test to reduce the amount of accessible elements
|
|
139
|
+
on a single screen
|
|
140
|
+
- Fix the source code of the application under test to avoid running long operations
|
|
141
|
+
or animations on the main thread
|
|
142
|
+
|
|
143
|
+
## Pattern: Element location with non-XPath is slow
|
|
144
|
+
|
|
145
|
+
### Symptoms
|
|
146
|
+
|
|
147
|
+
You observe timeouts or unusual slowness with various non-XPath locators.
|
|
148
|
+
|
|
149
|
+
### Causes
|
|
150
|
+
|
|
151
|
+
Location slowness might be observed if:
|
|
152
|
+
- The current app hierarchy is too large (e.g. has hundreds of elements). This is a known
|
|
153
|
+
XCTest limitation.
|
|
154
|
+
- The app is not idling/has active animations
|
|
155
|
+
- It takes too long to determine each element's `visible` or `accessible` attributes, which are custom
|
|
156
|
+
ones and are not present in the original XCTest implementation (only applicable to predicate and class chain locators)
|
|
157
|
+
|
|
158
|
+
### Solutions
|
|
159
|
+
|
|
160
|
+
- Reduce the size of the app hierarchy using the [snapshotMaxDepth setting](../reference/settings.md).
|
|
161
|
+
This might not help if the destination element is deeply nested -
|
|
162
|
+
it won't be found if the value of this setting is lower than its nesting level.
|
|
163
|
+
- Exclude the `visible` and/or `accessible` attributes from your query
|
|
164
|
+
(only applicable to predicate and class chain locators). These are
|
|
165
|
+
custom attributes exclusive to WDA and their calculation is expensive in comparison
|
|
166
|
+
to other native attributes.
|
|
167
|
+
- Reduce various timeouts similarly to how it's advised in the
|
|
168
|
+
[Application startup is slow](#pattern-application-startup-is-slow) pattern
|
|
169
|
+
- Fix the source code of the application under test to reduce the amount of accessible elements
|
|
170
|
+
on a single screen
|
|
171
|
+
- Fix the source code of the application under test to avoid running long operations
|
|
172
|
+
or animations on the main thread
|
|
173
|
+
|
|
174
|
+
## Pattern: Various element interactions are slow
|
|
175
|
+
|
|
176
|
+
### Symptoms
|
|
177
|
+
|
|
178
|
+
You observe timeouts or unusual slowness while clicking elements or performing other
|
|
179
|
+
actions on them.
|
|
180
|
+
|
|
181
|
+
### Causes
|
|
182
|
+
|
|
183
|
+
- The current app hierarchy is too large (e.g. has hundreds of elements). This is a known
|
|
184
|
+
XCTest limitation.
|
|
185
|
+
- The app is not idling/has active animations
|
|
186
|
+
|
|
187
|
+
### Solutions
|
|
188
|
+
|
|
189
|
+
- Reduce various timeouts similarly to how it's advised in the
|
|
190
|
+
[Application startup is slow](#pattern-application-startup-is-slow) pattern
|
|
191
|
+
- Fix the source code of the application under test to reduce the amount of accessible elements
|
|
192
|
+
on a single screen
|
|
193
|
+
- Fix the source code of the application under test to avoid running long operations
|
|
194
|
+
or animations on the main thread
|
|
195
|
+
|
|
196
|
+
## Pattern: Page source retrieval slow
|
|
197
|
+
|
|
198
|
+
### Symptoms
|
|
199
|
+
|
|
200
|
+
You observe timeouts or unusual slowness while retrieving the page of the app.
|
|
201
|
+
|
|
202
|
+
### Causes
|
|
203
|
+
|
|
204
|
+
In order to retrieve the page source WDA needs to take a snapshot of the whole accessibility
|
|
205
|
+
hierarchy with all element attributes resolved, which is a time-expensive operation.
|
|
206
|
+
Page source retrieval slowness might be observed if:
|
|
207
|
+
- The current app hierarchy is too large (e.g. has hundreds of elements). This is a known
|
|
208
|
+
XCTest limitation.
|
|
209
|
+
- The app is not idling/has active animations
|
|
210
|
+
- It takes too long to determine each element's `visible` or `accessible` attributes, which are custom
|
|
211
|
+
ones and are not present in the original XCTest implementation
|
|
212
|
+
|
|
213
|
+
### Solutions
|
|
214
|
+
|
|
215
|
+
- Reduce the size of the app hierarchy using the [snapshotMaxDepth setting](../reference/settings.md).
|
|
216
|
+
Note that you won't see nested elements in the source tree whose nesting level is greater than
|
|
217
|
+
the given size.
|
|
218
|
+
- Retrieve the page source without "expensive" attributes using the
|
|
219
|
+
[mobile: source](../reference/execute-methods.md#mobile-source) method with
|
|
220
|
+
the appropriate `excludedAttributes` argument value or add such attribute names into
|
|
221
|
+
the [pageSourceExcludedAttributes setting](../reference/settings.md).
|
|
222
|
+
- Retrieve the native XCTest page source using the
|
|
223
|
+
[mobile: source](../reference/execute-methods.md#mobile-source) method with
|
|
224
|
+
the `format=description` argument value. The returned page source is a poorly-formatted text,
|
|
225
|
+
although its retrieval should be fast (at least not slower than XCTest does that).
|
|
226
|
+
- Reduce various timeouts similarly to how it's advised in the
|
|
227
|
+
[Application startup is slow](#pattern-application-startup-is-slow) pattern
|
|
228
|
+
- Fix the source code of the application under test to reduce the amount of accessible elements
|
|
229
|
+
on a single screen
|
|
230
|
+
- Fix the source code of the application under test to avoid running long operations
|
|
231
|
+
or animations on the main thread
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
hide:
|
|
3
|
+
- navigation
|
|
4
|
+
- toc
|
|
5
|
+
|
|
6
|
+
title: Welcome
|
|
7
|
+
---
|
|
8
|
+
<style>
|
|
9
|
+
.md-typeset h1 {
|
|
10
|
+
display: none;
|
|
11
|
+
}
|
|
12
|
+
</style>
|
|
13
|
+
|
|
14
|
+
<div style="text-align: center">
|
|
15
|
+
<img src="assets/images/appium-plus-xctest.png" style="max-width: 500px;" />
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
Welcome to the Appium XCUITest Driver documentation! The XCUITest driver is a test automation
|
|
19
|
+
framework for iOS, iPadOS and tvOS devices, enabling automated black-box testing of native, hybrid
|
|
20
|
+
and WebKit web apps, on both emulators and real devices.
|
|
21
|
+
|
|
22
|
+
The XCUITest driver is part of the Appium test automation tool. For information on Appium itself,
|
|
23
|
+
please visit [the Appium documentation](https://appium.io).
|
|
24
|
+
|
|
25
|
+
## Explore the Documentation
|
|
26
|
+
|
|
27
|
+
<div class="grid cards" markdown>
|
|
28
|
+
|
|
29
|
+
- Check out the [__Overview__](./overview.md) to learn how the driver works
|
|
30
|
+
- Go through the [__Installation__](./installation/index.md) steps to get set up
|
|
31
|
+
- Follow the [__Device Preparation__](./preparation/index.md) instructions to configure your test device
|
|
32
|
+
- Browse the [__Reference__](./reference/scripts.md) documentation for everything exposed by the driver
|
|
33
|
+
- Read the different [__Guides__](./guides/parallel-tests.md) for a variety of instructions, tips and tricks
|
|
34
|
+
- For contributions to the driver, refer to the [__Contributing__](./contributing.md) page
|
|
35
|
+
|
|
36
|
+
</div>
|