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,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!