appium-mcp 0.0.1 → 1.1.5
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 +43 -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 +114 -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-page-source.d.ts +2 -0
- package/dist/tools/interactions/get-page-source.js +48 -0
- package/dist/tools/interactions/get-page-source.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 +171 -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 +135 -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-page-source.ts +52 -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,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
hide:
|
|
3
|
+
- toc
|
|
4
|
+
|
|
5
|
+
title: SSL/TLS/SPDY Support
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Appium 2.2 introduces the option to start the Appium server with SSL/TLS support.
|
|
9
|
+
|
|
10
|
+
## Command Line Arguments
|
|
11
|
+
|
|
12
|
+
In order to enable secure connections to the server, you need to provide the following command
|
|
13
|
+
line arguments:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
appium server --ssl-cert-path=/path/to/cert.pem --ssl-key-path=/path/to/key.pem
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Both arguments must be provided and should contain paths to a valid
|
|
20
|
+
[X509 PEM](https://www.ssl.com/guide/pem-der-crt-and-cer-x-509-encodings-and-conversions/)
|
|
21
|
+
certificate and its corresponding private key.
|
|
22
|
+
|
|
23
|
+
After the server is started use the `https` protocol and a client supporting SSL/TLS or
|
|
24
|
+
[SPDY](https://en.wikipedia.org/wiki/SPDY) to communicate to it.
|
|
25
|
+
|
|
26
|
+
### Supported Features
|
|
27
|
+
|
|
28
|
+
Once a secure server socket is established it supports the following protocols:
|
|
29
|
+
`['h2', 'spdy/3.1', 'spdy/3', 'spdy/2', 'http/1.1', 'http/1.0']`. See
|
|
30
|
+
[the SPDY node module documentation](https://www.npmjs.com/package/spdy) to get more details about
|
|
31
|
+
its features. All insecure client connections will be rejected by the server.
|
|
32
|
+
|
|
33
|
+
### Self-Signed Certificates
|
|
34
|
+
|
|
35
|
+
Use the following command in order to generate a self-signed certificate/key pair:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
openssl req -nodes -new -x509 -keyout key.pem -out cert.pem -subj "/C=US/ST=State/L=City/O=company/OU=Com/CN=www.testserver.local"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Feel free to change the value of `-subj` in the command above with your matching details. The server
|
|
42
|
+
should work just fine with a self-signed certificate, although you need to take care about a proper
|
|
43
|
+
client setup, e.g. make sure it does not reject unauthorized certificates.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
hide:
|
|
3
|
+
- 导航栏
|
|
4
|
+
- toc
|
|
5
|
+
|
|
6
|
+
title: 欢迎使用
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<style>
|
|
10
|
+
.md-typeset h1,
|
|
11
|
+
.appium-sponsor-thanks {
|
|
12
|
+
display: none;
|
|
13
|
+
}</style>
|
|
14
|
+
|
|
15
|
+
<div style="text-align: center">
|
|
16
|
+
<img src="assets/images/appium-logo-horiz.png" style="max-width: 400px;" />
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
欢迎来到 Appium 文档! Appium是一个开源项目和相关软件生态系统,旨在促进多种应用平台的用户界面自动化,包括移动端(iOS、Android、Tizen)、浏览器端(Chrome、Firefox、Safari)、桌面端(macOS、Windows)、电视端(Roku、tvOS、Android TV、三星)等!
|
|
20
|
+
|
|
21
|
+
<div style="text-align: center; margin-top: 2rem; font-style: italic;">
|
|
22
|
+
Appium 非常感谢主要合作伙伴的支持! (了解更多关于我们的赞助计划和贡献者补偿计划信息请<a
|
|
23
|
+
href="https://github.com/appium/appium/blob/master/GOVERNANCE.md#sponsorship">点击此处</a>)
|
|
24
|
+
<div class="homepageSponsors">
|
|
25
|
+
<div class="homepageSponsor">
|
|
26
|
+
<a href="https://www.browserstack.com/browserstack-appium?utm_campaigncode=701OW00000AoUTQYA3&utm_medium=partnered&utm_source=appium">
|
|
27
|
+
<img src="assets/images/sponsor-logo-browserstack-dark.png#only-dark" style="width: 220px;" />
|
|
28
|
+
<img src="assets/images/sponsor-logo-browserstack-light.png#only-light" style="width: 220px;" />
|
|
29
|
+
</a>
|
|
30
|
+
</div>
|
|
31
|
+
<div class="homepageSponsor">
|
|
32
|
+
<a href="https://lambdatest.com/?utm_source=appium.io&utm_medium=organic&utm_campaign=june_25&utm_term=sk&utm_content=webpage">
|
|
33
|
+
<img src="assets/images/sponsor-logo-lambdatest-dark.png#only-dark" style="width: 220px;" />
|
|
34
|
+
<img src="assets/images/sponsor-logo-lambdatest-light.png#only-light" style="width: 220px;" />
|
|
35
|
+
</a>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
|
|
40
|
+
## 探索文档
|
|
41
|
+
|
|
42
|
+
<div class="grid cards" markdown>
|
|
43
|
+
|
|
44
|
+
- 查看 [**简介**](./intro/index.md) 以确保您理解关键概念
|
|
45
|
+
- 通过 [**快速开始**](./quickstart/index.md) 来设置并运行一个基本的 Android 测试
|
|
46
|
+
- 访问 [**生态系统**](./ecosystem/index.md) 页面,获取您可能想要使用的驱动程序、客户端和插件列表
|
|
47
|
+
- 访问 [**Reference**](./reference/index.md) 页面获取Appium CLI 和支持的端点信息
|
|
48
|
+
- 阅读不同版本的 [**指南**](./guides/migrating-2-to-3.md),了解各版本的说明、提示和技巧
|
|
49
|
+
- 查看各种第三方 [**资源**](./resources/index.md) 以探索网络上的 Appium
|
|
50
|
+
- 要创建自己的 Appium 扩展,请参阅 [**开发者**](./developing/index.md) 文档
|
|
51
|
+
- 有关对 Appium 的贡献,请查阅 [**贡献**](./contributing/index.md) 页面
|
|
52
|
+
- 查看 [**Appium博客**](./blog/index.md) ,了解项目中的新内容
|
|
53
|
+
|
|
54
|
+
</div>
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: How Does Appium Work?
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
As mentioned on the main page, Appium is an open-source project and ecosystem of related software,
|
|
6
|
+
designed to facilitate UI automation of many app platforms. With the release of Appium 2, Appium
|
|
7
|
+
has the following primary goals:[^1]
|
|
8
|
+
|
|
9
|
+
- Make platform-specific automation capabilities available under a cross-platform, standard API
|
|
10
|
+
- Allow easy access to this API from any programming language
|
|
11
|
+
- Provide tools to enable convenient community development of Appium extensions
|
|
12
|
+
|
|
13
|
+
[^1]: To meet these primary goals, we also work with a set of secondary goals or methodology
|
|
14
|
+
principles, which we also encourage for Appium extension developers:
|
|
15
|
+
|
|
16
|
+
- As far as possible, rely on (and contribute to) open source technology
|
|
17
|
+
- As far as possible, rely on vendor-provided tools for a given platform
|
|
18
|
+
- As far as possible, rely on automation tools that allow automation of unmodified apps (prefer
|
|
19
|
+
not to require the user to build in additional SDKs or software that introduce discrepancies
|
|
20
|
+
between the test version of the app and the production version)
|
|
21
|
+
- As far as possible, rely on existing standards instead of creating new ones
|
|
22
|
+
|
|
23
|
+
So, take any app platform you know about, like iOS or Android. Appium wants for there to be a way
|
|
24
|
+
for developers and testers to write UI automation code for that platform, according to a single,
|
|
25
|
+
unified API. Based on Appium's goals, we have a lot of questions to answer to make it all work:
|
|
26
|
+
|
|
27
|
+
- Which API should that "single, unified" API be?
|
|
28
|
+
- How do we map that API to automation behaviour for a specific platform?
|
|
29
|
+
- How do we make that API accessible via multiple popular programming languages?
|
|
30
|
+
|
|
31
|
+
There's another, larger, question lurking in the background here too, given that there are more app
|
|
32
|
+
platforms out there than just iOS and Android:
|
|
33
|
+
|
|
34
|
+
- How do we enable automation for _all_ the platforms?
|
|
35
|
+
|
|
36
|
+
Exploring Appium's answers to these questions may not be the quickest way to learn what Appium is,
|
|
37
|
+
but it is certainly a good one! So let's dive in.
|
|
38
|
+
|
|
39
|
+
## Appium's choice of API
|
|
40
|
+
|
|
41
|
+
Appium is very fortunate to have been preceded by a technology which has been a long-standing
|
|
42
|
+
pioneer in the field of UI automation, namely [Selenium](https://selenium.dev). The goal of the
|
|
43
|
+
Selenium project has been to support UI automation of web browsers, and in this way we can think of
|
|
44
|
+
it as occupying a subset of Appium's goals. Along the way, Selenium (and, after they merged,
|
|
45
|
+
another project called WebDriver) developed a relatively stable API for browser automation.
|
|
46
|
+
|
|
47
|
+
Over the years, Selenium worked with various web browser vendors and the [W3C](https://w3.org)
|
|
48
|
+
standards group to turn its API into an official web browser standard, called the WebDriver
|
|
49
|
+
specification. All the main browsers now
|
|
50
|
+
implement automation capabilities inline with the WebDriver spec, without the Selenium team having
|
|
51
|
+
to maintain any software that performs actual automation; standards for the win!
|
|
52
|
+
|
|
53
|
+
Appium's initial goals were to develop an automation standard for mobile apps (iOS and Android). We
|
|
54
|
+
could have made up something new, but in the spirit of joining forces and keeping standards, well,
|
|
55
|
+
standard, we decided to adopt the WebDriver spec as Appium's API.[^2] While user interaction on
|
|
56
|
+
websites and in mobile native apps are not entirely identical (with even greater differences once
|
|
57
|
+
we start to consider, for example, TV platforms controlled by simple remotes), the fact is that
|
|
58
|
+
most software UIs are pretty much the same. This means that the WebDriver spec provides automation
|
|
59
|
+
API primitives (finding elements, interacting with elements, loading pages or screens, etc...) that
|
|
60
|
+
more or less map to any platform.
|
|
61
|
+
|
|
62
|
+
[^2]: Technically, when Appium was first written, we were dealing with something older than the
|
|
63
|
+
WebDriver spec, called the JSON Wire Protocol. Since then, Appium continued to evolve along with
|
|
64
|
+
the W3C spec and is fully W3C-compliant.
|
|
65
|
+
|
|
66
|
+
Of course, Appium wants to support the cases where user interaction _does_ differ from web to
|
|
67
|
+
mobile or web to TV, and so Appium also makes use of the built-in _extensibility_ of the WebDriver
|
|
68
|
+
spec. The result is that, no matter what platform you want to automate, when you use Appium, you
|
|
69
|
+
will do so using the standard WebDriver spec, with two caveats:
|
|
70
|
+
|
|
71
|
+
- We might not have any way to support a particular WebDriver API command on a given platform, and
|
|
72
|
+
so some commands might be unsupported (for example, getting or setting cookies is not possible in
|
|
73
|
+
the world of native mobile app automation).
|
|
74
|
+
- We might support automation behaviours that go _beyond_ what's available in the WebDriver API
|
|
75
|
+
command list, though any such commands will be valid and spec-compliant extensions to the
|
|
76
|
+
WebDriver API.
|
|
77
|
+
|
|
78
|
+
How do you actually _use_ the WebDriver API, particularly in the context of Appium? We'll cover
|
|
79
|
+
that in the [section below](#universal-programming-language-access) on how Appium provides
|
|
80
|
+
universal programming language access. All you need to know for now is that the way Appium
|
|
81
|
+
introduces a universal UI automation interface is by implementing the WebDriver protocol.
|
|
82
|
+
|
|
83
|
+
## Platform automation behaviour
|
|
84
|
+
|
|
85
|
+
The next question is, how does Appium map this protocol to automation behaviour on a wide range of
|
|
86
|
+
platforms? The trick is that, strictly speaking, Appium doesn't! It leaves this responsibility up
|
|
87
|
+
to a kind of software module called an Appium _driver_. There's a whole Driver
|
|
88
|
+
Introduction which you can read next, so we won't go into huge detail on how they
|
|
89
|
+
work for now.
|
|
90
|
+
|
|
91
|
+
What's important to understand at the moment is that a driver is kind of like a pluggable module
|
|
92
|
+
for Appium that gives Appium the power to automate a particular platform (or set of platforms,
|
|
93
|
+
depending on the goal of the driver). At the end of the day, a driver's responsibility is to simply
|
|
94
|
+
implement an Appium-internal interface representing the WebDriver protocol. How it implements this
|
|
95
|
+
interface is totally up to the driver, based on its strategy for making automation happen on
|
|
96
|
+
a specific platform. Typically, and with a lot more complexity and difficulty in the details,
|
|
97
|
+
a driver does this by relying on platform-specific automation technologies. For example, Apple
|
|
98
|
+
maintains an iOS automation technology called
|
|
99
|
+
[XCUITest](https://developer.apple.com/documentation/xctest/user_interface_tests). The Appium
|
|
100
|
+
driver that supports iOS app automation is called the XCUITest
|
|
101
|
+
Driver because ultimately what it does is
|
|
102
|
+
convert the WebDriver protocol to XCUITest library calls.
|
|
103
|
+
|
|
104
|
+
One of the reasons that drivers are independent, pluggable modules is that they work completely
|
|
105
|
+
differently from one another. The tools and requirements for building and using drivers for
|
|
106
|
+
different platforms are completely different. And so Appium lets you use just the drivers that you
|
|
107
|
+
need for your automation tasks. Choosing drivers and installing them so that you can use them with
|
|
108
|
+
your Appium instance is so important that Appium has its very own CLI for managing
|
|
109
|
+
drivers.
|
|
110
|
+
|
|
111
|
+
So, to answer our original question, the way that Appium provides access to automation capabilities
|
|
112
|
+
for a given platform is that the Appium team (or anyone else[^3]) writes a _driver_ for that
|
|
113
|
+
platform, implementing as much or little of the WebDriver protocol as desired. The driver can then
|
|
114
|
+
be installed by anyone using Appium.
|
|
115
|
+
|
|
116
|
+
[^3]: You can build and share your own drivers! Check out Building
|
|
117
|
+
Drivers to learn more about how to develop drivers in Node.js
|
|
118
|
+
that can be used with Appium.
|
|
119
|
+
|
|
120
|
+
## Universal programming language access
|
|
121
|
+
|
|
122
|
+
But what does it mean, or look like, to _use_ Appium, anyway? Since Appium is ultimately a Node.js
|
|
123
|
+
program, it _could_ have looked like importing Appium and its drivers as libraries into your own
|
|
124
|
+
Node.js programs. But that wouldn't meet Appium's goal of providing automation capabilities to
|
|
125
|
+
people using any popular programming language.
|
|
126
|
+
|
|
127
|
+
Luckily, the fact that Appium rode in on Selenium's coattails meant that we had a solution to this
|
|
128
|
+
problem from day one. You see, the WebDriver specification is actually an HTTP-based protocol,
|
|
129
|
+
meaning it is designed to be used over a network rather than within the memory of a single program.
|
|
130
|
+
|
|
131
|
+
One of the main benefits of this "client-server" architecture is that it allows the automation
|
|
132
|
+
implementer (the thing doing the automation, in this case the 'server') to be completely distinct
|
|
133
|
+
from the automation runner (the thing defining what automation should be done, in what steps,
|
|
134
|
+
etc..., in this case the 'client'). Basically, all the "hard stuff" (actually figuring out how to
|
|
135
|
+
make automation happen on a given platform) can be handled in one place by the server, and "thin"
|
|
136
|
+
client libraries can be written in any programming language which simply encode HTTP requests to
|
|
137
|
+
the server in language-appropriate way. It's possible, in other words, to bring basic Appium
|
|
138
|
+
/ WebDriver capabilities to a new programming language relatively easily, assuming high-level HTTP
|
|
139
|
+
libraries exist, simply by coding up a basic HTTP client in that language.
|
|
140
|
+
|
|
141
|
+
There are a couple important takeaways here for you, the Appium user:
|
|
142
|
+
|
|
143
|
+
- Appium is an _HTTP server_. It must run as a process on some computer for as long as you want to
|
|
144
|
+
be able to use it for automation. It must be accessible on the network to whichever computer you
|
|
145
|
+
want to use to run the automation from (whether that is the same machine or one across the
|
|
146
|
+
world).
|
|
147
|
+
- Unless you want to write raw HTTP calls or use cURL, using Appium for automation involves the use
|
|
148
|
+
of an [Appium Client](clients.md) in the language of your choice. The goal of each of these
|
|
149
|
+
clients is to encapsulate the WebDriver protocol so that rather than worrying about the protocol
|
|
150
|
+
itself, you can work with objects and methods that feel idiomatic for your language.
|
|
151
|
+
- The Appium server and the Appium client do _not_ need to be running on the same computer. You
|
|
152
|
+
simply need to be able to send HTTP requests from the client to the server over some network.
|
|
153
|
+
This greatly facilitates the use of cloud providers for Appium, since they can host the Appium
|
|
154
|
+
server and any related drivers and devices, and all you need to do is point your client script to
|
|
155
|
+
their secure endpoints.
|
|
156
|
+
|
|
157
|
+
And of course, none of this is about "testing" per se, purely about the use of Appium and its
|
|
158
|
+
client libraries for automation purposes. If you want to do automation for the purpose of
|
|
159
|
+
"testing", you'll likely want to enlist the help of test runners, test frameworks, and the like,
|
|
160
|
+
none of which need be related to Appium; one of the benefits of Appium's "universal accessibility"
|
|
161
|
+
is that it plays well with whatever set of tools you find most beneficial for your situation.
|
|
162
|
+
|
|
163
|
+
## Appium's huge scope
|
|
164
|
+
|
|
165
|
+
Appium's vision (automation of everything under a single API) is huge! Certainly, much bigger than
|
|
166
|
+
the team of core maintainers for the open source project. So how does Appium hope to achieve this
|
|
167
|
+
goal? Basically, by empowering the community to develop functionality on top of Appium as
|
|
168
|
+
a _platform_. This is what we call the Appium "ecosystem".
|
|
169
|
+
|
|
170
|
+
The Appium team does officially maintain a few drivers itself (for example, the XCUITest driver
|
|
171
|
+
that we spoke about earlier). But it cannot hope to have the platform-specific expertise or the
|
|
172
|
+
capacity to maintain drivers for many different platforms. But what we have done, particularly
|
|
173
|
+
beginning with Appium 2, is to provide tools to empower the community to join in our vision:
|
|
174
|
+
|
|
175
|
+
- Anyone can create a driver simply by creating a Node.js module that conforms to the appropriate
|
|
176
|
+
conventions and implements any (sub|super)set of the WebDriver protocol. Creating a driver often
|
|
177
|
+
involves a minimal amount of code because the WebDriver protocol details are abstracted away, and
|
|
178
|
+
many helper libraries are available---the same libraries that power the Appium team's own
|
|
179
|
+
drivers.
|
|
180
|
+
- Sharing drivers with others is easy using the Appium driver CLI. There is no central authority.
|
|
181
|
+
Anyone can share drivers publicly or privately, for free or for sale. Drivers can be open or
|
|
182
|
+
closed source (though obviously we appreciate open source!).
|
|
183
|
+
|
|
184
|
+
Appium's vision of being a platform for development extends beyond the support of automation for
|
|
185
|
+
all app platforms. As a popular automation tool, there are many opportunities for integrating
|
|
186
|
+
Appium with all kinds of other tools and services. In addition, there are many feature ideas for
|
|
187
|
+
Appium, either as a core server or in its incarnation across various drivers, which the core team
|
|
188
|
+
will never have time to build. And so, with Appium 2, Appium has released a plugin system that
|
|
189
|
+
enables anyone to build and share modules that change how Appium works!
|
|
190
|
+
|
|
191
|
+
In the same way that drivers are easily shareable and consumable via the Appium driver CLI, plugins
|
|
192
|
+
can be published and consumed via a parallel [Plugin CLI](../reference/cli/extensions.md). Plugins
|
|
193
|
+
can do all sorts of things, for example adding the ability for Appium to find and interact with
|
|
194
|
+
screen regions based on a template image (as in the images). There are very few
|
|
195
|
+
limitations on what you can do with plugins, so you might also be interested in learning how to
|
|
196
|
+
[Build Plugins](../developing/build-plugins.md) in Node.js that can be used with Appium.
|
|
197
|
+
|
|
198
|
+
So that's Appium: an extensible, universal interface for the UI automation of potentially
|
|
199
|
+
everything! Read on into some of the specific intro docs for more details, or check out the various
|
|
200
|
+
guides to dive into some more general concepts and features of Appium.
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
---
|
|
2
|
+
hide:
|
|
3
|
+
- toc
|
|
4
|
+
|
|
5
|
+
title: Intro to Appium Clients
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
For all the reasons discussed in the [main Overview](./appium.md), Appium is based on the W3C
|
|
9
|
+
WebDriver specification. This means that
|
|
10
|
+
Appium implements a client-server architecture. The server (consisting of Appium itself along with
|
|
11
|
+
any drivers or plugins you are using for automation) is connected to the devices under test, and
|
|
12
|
+
is actually responsible for making automation happen on those devices. The client (driven by _you_,
|
|
13
|
+
the Appium test author) is responsible for sending commands to the server over the network, and
|
|
14
|
+
receiving responses from the server as a result. These responses can be used to tell whether
|
|
15
|
+
automation commands are successful, or might contain information that you queried about the state
|
|
16
|
+
of the application. This document is a conceptual introduction to the client side of this equation.
|
|
17
|
+
|
|
18
|
+
!!! info
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
For more about the server side of the equation (i.e., how does Appium actually control
|
|
22
|
+
devices?), check out our [Intro to Appium Drivers](./drivers.md). To skip to a list of links to
|
|
23
|
+
Appium client libraries, check out the [list of clients](../ecosystem/clients.md).
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
What sorts of automation commands are available? That is up to the particular driver and plugins
|
|
27
|
+
that you are using in any given session. A standard set of commands would include, for example, the
|
|
28
|
+
following:
|
|
29
|
+
|
|
30
|
+
- Find Element
|
|
31
|
+
- Click Element
|
|
32
|
+
- Get Page Source
|
|
33
|
+
- Take Screenshot
|
|
34
|
+
|
|
35
|
+
If you look at these commands in the WebDriver specification, you'll notice that they are not
|
|
36
|
+
defined in terms of any particular programming language. They are not Java commands, or JavaScript
|
|
37
|
+
commands, or Python commands. Instead, they form part of an HTTP API which can be accessed from
|
|
38
|
+
within _any_ programming language (or none! you could just use cURL if you want).
|
|
39
|
+
|
|
40
|
+
So, for example, the `Find Element` command corresponds to an HTTP `POST` request sent to the HTTP
|
|
41
|
+
endpoint `/session/:sessionid/element` (where in this case, `:sessionid` is a placeholder for the
|
|
42
|
+
unique session ID generated by the server in a previous call to `Create Session`).
|
|
43
|
+
|
|
44
|
+
This information is primarily useful for people developing technology that works with the WebDriver
|
|
45
|
+
spec. It's not particularly useful for people trying to write Appium or Selenium tests. When you
|
|
46
|
+
write an Appium test, you want to use a programming language you're familiar with. Luckily, there
|
|
47
|
+
exist a set of [Appium client libraries](../ecosystem/clients.md)[^1] that take care of the
|
|
48
|
+
responsibility of speaking HTTP to the Appium server. Instead, they expose a set of "native"
|
|
49
|
+
commands for a particular programming language, so that, to the test author, it just feels like
|
|
50
|
+
you're writing Python, or JavaScript, or Java.
|
|
51
|
+
|
|
52
|
+
As an example, here's the same simple set of Appium commands in five different programming
|
|
53
|
+
languages, using the recommended Appium client binding for each language (note that this is not
|
|
54
|
+
working sample code including all appropriate imports; see each client library's instructions for
|
|
55
|
+
setup and command reference):
|
|
56
|
+
|
|
57
|
+
\=== "JavaScript (Webdriver.io)"
|
|
58
|
+
|
|
59
|
+
````
|
|
60
|
+
```js
|
|
61
|
+
const element = await driver.$('//*[@text="Foo"]');
|
|
62
|
+
await element.click();
|
|
63
|
+
console.log(await element.getText())
|
|
64
|
+
console.log(await driver.getPageSource())
|
|
65
|
+
```
|
|
66
|
+
````
|
|
67
|
+
|
|
68
|
+
\=== "Java"
|
|
69
|
+
|
|
70
|
+
````
|
|
71
|
+
```java
|
|
72
|
+
WebElement element = driver.findElement(By.Xpath("//*[@text='Foo']"))
|
|
73
|
+
element.click()
|
|
74
|
+
System.out.println(element.getText())
|
|
75
|
+
System.out.println(driver.getPageSource())
|
|
76
|
+
```
|
|
77
|
+
````
|
|
78
|
+
|
|
79
|
+
\=== "Python"
|
|
80
|
+
|
|
81
|
+
````
|
|
82
|
+
```py
|
|
83
|
+
element = driver.find_element(by=By.XPATH, value='//*[@text="Foo"]')
|
|
84
|
+
element.click()
|
|
85
|
+
print(element.text)
|
|
86
|
+
print(driver.page_source)
|
|
87
|
+
```
|
|
88
|
+
````
|
|
89
|
+
|
|
90
|
+
\=== "Ruby"
|
|
91
|
+
|
|
92
|
+
````
|
|
93
|
+
```rb
|
|
94
|
+
element = driver.find_element :xpath, '//*[@text="Foo"]'
|
|
95
|
+
element.click
|
|
96
|
+
puts element.text
|
|
97
|
+
puts driver.page_source
|
|
98
|
+
```
|
|
99
|
+
````
|
|
100
|
+
|
|
101
|
+
\=== "C#"
|
|
102
|
+
|
|
103
|
+
````
|
|
104
|
+
```dotnet
|
|
105
|
+
AppiumElement element = driver.FindElement(MobileBy.AccessibilityId("Views"));
|
|
106
|
+
element.click();
|
|
107
|
+
System.Console.WriteLine(element.Text);
|
|
108
|
+
System.Console.WriteLine(driver.PageSource);
|
|
109
|
+
```
|
|
110
|
+
````
|
|
111
|
+
|
|
112
|
+
Each of these scripts, despite being in different languages, does the same thing under the hood:
|
|
113
|
+
|
|
114
|
+
1. Call `Find Element` with a `using` parameter of `xpath` and a `value` parameter expressing the
|
|
115
|
+
XPath query used to find an element. (If you're confused about these terms, you might find an
|
|
116
|
+
introduction to Appium or Selenium useful)
|
|
117
|
+
2. Call `Click Element` with the ID of the element found in the previous call.
|
|
118
|
+
3. Call `Get Element Text` with the ID of the same element, and print it to the console.
|
|
119
|
+
4. Call `Get Page Source` to retrieve the page/app source and print it to the console.
|
|
120
|
+
|
|
121
|
+
The only other thing to keep in mind before choosing or using a client is that each client is
|
|
122
|
+
independently maintained. Just because a feature is available in one client, it doesn't mean it's
|
|
123
|
+
available in another client (though all clients support at least the standard W3C protocol plus any
|
|
124
|
+
common appium extensions). Just because one client has a nice set of helper functions, doesn't mean
|
|
125
|
+
another will. Some clients are kept very frequently up to date, and others are not! So when
|
|
126
|
+
thinking about choosing a library, the first consideration is the language you want to use, and the
|
|
127
|
+
second consideration is how full-featured and well-maintained the library is!
|
|
128
|
+
|
|
129
|
+
To learn how to use an Appium client, visit that client's homepage to learn more. In many cases,
|
|
130
|
+
the Appium client for a given language is built _on top of_ the _Selenium_ client for that
|
|
131
|
+
language, and so certain Appium clients may only document the features which the Appium client
|
|
132
|
+
added on top of the Selenium client. All that to say, for a full reference, you may need to visit
|
|
133
|
+
both the Appium client documentation as well as the Selenium client documentation.
|
|
134
|
+
|
|
135
|
+
That's all you need to know about Appium clients! Head over to the
|
|
136
|
+
[Clients](../ecosystem/clients.md) page to check out the current list of clients.
|
|
137
|
+
|
|
138
|
+
[^1]: These libraries are alternately called "clients", "client libraries", or "client bindings".
|
|
139
|
+
They all mean the same thing!
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Intro to Appium Drivers
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
As the [main Overview](./appium.md) makes clear, "drivers" are basically Appium's answer to the
|
|
6
|
+
question, "how do we support automation of multiple, unrelated platforms?" In this doc we'll get
|
|
7
|
+
into a little more detail about how drivers work. The specific details of how drivers work probably
|
|
8
|
+
don't matter too much for you, unless you're planning on writing your own driver or contributing to
|
|
9
|
+
an existing driver (things we hope you do!).
|
|
10
|
+
|
|
11
|
+
The main benefit in understanding a bit more of how drivers work is that being aware of the typical
|
|
12
|
+
complexity or the typical driver architecture will inform your debugging process when you
|
|
13
|
+
inevitably run into an issue in one of your tests.
|
|
14
|
+
|
|
15
|
+
## Interface Implementations
|
|
16
|
+
|
|
17
|
+
At the most basic level, drivers are simply Node.js classes that extend a special class included in
|
|
18
|
+
Appium, called `BaseDriver`. You could have something very close to a "working" driver, with these
|
|
19
|
+
very simple lines of code:
|
|
20
|
+
|
|
21
|
+
```js
|
|
22
|
+
import BaseDriver from '@appium/base-driver'
|
|
23
|
+
|
|
24
|
+
class MyNewDriver extends BaseDriver {
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
This empty driver doesn't _do_ anything, but you could wrap it up in a Node.js module, add a few
|
|
29
|
+
Appium-related fields to the module's manifest (`package.json`), and then install it using `appium
|
|
30
|
+
driver install`.
|
|
31
|
+
|
|
32
|
+
So, from a technical perspective, an Appium driver is just a bit of code that inherits from some
|
|
33
|
+
other Appium code. That's it! Now, inheriting from `BaseDriver` actually gives us a lot, because
|
|
34
|
+
`BaseDriver` is essentially an encapsulation of the entire WebDriver protocol. So all a driver
|
|
35
|
+
needs to do something useful is to _implement_ Node.js methods with names corresponding to
|
|
36
|
+
their WebDriver protocol equivalents.
|
|
37
|
+
|
|
38
|
+
So let's say I wanted to do something with this empty driver; first I have to decide which
|
|
39
|
+
WebDriver command I want to implement. For our example, let's take the Navigate
|
|
40
|
+
To WebDriver command. Leave aside for the moment
|
|
41
|
+
what I want to have the driver _do_ when this command is executed. To tell Appium the driver can
|
|
42
|
+
handle the command, all we have to do is define a method like this in our driver class:[^1]
|
|
43
|
+
|
|
44
|
+
```js
|
|
45
|
+
async setUrl(url) {
|
|
46
|
+
// do whatever we want here
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
[^1]: You might notice that `setUrl` doesn't look anything like `Navigate To`, so how did we know
|
|
51
|
+
to use it rather than some other random string? Well, Appium's WebDriver-protocol-to-method-name
|
|
52
|
+
mapping is defined in a special file within the `@appium/base-driver` package called
|
|
53
|
+
[routes.js](https://github.com/appium/appium/blob/master/packages/base-driver/lib/protocol/routes.js).
|
|
54
|
+
So if you're writing a driver, this is where you would go to figure out what method names to use
|
|
55
|
+
and what parameters to expect. Or you could look at the source for any of the main Appium
|
|
56
|
+
drivers!
|
|
57
|
+
|
|
58
|
+
That's it! How we actually implement the command is totally up to us, and depends on the
|
|
59
|
+
platform(s) we want to support. Here are some different example implementations of this command for
|
|
60
|
+
different platforms:
|
|
61
|
+
|
|
62
|
+
- Browsers: execute some JavaScript to set `window.location.href`
|
|
63
|
+
- iOS apps: launch an app using a deep link
|
|
64
|
+
- Android apps: launch an app using a deep link
|
|
65
|
+
- React apps: load a specific route
|
|
66
|
+
- Unity: go to a named scene
|
|
67
|
+
|
|
68
|
+
So you can see there can be a lot of differences between how drivers implement the same WebDriver
|
|
69
|
+
command across platforms.[^2] What is the _same_, though, is how they express that they can handle
|
|
70
|
+
a protocol command.
|
|
71
|
+
|
|
72
|
+
[^2]: Of course, we want to keep the semantics as similar as possible, but in the world of iOS, for
|
|
73
|
+
example, launching an app via a deep link (a URL with a special app-specific scheme) is about as
|
|
74
|
+
close as we are going to get to navigating to a web URL.
|
|
75
|
+
|
|
76
|
+
We're going into this great amount of detail (which you don't need to remember, by the way),
|
|
77
|
+
because it's important to stress the point that an Appium driver is not inherently anything in
|
|
78
|
+
particular, other than a bit of JS code that can handle WebDriver protocol commands. Where you go
|
|
79
|
+
from there is up to you, the driver author!
|
|
80
|
+
|
|
81
|
+
## Automation mapping
|
|
82
|
+
|
|
83
|
+
But _typically_ what driver authors want to do is to provide automation behaviours for a given
|
|
84
|
+
platform(s) that are semantically very similar to the the WebDriver spec implementations for
|
|
85
|
+
browsers. When you want to find an element, you should get a reference to a UI element. When you
|
|
86
|
+
want to click or tap that element, the resulting behaviour should be the same as if a person were
|
|
87
|
+
to click or tap on the element. And so on.
|
|
88
|
+
|
|
89
|
+
So the real challenge for driver authors is not how to work with the WebDriver protocol (because
|
|
90
|
+
`BaseDriver` encapsulates all that for you), but how to make the actual automation happen on the
|
|
91
|
+
target platform. Every driver relies on its own set of underlying technologies here. As mentioned
|
|
92
|
+
in the [Overview](index.md), the iOS driver uses an Apple technology called
|
|
93
|
+
[XCUITest](https://developer.apple.com/documentation/xctest/xcuielement). These underlying
|
|
94
|
+
automation technologies usually have proprietary or idiosyncratic APIs of their own. Writing
|
|
95
|
+
a driver becomes the task of mapping the WebDriver protocol to this underlying API (or sometimes
|
|
96
|
+
a set of different underlying APIs--for example, the UiAutomator2 driver relies not only on the
|
|
97
|
+
[UiAutomator2](https://developer.android.com/training/testing/other-components/ui-automator)
|
|
98
|
+
technology from Google, but also functions only available through
|
|
99
|
+
[ADB](https://developer.android.com/tools/adb), as well as functions only available
|
|
100
|
+
via the Android SDK inside a helper app). Tying it all together into a single, usable, WebDriver
|
|
101
|
+
interface is the incredibly useful (but incredibly challenging) art of driver development!
|
|
102
|
+
|
|
103
|
+
## Multi-level architecture
|
|
104
|
+
|
|
105
|
+
In practice, this often results in a pretty complex architecture. Let's take iOS for example again.
|
|
106
|
+
The XCUITest framework (the one used by the Appium driver) expects code that calls it to be written
|
|
107
|
+
in Objective-C or Swift. Furthermore, XCUITest code can only be run in a special mode triggered by
|
|
108
|
+
Xcode (and directly or indirectly, the Xcode command line tools). In other words, there's no
|
|
109
|
+
straightforward way to go from a Node.js function implementation (like `setUrl()` above) to
|
|
110
|
+
XCUITest API calls.
|
|
111
|
+
|
|
112
|
+
What the XCUITest driver authors have done is instead to split the driver into two parts: one part
|
|
113
|
+
written in Node.js (the part which is incorporated into Appium and which initially handles the
|
|
114
|
+
WebDriver commands), and the other part written in Objective-C (the part which actually gets run on
|
|
115
|
+
an iOS device and makes XCUITest API calls). This makes interfacing with XCUITest possible, but
|
|
116
|
+
introduces the new problem of coordination between the two parts.
|
|
117
|
+
|
|
118
|
+
The driver authors could have chosen any of a number of very different strategies to model the
|
|
119
|
+
communication between the Node.js side and the Objective-C side, but at the end of the day decided
|
|
120
|
+
to use ... the WebDriver protocol! That's right, the Objective-C side of the XCUITest driver is
|
|
121
|
+
itself a WebDriver implementation, called
|
|
122
|
+
[WebDriverAgent](https://github.com/appium/webdriveragent).[^3]
|
|
123
|
+
|
|
124
|
+
[^3]: You could in theory, therefore, point your WebDriver client straight to WebDriverAgent and
|
|
125
|
+
bypass Appium entirely. This is usually not convenient, however, for a few reasons:
|
|
126
|
+
|
|
127
|
+
- The Appium XCUITest driver builds and manages WebDriverAgent for you, which can be a pain and
|
|
128
|
+
involves the use of Xcode.
|
|
129
|
+
- The XCUITest driver does lots more than what can be done by WebDriverAgent, for example working
|
|
130
|
+
with simulators or devices, installing apps, and the like.
|
|
131
|
+
|
|
132
|
+
The moral of the story is that driver architectures can become quite complicated and multilayered,
|
|
133
|
+
due to the nature of the problem we're trying to solve. It also means it can be difficult sometimes
|
|
134
|
+
to tell where in this chain of technologies something has gone wrong, if you run into a problem
|
|
135
|
+
with a particular test. With the XCUITest world again, we have something like the following set of
|
|
136
|
+
technologies all in play at the same time:
|
|
137
|
+
|
|
138
|
+
- Your test code (in its programming language) - owned by you
|
|
139
|
+
- The Appium client library - owned by Appium
|
|
140
|
+
- The Selenium client library - owned by Selenium
|
|
141
|
+
- The network (local or Internet)
|
|
142
|
+
- The Appium server - owned by Appium
|
|
143
|
+
- The Appium XCUITest driver - owned by Appium
|
|
144
|
+
- WebDriverAgent - owned by Appium
|
|
145
|
+
- Xcode - owned by Apple
|
|
146
|
+
- XCUITest - owned by Apple
|
|
147
|
+
- iOS itself - owned by Apple
|
|
148
|
+
- macOS (where Xcode and iOS simulators run) - owned by Apple
|
|
149
|
+
|
|
150
|
+
It's a pretty deep stack!
|
|
151
|
+
|
|
152
|
+
## Proxy mode
|
|
153
|
+
|
|
154
|
+
There's one other important architectural aspect of drivers to understand. It can be exemplified
|
|
155
|
+
again by the XCUITest driver. Recall that we just discussed how the two "halves" of the XCUITest
|
|
156
|
+
driver both speak the WebDriver protocol---the Node.js half clicks right into Appium's WebDriver
|
|
157
|
+
server, and the Objective-c half (WebDriverAgent) is its own WebDriver implementation.
|
|
158
|
+
|
|
159
|
+
This opens up the possibility of Appium taking a shortcut in certain cases. Let's imagine that the
|
|
160
|
+
XCUITest driver needs to implement the `Click Element` command. The internal code of this
|
|
161
|
+
implementation would look something like taking the appropriate parameters and constructing an HTTP
|
|
162
|
+
request to the WebDriverAgent server. In this case, we're basically just reconstructing the
|
|
163
|
+
client's original call to the Appium server\![^4] So there's really no need to even write a function
|
|
164
|
+
implementing the `Click Element` command. Instead, the XCUITest driver can just let Appium know
|
|
165
|
+
that this command should be proxied directly to some other WebDriver server.
|
|
166
|
+
|
|
167
|
+
[^4]: It's not _exactly_ the same call, because the Appium server and the WebDriverAgent server
|
|
168
|
+
will generate different session IDs, but these differences will be handled transparently.
|
|
169
|
+
|
|
170
|
+
If you're not familiar with the concept of "proxying," in this case it just means that the XCUITest
|
|
171
|
+
driver will not be involved at all in handling the command. Instead it will merely be repackaged
|
|
172
|
+
and forwarded to WebDriverAgent at the protocol level, and WebDriverAgent's response will likewise
|
|
173
|
+
be passed back directly to the client, without any XCUITest driver code seeing it or modifying it.
|
|
174
|
+
|
|
175
|
+
This architectural pattern provides a nice bonus for driver authors who choose to deal with the
|
|
176
|
+
WebDriver protocol everywhere, rather than constructing bespoke protocols. It also means that
|
|
177
|
+
Appium can create wrapper drivers for any other existing WebDriver implementation very easily. If
|
|
178
|
+
you look at the [Appium Safari driver](https://github.com/appium/appium-safari-driver) code, for
|
|
179
|
+
example, you'll see that it implements basically no standard commands, because all of these are
|
|
180
|
+
proxied directly to an underlying SafariDriver process.
|
|
181
|
+
|
|
182
|
+
It's important to understand that this proxying business is sometimes happening under the hood,
|
|
183
|
+
because if you're ever diving into some open source driver code trying to figure out where
|
|
184
|
+
a command is implemented, you might be surprised to find no implementation at all in the Node.js
|
|
185
|
+
driver code itself! In that case, you'll need to figure out where commands are being proxied to so
|
|
186
|
+
you can look there for the appropriate implementation.
|
|
187
|
+
|
|
188
|
+
OK, that's enough for this very detailed introduction to drivers!
|