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.
Files changed (589) hide show
  1. package/.github/workflows/ci.yml +37 -0
  2. package/.github/workflows/pr-title.yml +15 -0
  3. package/.github/workflows/publish.yml +31 -0
  4. package/.gitmodules +9 -0
  5. package/.prettierignore +29 -0
  6. package/.prettierrc +10 -0
  7. package/.releaserc +37 -0
  8. package/CHANGELOG.md +43 -0
  9. package/LICENSE +21 -0
  10. package/README.md +153 -0
  11. package/dist/devicemanager/adb-manager.d.ts +71 -0
  12. package/dist/devicemanager/adb-manager.js +140 -0
  13. package/dist/devicemanager/adb-manager.js.map +1 -0
  14. package/dist/devicemanager/ios-manager.d.ts +58 -0
  15. package/dist/devicemanager/ios-manager.js +122 -0
  16. package/dist/devicemanager/ios-manager.js.map +1 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.js +40 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/locators/element-filter.d.ts +13 -0
  21. package/dist/locators/element-filter.js +79 -0
  22. package/dist/locators/element-filter.js.map +1 -0
  23. package/dist/locators/generate-all-locators.d.ts +21 -0
  24. package/dist/locators/generate-all-locators.js +72 -0
  25. package/dist/locators/generate-all-locators.js.map +1 -0
  26. package/dist/locators/locator-generation.d.ts +36 -0
  27. package/dist/locators/locator-generation.js +501 -0
  28. package/dist/locators/locator-generation.js.map +1 -0
  29. package/dist/locators/logger.d.ts +5 -0
  30. package/dist/locators/logger.js +9 -0
  31. package/dist/locators/logger.js.map +1 -0
  32. package/dist/locators/source-parsing.d.ts +43 -0
  33. package/dist/locators/source-parsing.js +100 -0
  34. package/dist/locators/source-parsing.js.map +1 -0
  35. package/dist/resources/index.d.ts +1 -0
  36. package/dist/resources/index.js +7 -0
  37. package/dist/resources/index.js.map +1 -0
  38. package/dist/resources/java/template.d.ts +4 -0
  39. package/dist/resources/java/template.js +82 -0
  40. package/dist/resources/java/template.js.map +1 -0
  41. package/dist/schema.d.ts +2 -0
  42. package/dist/schema.js +5 -0
  43. package/dist/schema.js.map +1 -0
  44. package/dist/scripts/simple-index-documentation.d.ts +20 -0
  45. package/dist/scripts/simple-index-documentation.js +77 -0
  46. package/dist/scripts/simple-index-documentation.js.map +1 -0
  47. package/dist/scripts/simple-query-documentation.d.ts +12 -0
  48. package/dist/scripts/simple-query-documentation.js +52 -0
  49. package/dist/scripts/simple-query-documentation.js.map +1 -0
  50. package/dist/server.d.ts +3 -0
  51. package/dist/server.js +37 -0
  52. package/dist/server.js.map +1 -0
  53. package/dist/tests/__mocks__/@appium/support.d.ts +21 -0
  54. package/dist/tests/__mocks__/@appium/support.js +30 -0
  55. package/dist/tests/__mocks__/@appium/support.js.map +1 -0
  56. package/dist/tests/generate-all-locators.test.d.ts +1 -0
  57. package/dist/tests/generate-all-locators.test.js +140 -0
  58. package/dist/tests/generate-all-locators.test.js.map +1 -0
  59. package/dist/tests/test-setup-wda.d.ts +1 -0
  60. package/dist/tests/test-setup-wda.js +202 -0
  61. package/dist/tests/test-setup-wda.js.map +1 -0
  62. package/dist/tools/answer-appium.d.ts +1 -0
  63. package/dist/tools/answer-appium.js +71 -0
  64. package/dist/tools/answer-appium.js.map +1 -0
  65. package/dist/tools/boot-simulator.d.ts +1 -0
  66. package/dist/tools/boot-simulator.js +71 -0
  67. package/dist/tools/boot-simulator.js.map +1 -0
  68. package/dist/tools/create-session.d.ts +1 -0
  69. package/dist/tools/create-session.js +192 -0
  70. package/dist/tools/create-session.js.map +1 -0
  71. package/dist/tools/delete-session.d.ts +1 -0
  72. package/dist/tools/delete-session.js +47 -0
  73. package/dist/tools/delete-session.js.map +1 -0
  74. package/dist/tools/documentation/index.d.ts +28 -0
  75. package/dist/tools/documentation/index.js +63 -0
  76. package/dist/tools/documentation/index.js.map +1 -0
  77. package/dist/tools/documentation/reasoning-rag.d.ts +88 -0
  78. package/dist/tools/documentation/reasoning-rag.js +281 -0
  79. package/dist/tools/documentation/reasoning-rag.js.map +1 -0
  80. package/dist/tools/documentation/sentence-transformers-embeddings.d.ts +34 -0
  81. package/dist/tools/documentation/sentence-transformers-embeddings.js +111 -0
  82. package/dist/tools/documentation/sentence-transformers-embeddings.js.map +1 -0
  83. package/dist/tools/documentation/simple-pdf-indexer.d.ts +45 -0
  84. package/dist/tools/documentation/simple-pdf-indexer.js +402 -0
  85. package/dist/tools/documentation/simple-pdf-indexer.js.map +1 -0
  86. package/dist/tools/documentation/uploads/documents.json +1 -0
  87. package/dist/tools/generate-tests.d.ts +2 -0
  88. package/dist/tools/generate-tests.js +46 -0
  89. package/dist/tools/generate-tests.js.map +1 -0
  90. package/dist/tools/index.d.ts +16 -0
  91. package/dist/tools/index.js +114 -0
  92. package/dist/tools/index.js.map +1 -0
  93. package/dist/tools/install-wda.d.ts +1 -0
  94. package/dist/tools/install-wda.js +219 -0
  95. package/dist/tools/install-wda.js.map +1 -0
  96. package/dist/tools/interactions/activate-app.d.ts +2 -0
  97. package/dist/tools/interactions/activate-app.js +44 -0
  98. package/dist/tools/interactions/activate-app.js.map +1 -0
  99. package/dist/tools/interactions/click.d.ts +2 -0
  100. package/dist/tools/interactions/click.js +45 -0
  101. package/dist/tools/interactions/click.js.map +1 -0
  102. package/dist/tools/interactions/double-tap.d.ts +2 -0
  103. package/dist/tools/interactions/double-tap.js +81 -0
  104. package/dist/tools/interactions/double-tap.js.map +1 -0
  105. package/dist/tools/interactions/find.d.ts +13 -0
  106. package/dist/tools/interactions/find.js +55 -0
  107. package/dist/tools/interactions/find.js.map +1 -0
  108. package/dist/tools/interactions/get-page-source.d.ts +2 -0
  109. package/dist/tools/interactions/get-page-source.js +48 -0
  110. package/dist/tools/interactions/get-page-source.js.map +1 -0
  111. package/dist/tools/interactions/get-text.d.ts +2 -0
  112. package/dist/tools/interactions/get-text.js +45 -0
  113. package/dist/tools/interactions/get-text.js.map +1 -0
  114. package/dist/tools/interactions/install-app.d.ts +2 -0
  115. package/dist/tools/interactions/install-app.js +43 -0
  116. package/dist/tools/interactions/install-app.js.map +1 -0
  117. package/dist/tools/interactions/list-apps.d.ts +2 -0
  118. package/dist/tools/interactions/list-apps.js +59 -0
  119. package/dist/tools/interactions/list-apps.js.map +1 -0
  120. package/dist/tools/interactions/screenshot.d.ts +2 -0
  121. package/dist/tools/interactions/screenshot.js +49 -0
  122. package/dist/tools/interactions/screenshot.js.map +1 -0
  123. package/dist/tools/interactions/set-value.d.ts +2 -0
  124. package/dist/tools/interactions/set-value.js +46 -0
  125. package/dist/tools/interactions/set-value.js.map +1 -0
  126. package/dist/tools/interactions/terminate-app.d.ts +2 -0
  127. package/dist/tools/interactions/terminate-app.js +45 -0
  128. package/dist/tools/interactions/terminate-app.js.map +1 -0
  129. package/dist/tools/interactions/uninstall-app.d.ts +2 -0
  130. package/dist/tools/interactions/uninstall-app.js +45 -0
  131. package/dist/tools/interactions/uninstall-app.js.map +1 -0
  132. package/dist/tools/locators.d.ts +1 -0
  133. package/dist/tools/locators.js +71 -0
  134. package/dist/tools/locators.js.map +1 -0
  135. package/dist/tools/scroll-to-element.d.ts +1 -0
  136. package/dist/tools/scroll-to-element.js +155 -0
  137. package/dist/tools/scroll-to-element.js.map +1 -0
  138. package/dist/tools/scroll.d.ts +1 -0
  139. package/dist/tools/scroll.js +91 -0
  140. package/dist/tools/scroll.js.map +1 -0
  141. package/dist/tools/select-device.d.ts +5 -0
  142. package/dist/tools/select-device.js +222 -0
  143. package/dist/tools/select-device.js.map +1 -0
  144. package/dist/tools/select-platform.d.ts +1 -0
  145. package/dist/tools/select-platform.js +195 -0
  146. package/dist/tools/select-platform.js.map +1 -0
  147. package/dist/tools/session-store.d.ts +7 -0
  148. package/dist/tools/session-store.js +64 -0
  149. package/dist/tools/session-store.js.map +1 -0
  150. package/dist/tools/setup-wda.d.ts +1 -0
  151. package/dist/tools/setup-wda.js +177 -0
  152. package/dist/tools/setup-wda.js.map +1 -0
  153. package/docs/CONTRIBUTING.md +424 -0
  154. package/eslint.config.js +49 -0
  155. package/examples/android-gmail.md +7 -0
  156. package/examples/android-todo-app.md +9 -0
  157. package/jest.config.js +23 -0
  158. package/package.json +71 -6
  159. package/scripts/setup-submodules-sparse.sh +53 -0
  160. package/scripts/update-submodules.sh +14 -0
  161. package/src/devicemanager/adb-manager.ts +164 -0
  162. package/src/devicemanager/ios-manager.ts +145 -0
  163. package/src/index.ts +47 -0
  164. package/src/locators/element-filter.ts +134 -0
  165. package/src/locators/generate-all-locators.ts +149 -0
  166. package/src/locators/locator-generation.ts +657 -0
  167. package/src/locators/logger.ts +11 -0
  168. package/src/locators/source-parsing.ts +149 -0
  169. package/src/resources/caps.json +697 -0
  170. package/src/resources/index.ts +7 -0
  171. package/src/resources/java/template.ts +83 -0
  172. package/src/resources/submodules/appium/.github/PULL_REQUEST_TEMPLATE.md +28 -0
  173. package/src/resources/submodules/appium/CHANGELOG.md +45 -0
  174. package/src/resources/submodules/appium/CONDUCT.md +48 -0
  175. package/src/resources/submodules/appium/GOVERNANCE.md +185 -0
  176. package/src/resources/submodules/appium/IDEAS.md +16 -0
  177. package/src/resources/submodules/appium/README.md +221 -0
  178. package/src/resources/submodules/appium/ROADMAP.md +30 -0
  179. package/src/resources/submodules/appium/SPONSORS.md +3 -0
  180. package/src/resources/submodules/appium/docs/README.md +6 -0
  181. package/src/resources/submodules/appium/docs/payout.md +35 -0
  182. package/src/resources/submodules/appium/packages/appium/CHANGELOG.md +1437 -0
  183. package/src/resources/submodules/appium/packages/appium/README.md +221 -0
  184. package/src/resources/submodules/appium/packages/appium/docs/en/blog/index.md +2 -0
  185. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-appiumconf2024.md +45 -0
  186. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
  187. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-headspin-as-development-partner.md +47 -0
  188. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-lambdatest-as-strategic-partner.md +42 -0
  189. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
  190. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-sponsorship-program.md +48 -0
  191. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/appium3.md +40 -0
  192. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/hello-world.md +15 -0
  193. package/src/resources/submodules/appium/packages/appium/docs/en/contributing/index.md +150 -0
  194. package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-docs.md +86 -0
  195. package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-doctor-checks.md +141 -0
  196. package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-drivers.md +860 -0
  197. package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-plugins.md +514 -0
  198. package/src/resources/submodules/appium/packages/appium/docs/en/developing/config-system.md +451 -0
  199. package/src/resources/submodules/appium/packages/appium/docs/en/developing/index.md +18 -0
  200. package/src/resources/submodules/appium/packages/appium/docs/en/developing/sensitive.md +49 -0
  201. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/clients.md +132 -0
  202. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/drivers.md +207 -0
  203. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/index.md +45 -0
  204. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/plugins.md +138 -0
  205. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/tools.md +83 -0
  206. package/src/resources/submodules/appium/packages/appium/docs/en/guides/branch-testing.md +57 -0
  207. package/src/resources/submodules/appium/packages/appium/docs/en/guides/caching.md +76 -0
  208. package/src/resources/submodules/appium/packages/appium/docs/en/guides/caps.md +275 -0
  209. package/src/resources/submodules/appium/packages/appium/docs/en/guides/config.md +98 -0
  210. package/src/resources/submodules/appium/packages/appium/docs/en/guides/context.md +44 -0
  211. package/src/resources/submodules/appium/packages/appium/docs/en/guides/event-timing.md +73 -0
  212. package/src/resources/submodules/appium/packages/appium/docs/en/guides/execute-methods.md +122 -0
  213. package/src/resources/submodules/appium/packages/appium/docs/en/guides/grid.md +166 -0
  214. package/src/resources/submodules/appium/packages/appium/docs/en/guides/headers.md +17 -0
  215. package/src/resources/submodules/appium/packages/appium/docs/en/guides/log-filters.md +86 -0
  216. package/src/resources/submodules/appium/packages/appium/docs/en/guides/managing-exts.md +87 -0
  217. package/src/resources/submodules/appium/packages/appium/docs/en/guides/migrating-1-to-2.md +368 -0
  218. package/src/resources/submodules/appium/packages/appium/docs/en/guides/migrating-2-to-3.md +464 -0
  219. package/src/resources/submodules/appium/packages/appium/docs/en/guides/security.md +89 -0
  220. package/src/resources/submodules/appium/packages/appium/docs/en/guides/settings.md +68 -0
  221. package/src/resources/submodules/appium/packages/appium/docs/en/guides/tls.md +42 -0
  222. package/src/resources/submodules/appium/packages/appium/docs/en/index.md +59 -0
  223. package/src/resources/submodules/appium/packages/appium/docs/en/intro/appium.md +202 -0
  224. package/src/resources/submodules/appium/packages/appium/docs/en/intro/clients.md +127 -0
  225. package/src/resources/submodules/appium/packages/appium/docs/en/intro/drivers.md +188 -0
  226. package/src/resources/submodules/appium/packages/appium/docs/en/intro/history.md +196 -0
  227. package/src/resources/submodules/appium/packages/appium/docs/en/intro/index.md +39 -0
  228. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/index.md +29 -0
  229. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/install.md +50 -0
  230. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/next-steps.md +23 -0
  231. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/requirements.md +29 -0
  232. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-dotnet.md +105 -0
  233. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-java.md +23 -0
  234. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-js.md +75 -0
  235. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-py.md +60 -0
  236. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-rb.md +83 -0
  237. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/uiauto2-driver.md +144 -0
  238. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/appium.md +394 -0
  239. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/bidi.md +70 -0
  240. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/index.md +30 -0
  241. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/jsonwp.md +214 -0
  242. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/mjsonwp.md +151 -0
  243. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/others.md +671 -0
  244. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/plugins.md +289 -0
  245. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/webdriver.md +1114 -0
  246. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/env-vars.md +31 -0
  247. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/extensions.md +239 -0
  248. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/index.md +35 -0
  249. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/server.md +76 -0
  250. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/setup.md +76 -0
  251. package/src/resources/submodules/appium/packages/appium/docs/en/reference/index.md +25 -0
  252. package/src/resources/submodules/appium/packages/appium/docs/en/resources/index.md +28 -0
  253. package/src/resources/submodules/appium/packages/appium/docs/en/sponsors/index.md +64 -0
  254. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/index.md +2 -0
  255. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-appiumconf2024.md +45 -0
  256. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
  257. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-headspin-as-development-partner.md +47 -0
  258. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-lambdatest-as-strategic-partner.md +41 -0
  259. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
  260. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-sponsorship-program.md +48 -0
  261. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/appium3.md +40 -0
  262. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/hello-world.md +15 -0
  263. package/src/resources/submodules/appium/packages/appium/docs/ja/contributing/index.md +158 -0
  264. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-docs.md +86 -0
  265. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-doctor-checks.md +141 -0
  266. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-drivers.md +866 -0
  267. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-plugins.md +520 -0
  268. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/config-system.md +468 -0
  269. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/index.md +18 -0
  270. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/sensitive.md +49 -0
  271. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/clients.md +143 -0
  272. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/drivers.md +219 -0
  273. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/index.md +45 -0
  274. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/plugins.md +140 -0
  275. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/tools.md +87 -0
  276. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/branch-testing.md +57 -0
  277. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/caching.md +78 -0
  278. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/caps.md +259 -0
  279. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/config.md +102 -0
  280. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/context.md +44 -0
  281. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/event-timing.md +75 -0
  282. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/execute-methods.md +142 -0
  283. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/grid.md +166 -0
  284. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/headers.md +17 -0
  285. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/log-filters.md +86 -0
  286. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/managing-exts.md +89 -0
  287. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/migrating-1-to-2.md +402 -0
  288. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/migrating-2-to-3.md +458 -0
  289. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/security.md +89 -0
  290. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/settings.md +70 -0
  291. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/tls.md +43 -0
  292. package/src/resources/submodules/appium/packages/appium/docs/ja/index.md +55 -0
  293. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/appium.md +191 -0
  294. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/clients.md +139 -0
  295. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/drivers.md +188 -0
  296. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/history.md +196 -0
  297. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/index.md +39 -0
  298. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/index.md +23 -0
  299. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/install.md +47 -0
  300. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/next-steps.md +19 -0
  301. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/requirements.md +29 -0
  302. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-dotnet.md +107 -0
  303. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-java.md +23 -0
  304. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-js.md +77 -0
  305. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-py.md +63 -0
  306. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-rb.md +85 -0
  307. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/uiauto2-driver.md +148 -0
  308. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/appium.md +395 -0
  309. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/bidi.md +71 -0
  310. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/index.md +30 -0
  311. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/jsonwp.md +215 -0
  312. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/mjsonwp.md +152 -0
  313. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/others.md +672 -0
  314. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/plugins.md +291 -0
  315. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/webdriver.md +1114 -0
  316. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/env-vars.md +31 -0
  317. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/extensions.md +240 -0
  318. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/index.md +35 -0
  319. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/server.md +76 -0
  320. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/setup.md +78 -0
  321. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/index.md +25 -0
  322. package/src/resources/submodules/appium/packages/appium/docs/ja/resources/index.md +28 -0
  323. package/src/resources/submodules/appium/packages/appium/docs/ja/sponsors/index.md +61 -0
  324. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-horiz-white.png +0 -0
  325. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-horiz.png +0 -0
  326. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-white.png +0 -0
  327. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo.png +0 -0
  328. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-dark.png +0 -0
  329. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-light.png +0 -0
  330. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-dark.png +0 -0
  331. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-light.png +0 -0
  332. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-sauce.png +0 -0
  333. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/index.md +2 -0
  334. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-appiumconf2024.md +45 -0
  335. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
  336. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-headspin-as-development-partner.md +47 -0
  337. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-lambdatest-as-strategic-partner.md +41 -0
  338. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
  339. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-sponsorship-program.md +48 -0
  340. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/appium3.md +40 -0
  341. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/hello-world.md +15 -0
  342. package/src/resources/submodules/appium/packages/appium/docs/zh/contributing/index.md +132 -0
  343. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-docs.md +86 -0
  344. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-doctor-checks.md +141 -0
  345. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-drivers.md +866 -0
  346. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-plugins.md +520 -0
  347. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/config-system.md +468 -0
  348. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/index.md +18 -0
  349. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/sensitive.md +49 -0
  350. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/clients.md +143 -0
  351. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/drivers.md +219 -0
  352. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/index.md +45 -0
  353. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/plugins.md +140 -0
  354. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/tools.md +87 -0
  355. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/branch-testing.md +57 -0
  356. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/caching.md +78 -0
  357. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/caps.md +284 -0
  358. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/config.md +102 -0
  359. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/context.md +44 -0
  360. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/event-timing.md +75 -0
  361. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/execute-methods.md +142 -0
  362. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/grid.md +166 -0
  363. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/headers.md +17 -0
  364. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/log-filters.md +86 -0
  365. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/managing-exts.md +89 -0
  366. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/migrating-1-to-2.md +410 -0
  367. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/migrating-2-to-3.md +459 -0
  368. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/security.md +89 -0
  369. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/settings.md +70 -0
  370. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/tls.md +43 -0
  371. package/src/resources/submodules/appium/packages/appium/docs/zh/index.md +54 -0
  372. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/appium.md +200 -0
  373. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/clients.md +139 -0
  374. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/drivers.md +188 -0
  375. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/history.md +196 -0
  376. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/index.md +39 -0
  377. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/index.md +23 -0
  378. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/install.md +47 -0
  379. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/next-steps.md +19 -0
  380. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/requirements.md +21 -0
  381. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-dotnet.md +99 -0
  382. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-java.md +20 -0
  383. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-js.md +62 -0
  384. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-py.md +57 -0
  385. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-rb.md +80 -0
  386. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/uiauto2-driver.md +148 -0
  387. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/appium.md +395 -0
  388. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/bidi.md +71 -0
  389. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/index.md +30 -0
  390. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/jsonwp.md +215 -0
  391. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/mjsonwp.md +152 -0
  392. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/others.md +672 -0
  393. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/plugins.md +291 -0
  394. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/webdriver.md +1114 -0
  395. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/env-vars.md +31 -0
  396. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/extensions.md +240 -0
  397. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/index.md +35 -0
  398. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/server.md +76 -0
  399. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/setup.md +78 -0
  400. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/index.md +25 -0
  401. package/src/resources/submodules/appium/packages/appium/docs/zh/resources/index.md +28 -0
  402. package/src/resources/submodules/appium/packages/appium/docs/zh/sponsors/index.md +61 -0
  403. package/src/resources/submodules/appium/packages/appium/types/manifest/README.md +30 -0
  404. package/src/resources/submodules/appium/packages/base-driver/CHANGELOG.md +1131 -0
  405. package/src/resources/submodules/appium/packages/base-driver/README.md +15 -0
  406. package/src/resources/submodules/appium/packages/base-driver/docs/mjsonwp/errors.md +82 -0
  407. package/src/resources/submodules/appium/packages/base-driver/docs/mjsonwp/protocol-methods.md +182 -0
  408. package/src/resources/submodules/appium/packages/base-driver/static/appium.png +0 -0
  409. package/src/resources/submodules/appium/packages/base-plugin/CHANGELOG.md +672 -0
  410. package/src/resources/submodules/appium/packages/base-plugin/README.md +15 -0
  411. package/src/resources/submodules/appium/packages/docutils/CHANGELOG.md +948 -0
  412. package/src/resources/submodules/appium/packages/docutils/README.md +27 -0
  413. package/src/resources/submodules/appium/packages/driver-test-support/CHANGELOG.md +717 -0
  414. package/src/resources/submodules/appium/packages/driver-test-support/README.md +112 -0
  415. package/src/resources/submodules/appium/packages/eslint-config-appium-ts/CHANGELOG.md +168 -0
  416. package/src/resources/submodules/appium/packages/eslint-config-appium-ts/README.md +33 -0
  417. package/src/resources/submodules/appium/packages/execute-driver-plugin/CHANGELOG.md +603 -0
  418. package/src/resources/submodules/appium/packages/execute-driver-plugin/README.md +42 -0
  419. package/src/resources/submodules/appium/packages/fake-driver/CHANGELOG.md +545 -0
  420. package/src/resources/submodules/appium/packages/fake-driver/README.md +7 -0
  421. package/src/resources/submodules/appium/packages/fake-driver/lib/screen.png +0 -0
  422. package/src/resources/submodules/appium/packages/fake-plugin/CHANGELOG.md +683 -0
  423. package/src/resources/submodules/appium/packages/fake-plugin/README.md +7 -0
  424. package/src/resources/submodules/appium/packages/images-plugin/CHANGELOG.md +602 -0
  425. package/src/resources/submodules/appium/packages/images-plugin/README.md +27 -0
  426. package/src/resources/submodules/appium/packages/images-plugin/docs/find-by-image.md +65 -0
  427. package/src/resources/submodules/appium/packages/images-plugin/docs/image-comparison.md +203 -0
  428. package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/appstore.png +0 -0
  429. package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/img1.png +0 -0
  430. package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/img2.png +0 -0
  431. package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/img2_part.png +0 -0
  432. package/src/resources/submodules/appium/packages/logger/CHANGELOG.md +162 -0
  433. package/src/resources/submodules/appium/packages/logger/README.md +31 -0
  434. package/src/resources/submodules/appium/packages/opencv/CHANGELOG.md +384 -0
  435. package/src/resources/submodules/appium/packages/opencv/README.md +68 -0
  436. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/appium-diagram.jpg +0 -0
  437. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/cc1.png +0 -0
  438. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/cc2.png +0 -0
  439. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/cc_rotated.png +0 -0
  440. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/findwaldo.jpg +0 -0
  441. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/number5.png +0 -0
  442. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/waldo.jpg +0 -0
  443. package/src/resources/submodules/appium/packages/plugin-test-support/CHANGELOG.md +539 -0
  444. package/src/resources/submodules/appium/packages/plugin-test-support/README.md +49 -0
  445. package/src/resources/submodules/appium/packages/relaxed-caps-plugin/CHANGELOG.md +154 -0
  446. package/src/resources/submodules/appium/packages/relaxed-caps-plugin/README.md +35 -0
  447. package/src/resources/submodules/appium/packages/schema/CHANGELOG.md +271 -0
  448. package/src/resources/submodules/appium/packages/schema/README.md +50 -0
  449. package/src/resources/submodules/appium/packages/storage-plugin/CHANGELOG.md +73 -0
  450. package/src/resources/submodules/appium/packages/storage-plugin/README.md +83 -0
  451. package/src/resources/submodules/appium/packages/strongbox/CHANGELOG.md +94 -0
  452. package/src/resources/submodules/appium/packages/strongbox/README.md +96 -0
  453. package/src/resources/submodules/appium/packages/support/CHANGELOG.md +1054 -0
  454. package/src/resources/submodules/appium/packages/support/README.md +161 -0
  455. package/src/resources/submodules/appium/packages/test-support/CHANGELOG.md +712 -0
  456. package/src/resources/submodules/appium/packages/test-support/README.md +61 -0
  457. package/src/resources/submodules/appium/packages/tsconfig/CHANGELOG.md +131 -0
  458. package/src/resources/submodules/appium/packages/tsconfig/README.md +19 -0
  459. package/src/resources/submodules/appium/packages/types/CHANGELOG.md +793 -0
  460. package/src/resources/submodules/appium/packages/types/README.md +21 -0
  461. package/src/resources/submodules/appium/packages/universal-xml-plugin/CHANGELOG.md +435 -0
  462. package/src/resources/submodules/appium/packages/universal-xml-plugin/README.md +53 -0
  463. package/src/resources/submodules/appium/renovate/README.md +63 -0
  464. package/src/resources/submodules/appium-uiautomator2-driver/CHANGELOG.md +1204 -0
  465. package/src/resources/submodules/appium-uiautomator2-driver/README.md +2077 -0
  466. package/src/resources/submodules/appium-uiautomator2-driver/docs/actions.md +72 -0
  467. package/src/resources/submodules/appium-uiautomator2-driver/docs/activity-startup.md +47 -0
  468. package/src/resources/submodules/appium-uiautomator2-driver/docs/android-appbundle.md +69 -0
  469. package/src/resources/submodules/appium-uiautomator2-driver/docs/android-mobile-gestures.md +352 -0
  470. package/src/resources/submodules/appium-uiautomator2-driver/docs/bidi.md +50 -0
  471. package/src/resources/submodules/appium-uiautomator2-driver/docs/capability-sets.md +136 -0
  472. package/src/resources/submodules/appium-uiautomator2-driver/docs/scheduled-actions.md +155 -0
  473. package/src/resources/submodules/appium-uiautomator2-driver/docs/uiautomator-uiselector.md +51 -0
  474. package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/main.md +95 -0
  475. package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/screen1.png +0 -0
  476. package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/screen2.png +0 -0
  477. package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/checkered-squares.png +0 -0
  478. package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/start-button.png +0 -0
  479. package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/stop-button.png +0 -0
  480. package/src/resources/submodules/appium-xcuitest-driver/.github/ISSUE_TEMPLATE.md +4 -0
  481. package/src/resources/submodules/appium-xcuitest-driver/CHANGELOG.md +2594 -0
  482. package/src/resources/submodules/appium-xcuitest-driver/README.md +55 -0
  483. package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-logo-white.png +0 -0
  484. package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-logo.png +0 -0
  485. package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-plus-xctest.png +0 -0
  486. package/src/resources/submodules/appium-xcuitest-driver/docs/contributing.md +45 -0
  487. package/src/resources/submodules/appium-xcuitest-driver/docs/endpoints-wda.md +61 -0
  488. package/src/resources/submodules/appium-xcuitest-driver/docs/endpoints.md +98 -0
  489. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/keynote.png +0 -0
  490. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/on_my_iphone.png +0 -0
  491. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/top_files.png +0 -0
  492. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/attach-to-running-wda.md +43 -0
  493. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/audio-capture.md +78 -0
  494. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/capability-sets.md +169 -0
  495. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/ci-setup.md +47 -0
  496. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/clipboard.md +47 -0
  497. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/elements-lookup-troubleshooting.md +158 -0
  498. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/file-transfer.md +147 -0
  499. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/gestures.md +52 -0
  500. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/hybrid.md +137 -0
  501. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/input-events.md +67 -0
  502. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/install-certificate.md +19 -0
  503. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/multiple-xcode-versions.md +37 -0
  504. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/parallel-tests.md +39 -0
  505. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/run-prebuilt-wda.md +135 -0
  506. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/run-preinstalled-wda.md +178 -0
  507. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/touch-id.md +33 -0
  508. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/troubleshooting.md +191 -0
  509. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/tvos.md +114 -0
  510. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/wda-custom-server.md +283 -0
  511. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/wda-slowness.md +231 -0
  512. package/src/resources/submodules/appium-xcuitest-driver/docs/index.md +36 -0
  513. package/src/resources/submodules/appium-xcuitest-driver/docs/installation/index.md +137 -0
  514. package/src/resources/submodules/appium-xcuitest-driver/docs/overview.md +19 -0
  515. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/check-prov-prof.png +0 -0
  516. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/create-new-project.png +0 -0
  517. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/create-single-page.png +0 -0
  518. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/no-prov-prof.png +0 -0
  519. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/project-prov-prof.png +0 -0
  520. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/set-up-bundle.png +0 -0
  521. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/untrusted-dev.png +0 -0
  522. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-bundle-id.png +0 -0
  523. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-config.png +0 -0
  524. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-facebook-fail.png +0 -0
  525. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-facebook-succeed.png +0 -0
  526. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/index.md +51 -0
  527. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-basic-auto.md +49 -0
  528. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-basic-manual.md +40 -0
  529. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-full-manual.md +50 -0
  530. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-generic-manual.md +49 -0
  531. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/real-device-config.md +100 -0
  532. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/assets/images/useXctestrunFile.png +0 -0
  533. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/bidi.md +75 -0
  534. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/capabilities.md +165 -0
  535. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/commands.md +490 -0
  536. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/element-attributes.md +27 -0
  537. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/execute-methods.md +2206 -0
  538. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/ios-predicate.md +196 -0
  539. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/locator-strategies.md +19 -0
  540. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/scripts.md +29 -0
  541. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/security-flags.md +22 -0
  542. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/server-args.md +16 -0
  543. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/settings.md +49 -0
  544. package/src/resources/submodules/appium-xcuitest-driver/test/assets/TestApp-iphonesimulator.app/Default-568h@2x.png +0 -0
  545. package/src/resources/submodules/appium-xcuitest-driver/test/assets/test.png +0 -0
  546. package/src/schema.ts +5 -0
  547. package/src/scripts/simple-index-documentation.ts +93 -0
  548. package/src/scripts/simple-query-documentation.ts +61 -0
  549. package/src/server.ts +40 -0
  550. package/src/tests/README.md +83 -0
  551. package/src/tests/__mocks__/@appium/support.ts +31 -0
  552. package/src/tests/generate-all-locators.test.ts +179 -0
  553. package/src/tests/test-setup-wda.ts +247 -0
  554. package/src/tools/README.md +171 -0
  555. package/src/tools/answer-appium.ts +75 -0
  556. package/src/tools/boot-simulator.ts +87 -0
  557. package/src/tools/create-session.ts +270 -0
  558. package/src/tools/delete-session.ts +46 -0
  559. package/src/tools/documentation/index.ts +97 -0
  560. package/src/tools/documentation/reasoning-rag.ts +434 -0
  561. package/src/tools/documentation/sentence-transformers-embeddings.ts +142 -0
  562. package/src/tools/documentation/simple-pdf-indexer.ts +509 -0
  563. package/src/tools/documentation/uploads/documents.json +1 -0
  564. package/src/tools/generate-tests.ts +50 -0
  565. package/src/tools/index.ts +135 -0
  566. package/src/tools/install-wda.ts +277 -0
  567. package/src/tools/interactions/activate-app.ts +46 -0
  568. package/src/tools/interactions/click.ts +47 -0
  569. package/src/tools/interactions/double-tap.ts +87 -0
  570. package/src/tools/interactions/find.ts +58 -0
  571. package/src/tools/interactions/get-page-source.ts +52 -0
  572. package/src/tools/interactions/get-text.ts +47 -0
  573. package/src/tools/interactions/install-app.ts +45 -0
  574. package/src/tools/interactions/list-apps.ts +65 -0
  575. package/src/tools/interactions/screenshot.ts +56 -0
  576. package/src/tools/interactions/set-value.ts +48 -0
  577. package/src/tools/interactions/terminate-app.ts +47 -0
  578. package/src/tools/interactions/uninstall-app.ts +47 -0
  579. package/src/tools/locators.ts +83 -0
  580. package/src/tools/scroll-to-element.ts +188 -0
  581. package/src/tools/scroll.ts +97 -0
  582. package/src/tools/select-device.ts +298 -0
  583. package/src/tools/select-platform.ts +243 -0
  584. package/src/tools/session-store.ts +72 -0
  585. package/src/tools/setup-wda.ts +218 -0
  586. package/src/types/appium-ios-device.d.ts +8 -0
  587. package/src/types/appium-xcuitest-driver.d.ts +5 -0
  588. package/tsconfig.json +23 -0
  589. package/index.js +0 -0
@@ -0,0 +1,42 @@
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
+ In order to enable secure connections to the server, you need to provide the following command
12
+ line arguments:
13
+
14
+ ```bash
15
+ appium server --ssl-cert-path=/path/to/cert.pem --ssl-key-path=/path/to/key.pem
16
+ ```
17
+
18
+ Both arguments must be provided and should contain paths to a valid
19
+ [X509 PEM](https://www.ssl.com/guide/pem-der-crt-and-cer-x-509-encodings-and-conversions/)
20
+ certificate and its corresponding private key.
21
+
22
+ After the server is started use the `https` protocol and a client supporting SSL/TLS or
23
+ [SPDY](https://en.wikipedia.org/wiki/SPDY) to communicate to it.
24
+
25
+ ### Supported Features
26
+
27
+ Once a secure server socket is established it supports the following protocols:
28
+ `['h2', 'spdy/3.1', 'spdy/3', 'spdy/2', 'http/1.1', 'http/1.0']`. See
29
+ [the SPDY node module documentation](https://www.npmjs.com/package/spdy) to get more details about
30
+ its features. All insecure client connections will be rejected by the server.
31
+
32
+ ### Self-Signed Certificates
33
+
34
+ Use the following command in order to generate a self-signed certificate/key pair:
35
+
36
+ ```bash
37
+ 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"
38
+ ```
39
+
40
+ Feel free to change the value of `-subj` in the command above with your matching details. The server
41
+ should work just fine with a self-signed certificate, although you need to take care about a proper
42
+ client setup, e.g. make sure it does not reject unauthorized certificates.
@@ -0,0 +1,59 @@
1
+ ---
2
+ hide:
3
+ - navigation
4
+ - toc
5
+
6
+ title: Welcome
7
+ ---
8
+ <style>
9
+ .md-typeset h1,
10
+ .appium-sponsor-thanks {
11
+ display: none;
12
+ }
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
+ Welcome to the Appium documentation! Appium is an open-source project and ecosystem of related
20
+ software, designed to facilitate UI automation of many app platforms, including mobile (iOS,
21
+ Android, Tizen), browser (Chrome, Firefox, Safari), desktop (macOS, Windows), TV (Roku, tvOS,
22
+ Android TV, Samsung), and more!
23
+
24
+
25
+ <div style="text-align: center; margin-top: 2rem; font-style: italic;">
26
+ Appium is extremely grateful for the support of its key partners! (Learn more about our
27
+ sponsorship program and contributor compensation scheme <a
28
+ href="https://github.com/appium/appium/blob/master/GOVERNANCE.md#sponsorship">here</a>)
29
+ <div class="homepageSponsors">
30
+ <div class="homepageSponsor">
31
+ <a href="https://www.browserstack.com/browserstack-appium?utm_campaigncode=701OW00000AoUTQYA3&utm_medium=partnered&utm_source=appium">
32
+ <img src="assets/images/sponsor-logo-browserstack-dark.png#only-dark" style="width: 220px;" />
33
+ <img src="assets/images/sponsor-logo-browserstack-light.png#only-light" style="width: 220px;" />
34
+ </a>
35
+ </div>
36
+ <div class="homepageSponsor">
37
+ <a href="https://lambdatest.com/?utm_source=appium.io&utm_medium=organic&utm_campaign=june_25&utm_term=sk&utm_content=webpage">
38
+ <img src="assets/images/sponsor-logo-lambdatest-dark.png#only-dark" style="width: 220px;" />
39
+ <img src="assets/images/sponsor-logo-lambdatest-light.png#only-light" style="width: 220px;" />
40
+ </a>
41
+ </div>
42
+ </div>
43
+ </div>
44
+
45
+ ## Explore the Documentation
46
+
47
+ <div class="grid cards" markdown>
48
+
49
+ - Check out the [__Introduction__](./intro/index.md) to make sure you understand the key concepts
50
+ - Go through the [__Quickstart__](./quickstart/index.md) to get set up and run a basic Android test
51
+ - Visit the [__Ecosystem__](./ecosystem/index.md) page for a list of drivers, clients and plugins you may want to use
52
+ - Consult the [__Reference__](./reference/index.md) page for information on the Appium CLI and supported endpoints
53
+ - Read the different [__Guides__](./guides/migrating-2-to-3.md) for a variety of instructions, tips and tricks
54
+ - Check out various third-party [__Resources__](./resources/index.md) to explore Appium around the web
55
+ - For creating your own Appium extensions, see the [__Developer__](./developing/index.md) documentation
56
+ - For contributions to Appium itself, refer to the [__Contributing__](./contributing/index.md) page
57
+ - Have a look at the [__Appium Blog__](./blog/index.md) to learn what's new in the project
58
+
59
+ </div>
@@ -0,0 +1,202 @@
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]:
14
+ To meet these primary goals, we also work with a set of secondary goals or methodology
15
+ principles, which we also encourage for Appium extension developers:
16
+
17
+ - As far as possible, rely on (and contribute to) open source technology
18
+ - As far as possible, rely on vendor-provided tools for a given platform
19
+ - As far as possible, rely on automation tools that allow automation of unmodified apps (prefer
20
+ not to require the user to build in additional SDKs or software that introduce discrepancies
21
+ between the test version of the app and the production version)
22
+ - As far as possible, rely on existing standards instead of creating new ones
23
+
24
+ So, take any app platform you know about, like iOS or Android. Appium wants for there to be a way
25
+ for developers and testers to write UI automation code for that platform, according to a single,
26
+ unified API. Based on Appium's goals, we have a lot of questions to answer to make it all work:
27
+
28
+ - Which API should that "single, unified" API be?
29
+ - How do we map that API to automation behaviour for a specific platform?
30
+ - How do we make that API accessible via multiple popular programming languages?
31
+
32
+ There's another, larger, question lurking in the background here too, given that there are more app
33
+ platforms out there than just iOS and Android:
34
+
35
+ - How do we enable automation for *all* the platforms?
36
+
37
+ Exploring Appium's answers to these questions may not be the quickest way to learn what Appium is,
38
+ but it is certainly a good one! So let's dive in.
39
+
40
+ ## Appium's choice of API
41
+
42
+ Appium is very fortunate to have been preceded by a technology which has been a long-standing
43
+ pioneer in the field of UI automation, namely [Selenium](https://selenium.dev). The goal of the
44
+ Selenium project has been to support UI automation of web browsers, and in this way we can think of
45
+ it as occupying a subset of Appium's goals. Along the way, Selenium (and, after they merged,
46
+ another project called WebDriver) developed a relatively stable API for browser automation.
47
+
48
+ Over the years, Selenium worked with various web browser vendors and the [W3C](https://w3.org)
49
+ standards group to turn its API into an official web browser standard, called the [WebDriver
50
+ specification](https://w3c.github.io/webdriver/). All the main browsers now
51
+ implement automation capabilities inline with the WebDriver spec, without the Selenium team having
52
+ to maintain any software that performs actual automation; standards for the win!
53
+
54
+ Appium's initial goals were to develop an automation standard for mobile apps (iOS and Android). We
55
+ could have made up something new, but in the spirit of joining forces and keeping standards, well,
56
+ standard, we decided to adopt the WebDriver spec as Appium's API.[^2] While user interaction on
57
+ websites and in mobile native apps are not entirely identical (with even greater differences once
58
+ we start to consider, for example, TV platforms controlled by simple remotes), the fact is that
59
+ most software UIs are pretty much the same. This means that the WebDriver spec provides automation
60
+ API primitives (finding elements, interacting with elements, loading pages or screens, etc...) that
61
+ more or less map to any platform.
62
+
63
+ [^2]: Technically, when Appium was first written, we were dealing with something older than the
64
+ WebDriver spec, called the JSON Wire Protocol. Since then, Appium continued to evolve along with
65
+ the W3C spec and is fully W3C-compliant.
66
+
67
+ Of course, Appium wants to support the cases where user interaction *does* differ from web to
68
+ mobile or web to TV, and so Appium also makes use of the built-in *extensibility* of the WebDriver
69
+ spec. The result is that, no matter what platform you want to automate, when you use Appium, you
70
+ will do so using the standard WebDriver spec, with two caveats:
71
+
72
+ - We might not have any way to support a particular WebDriver API command on a given platform, and
73
+ so some commands might be unsupported (for example, getting or setting cookies is not possible in
74
+ the world of native mobile app automation).
75
+ - We might support automation behaviours that go *beyond* what's available in the WebDriver API
76
+ command list, though any such commands will be valid and spec-compliant extensions to the
77
+ WebDriver API.
78
+
79
+ How do you actually *use* the WebDriver API, particularly in the context of Appium? We'll cover
80
+ that in the [section below](#universal-programming-language-access) on how Appium provides
81
+ universal programming language access. All you need to know for now is that the way Appium
82
+ introduces a universal UI automation interface is by implementing the WebDriver protocol.
83
+
84
+ ## Platform automation behaviour
85
+
86
+ The next question is, how does Appium map this protocol to automation behaviour on a wide range of
87
+ platforms? The trick is that, strictly speaking, Appium doesn't! It leaves this responsibility up
88
+ to a kind of software module called an Appium *driver*. There's a whole [Driver
89
+ Introduction](./drivers.md) which you can read next, so we won't go into huge detail on how they
90
+ work for now.
91
+
92
+ What's important to understand at the moment is that a driver is kind of like a pluggable module
93
+ for Appium that gives Appium the power to automate a particular platform (or set of platforms,
94
+ depending on the goal of the driver). At the end of the day, a driver's responsibility is to simply
95
+ implement an Appium-internal interface representing the WebDriver protocol. How it implements this
96
+ interface is totally up to the driver, based on its strategy for making automation happen on
97
+ a specific platform. Typically, and with a lot more complexity and difficulty in the details,
98
+ a driver does this by relying on platform-specific automation technologies. For example, Apple
99
+ maintains an iOS automation technology called
100
+ [XCUITest](https://developer.apple.com/documentation/xctest/user_interface_tests). The Appium
101
+ driver that supports iOS app automation is called the [XCUITest
102
+ Driver](https://github.com/appium/appium-xcuitest-driver) because ultimately what it does is
103
+ convert the WebDriver protocol to XCUITest library calls.
104
+
105
+ One of the reasons that drivers are independent, pluggable modules is that they work completely
106
+ differently from one another. The tools and requirements for building and using drivers for
107
+ different platforms are completely different. And so Appium lets you use just the drivers that you
108
+ need for your automation tasks. Choosing drivers and installing them so that you can use them with
109
+ your Appium instance is so important that Appium has its very own [CLI for managing
110
+ drivers](../reference/cli/extensions.md).
111
+
112
+ So, to answer our original question, the way that Appium provides access to automation capabilities
113
+ for a given platform is that the Appium team (or anyone else[^3]) writes a *driver* for that
114
+ platform, implementing as much or little of the WebDriver protocol as desired. The driver can then
115
+ be installed by anyone using Appium.
116
+
117
+ [^3]: You can build and share your own drivers! Check out [Building
118
+ Drivers](../developing/build-drivers.md) to learn more about how to develop drivers in Node.js
119
+ that can be used with Appium.
120
+
121
+ ## Universal programming language access
122
+
123
+ But what does it mean, or look like, to *use* Appium, anyway? Since Appium is ultimately a Node.js
124
+ program, it *could* have looked like importing Appium and its drivers as libraries into your own
125
+ Node.js programs. But that wouldn't meet Appium's goal of providing automation capabilities to
126
+ people using any popular programming language.
127
+
128
+ Luckily, the fact that Appium rode in on Selenium's coattails meant that we had a solution to this
129
+ problem from day one. You see, the WebDriver specification is actually an HTTP-based protocol,
130
+ meaning it is designed to be used over a network rather than within the memory of a single program.
131
+
132
+ One of the main benefits of this "client-server" architecture is that it allows the automation
133
+ implementer (the thing doing the automation, in this case the 'server') to be completely distinct
134
+ from the automation runner (the thing defining what automation should be done, in what steps,
135
+ etc..., in this case the 'client'). Basically, all the "hard stuff" (actually figuring out how to
136
+ make automation happen on a given platform) can be handled in one place by the server, and "thin"
137
+ client libraries can be written in any programming language which simply encode HTTP requests to
138
+ the server in language-appropriate way. It's possible, in other words, to bring basic Appium
139
+ / WebDriver capabilities to a new programming language relatively easily, assuming high-level HTTP
140
+ libraries exist, simply by coding up a basic HTTP client in that language.
141
+
142
+ There are a couple important takeaways here for you, the Appium user:
143
+
144
+ - Appium is an *HTTP server*. It must run as a process on some computer for as long as you want to
145
+ be able to use it for automation. It must be accessible on the network to whichever computer you
146
+ want to use to run the automation from (whether that is the same machine or one across the
147
+ world).
148
+ - Unless you want to write raw HTTP calls or use cURL, using Appium for automation involves the use
149
+ of an [Appium Client](clients.md) in the language of your choice. The goal of each of these
150
+ clients is to encapsulate the WebDriver protocol so that rather than worrying about the protocol
151
+ itself, you can work with objects and methods that feel idiomatic for your language.
152
+ - The Appium server and the Appium client do *not* need to be running on the same computer. You
153
+ simply need to be able to send HTTP requests from the client to the server over some network.
154
+ This greatly facilitates the use of cloud providers for Appium, since they can host the Appium
155
+ server and any related drivers and devices, and all you need to do is point your client script to
156
+ their secure endpoints.
157
+
158
+ And of course, none of this is about "testing" per se, purely about the use of Appium and its
159
+ client libraries for automation purposes. If you want to do automation for the purpose of
160
+ "testing", you'll likely want to enlist the help of test runners, test frameworks, and the like,
161
+ none of which need be related to Appium; one of the benefits of Appium's "universal accessibility"
162
+ is that it plays well with whatever set of tools you find most beneficial for your situation.
163
+
164
+ ## Appium's huge scope
165
+
166
+ Appium's vision (automation of everything under a single API) is huge! Certainly, much bigger than
167
+ the team of core maintainers for the open source project. So how does Appium hope to achieve this
168
+ goal? Basically, by empowering the community to develop functionality on top of Appium as
169
+ a *platform*. This is what we call the Appium "ecosystem".
170
+
171
+ The Appium team does officially maintain a few drivers itself (for example, the XCUITest driver
172
+ that we spoke about earlier). But it cannot hope to have the platform-specific expertise or the
173
+ capacity to maintain drivers for many different platforms. But what we have done, particularly
174
+ beginning with Appium 2, is to provide tools to empower the community to join in our vision:
175
+
176
+ - Anyone can create a driver simply by creating a Node.js module that conforms to the appropriate
177
+ conventions and implements any (sub|super)set of the WebDriver protocol. Creating a driver often
178
+ involves a minimal amount of code because the WebDriver protocol details are abstracted away, and
179
+ many helper libraries are available---the same libraries that power the Appium team's own
180
+ drivers.
181
+ - Sharing drivers with others is easy using the Appium driver CLI. There is no central authority.
182
+ Anyone can share drivers publicly or privately, for free or for sale. Drivers can be open or
183
+ closed source (though obviously we appreciate open source!).
184
+
185
+ Appium's vision of being a platform for development extends beyond the support of automation for
186
+ all app platforms. As a popular automation tool, there are many opportunities for integrating
187
+ Appium with all kinds of other tools and services. In addition, there are many feature ideas for
188
+ Appium, either as a core server or in its incarnation across various drivers, which the core team
189
+ will never have time to build. And so, with Appium 2, Appium has released a plugin system that
190
+ enables anyone to build and share modules that change how Appium works!
191
+
192
+ In the same way that drivers are easily shareable and consumable via the Appium driver CLI, plugins
193
+ can be published and consumed via a parallel [Plugin CLI](../reference/cli/extensions.md). Plugins
194
+ can do all sorts of things, for example adding the ability for Appium to find and interact with
195
+ screen regions based on a template image (as in the [`images`
196
+ plugin](https://github.com/appium/appium/tree/master/packages/images-plugin)). There are very few
197
+ limitations on what you can do with plugins, so you might also be interested in learning how to
198
+ [Build Plugins](../developing/build-plugins.md) in Node.js that can be used with Appium.
199
+
200
+ So that's Appium: an extensible, universal interface for the UI automation of potentially
201
+ everything! Read on into some of the specific intro docs for more details, or check out the various
202
+ guides to dive into some more general concepts and features of Appium.
@@ -0,0 +1,127 @@
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](https://w3c.github.io/webdriver/). 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
+ For more about the server side of the equation (i.e., how does Appium actually control
21
+ devices?), check out our [Intro to Appium Drivers](./drivers.md). To skip to a list of links to
22
+ Appium client libraries, check out the [list of clients](../ecosystem/clients.md).
23
+
24
+ What sorts of automation commands are available? That is up to the particular driver and plugins
25
+ that you are using in any given session. A standard set of commands would include, for example, the
26
+ following:
27
+
28
+ - Find Element
29
+ - Click Element
30
+ - Get Page Source
31
+ - Take Screenshot
32
+
33
+ If you look at these commands in the WebDriver specification, you'll notice that they are not
34
+ defined in terms of any particular programming language. They are not Java commands, or JavaScript
35
+ commands, or Python commands. Instead, they form part of an HTTP API which can be accessed from
36
+ within *any* programming language (or none! you could just use cURL if you want).
37
+
38
+ So, for example, the `Find Element` command corresponds to an HTTP `POST` request sent to the HTTP
39
+ endpoint `/session/:sessionid/element` (where in this case, `:sessionid` is a placeholder for the
40
+ unique session ID generated by the server in a previous call to `Create Session`).
41
+
42
+ This information is primarily useful for people developing technology that works with the WebDriver
43
+ spec. It's not particularly useful for people trying to write Appium or Selenium tests. When you
44
+ write an Appium test, you want to use a programming language you're familiar with. Luckily, there
45
+ exist a set of [Appium client libraries](../ecosystem/clients.md)[^1] that take care of the
46
+ responsibility of speaking HTTP to the Appium server. Instead, they expose a set of "native"
47
+ commands for a particular programming language, so that, to the test author, it just feels like
48
+ you're writing Python, or JavaScript, or Java.
49
+
50
+ As an example, here's the same simple set of Appium commands in five different programming
51
+ languages, using the recommended Appium client binding for each language (note that this is not
52
+ working sample code including all appropriate imports; see each client library's instructions for
53
+ setup and command reference):
54
+
55
+ === "JavaScript (Webdriver.io)"
56
+
57
+ ```js
58
+ const element = await driver.$('//*[@text="Foo"]');
59
+ await element.click();
60
+ console.log(await element.getText())
61
+ console.log(await driver.getPageSource())
62
+ ```
63
+
64
+ === "Java"
65
+
66
+ ```java
67
+ WebElement element = driver.findElement(By.Xpath("//*[@text='Foo']"))
68
+ element.click()
69
+ System.out.println(element.getText())
70
+ System.out.println(driver.getPageSource())
71
+ ```
72
+
73
+ === "Python"
74
+
75
+ ```py
76
+ element = driver.find_element(by=By.XPATH, value='//*[@text="Foo"]')
77
+ element.click()
78
+ print(element.text)
79
+ print(driver.page_source)
80
+ ```
81
+
82
+ === "Ruby"
83
+
84
+ ```rb
85
+ element = driver.find_element :xpath, '//*[@text="Foo"]'
86
+ element.click
87
+ puts element.text
88
+ puts driver.page_source
89
+ ```
90
+
91
+ === "C#"
92
+
93
+ ```dotnet
94
+ AppiumElement element = driver.FindElement(MobileBy.AccessibilityId("Views"));
95
+ element.click();
96
+ System.Console.WriteLine(element.Text);
97
+ System.Console.WriteLine(driver.PageSource);
98
+ ```
99
+
100
+ Each of these scripts, despite being in different languages, does the same thing under the hood:
101
+
102
+ 1. Call `Find Element` with a `using` parameter of `xpath` and a `value` parameter expressing the
103
+ XPath query used to find an element. (If you're confused about these terms, you might find an
104
+ introduction to Appium or Selenium useful)
105
+ 2. Call `Click Element` with the ID of the element found in the previous call.
106
+ 3. Call `Get Element Text` with the ID of the same element, and print it to the console.
107
+ 4. Call `Get Page Source` to retrieve the page/app source and print it to the console.
108
+
109
+ The only other thing to keep in mind before choosing or using a client is that each client is
110
+ independently maintained. Just because a feature is available in one client, it doesn't mean it's
111
+ available in another client (though all clients support at least the standard W3C protocol plus any
112
+ common appium extensions). Just because one client has a nice set of helper functions, doesn't mean
113
+ another will. Some clients are kept very frequently up to date, and others are not! So when
114
+ thinking about choosing a library, the first consideration is the language you want to use, and the
115
+ second consideration is how full-featured and well-maintained the library is!
116
+
117
+ To learn how to use an Appium client, visit that client's homepage to learn more. In many cases,
118
+ the Appium client for a given language is built *on top of* the *Selenium* client for that
119
+ language, and so certain Appium clients may only document the features which the Appium client
120
+ added on top of the Selenium client. All that to say, for a full reference, you may need to visit
121
+ both the Appium client documentation as well as the Selenium client documentation.
122
+
123
+ That's all you need to know about Appium clients! Head over to the
124
+ [Clients](../ecosystem/clients.md) page to check out the current list of clients.
125
+
126
+ [^1]: These libraries are alternately called "clients", "client libraries", or "client bindings".
127
+ 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](https://w3c.github.io/webdriver/#navigate-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!