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,55 @@
1
+ ---
2
+ hide:
3
+ - navigation
4
+ - toc
5
+
6
+ title: ようこそ
7
+ ---
8
+
9
+ <style>
10
+ .md-typeset h1,
11
+ .appium-sponsor-thanks {
12
+ display: none;
13
+ }
14
+ </style>
15
+
16
+ <div style="text-align: center">
17
+ <img src="assets/images/appium-logo-horiz.png" style="max-width: 400px;" />
18
+ </div>
19
+
20
+ Appiumのドキュメントにようこそ! Appiumはオープンソースプロジェクトであり、そのエコシステムは多様なプラットフォーム、例えばモバイル(iOS・Android・Tizen)やブラウザ(Chrome・Firefox・Safari)、デスクトップ(macOS・Windows)、TV(Roku・tvOS・Android TV・Samsung)に対するUI自動化を支援するために設計されています。
21
+
22
+ <div style="text-align: center; margin-top: 2rem; font-style: italic;">
23
+ Appiumはパートナーのサポートに非常に感謝しています! (私たちのスポンサーシップと貢献者への報酬の枠組みは<a
24
+ href="https://github.com/appium/appium/blob/master/GOVERNANCE.md#sponsorship">こちら</a>から)
25
+ <div class="homepageSponsors">
26
+ <div class="homepageSponsor">
27
+ <a href="https://www.browserstack.com/browserstack-appium?utm_campaigncode=701OW00000AoUTQYA3&utm_medium=partnered&utm_source=appium">
28
+ <img src="assets/images/sponsor-logo-browserstack-dark.png#only-dark" style="width: 220px;" />
29
+ <img src="assets/images/sponsor-logo-browserstack-light.png#only-light" style="width: 220px;" />
30
+ </a>
31
+ </div>
32
+ <div class="homepageSponsor">
33
+ <a href="https://lambdatest.com/?utm_source=appium.io&utm_medium=organic&utm_campaign=june_25&utm_term=sk&utm_content=webpage">
34
+ <img src="assets/images/sponsor-logo-lambdatest-dark.png#only-dark" style="width: 220px;" />
35
+ <img src="assets/images/sponsor-logo-lambdatest-light.png#only-light" style="width: 220px;" />
36
+ </a>
37
+ </div>
38
+ </div>
39
+ </div>
40
+
41
+ ## ドキュメントを検索する
42
+
43
+ <div class="grid cards" markdown>
44
+
45
+ - [**Introduction**](./intro/index.md) を読んで、主要なコンセプトを理解してください
46
+ - [**Quickstart**](./quickstart/index.md) を通して、基本的なAndroidテストを用意、実行します。
47
+ - 使用するドライバ、クライアント、プラグインの一覧については、 [**Ecosystem**](./ecosystem/index.md) ページを参照してください。
48
+ - Consult the [**Reference**](./reference/index.md) page for information on the Appium CLI and supported endpoints
49
+ - Read the different [**Guides**](./guides/migrating-2-to-3.md) for a variety of instructions, tips and tricks
50
+ - Check out various third-party [**Resources**](./resources/index.md) to explore Appium around the web
51
+ - 独自の Appium 拡張を作成するには、 [**Developer**](./developing/index.md) ドキュメントを参考にしてください。
52
+ - For contributions to Appium itself, refer to the [**Contributing**](./contributing/index.md) page
53
+ - Have a look at the [**Appium Blog**](./blog/index.md) to learn what's new in the project
54
+
55
+ </div>
@@ -0,0 +1,191 @@
1
+ ---
2
+ title: How Does Appium Work?
3
+ ---
4
+
5
+ 「はじめに」でも言及したとおり、Appiumはオープンソースプロジェクトであり、多くのアプリケーションプラットフォームのUI自動化を助けるために設計された関係するソフトウェアのエコシステムです。 Appium 2.0のリリースにより、Appiumは以下の主要な目標を達成します:[^1]
6
+
7
+ - 標準化されたAPIにより、クロスプラットフォームながらもプラットフォーム固有の自動化を可能とする
8
+ - 様々なプログラミング言語からこのAPIを呼び出すことができる
9
+ - コミュニティ間で開発された便利なAppium拡張(Appium extension)を利用できるようになる
10
+
11
+ [^1]: これらの主要な目的達成のため、私たちは二次的な目標や原則に沿っています。Appium拡張(Appium extension)の開発者にも同様に推奨するものです。
12
+
13
+ - 可能な限り、オープンソースを活用し、オープンソースに貢献もする
14
+ - 可能な限り、開発元から提供されるプラットフォーム固有のツールを使用する
15
+ - 可能な限り、テスト対象に変更を必要としない自動化ツールを使用する(専用ビルドを必要とするような追加のSDKやテスト対象版と製品版とで差異があることは好ましくない)
16
+ - 可能な限り、新しい独自のものを作るより既にある標準のものを使う
17
+
18
+ したがって、iOSやAndroidといったいかなるアプリプラットフォームに対しても、 Appiumは開発者やテスターにそのプラットフォームにおけるUI自動化コードを一つの統一されたAPIで記述できるようにします。 Appiumの目標を実現するために私たちは多くの疑問に答える必要があります。
19
+
20
+ - "一つの統一された" APIとは何か?
21
+ - どのように私たちはそのAPIを特定のプラットフォームにおける自動化としての振る舞いに対応させているか?
22
+ - どのように私たちは複数のよく知られるプログラミング言語から利用可能にしているか?
23
+
24
+ iOSとAndroidだけでなくより多くのアプリプラットフォームが存在していることを考えると、その背景には別の、より大きな疑問が潜んでいます。
25
+
26
+ - どのようにして_全ての_プラットフォームに対して自動化を実現するか?
27
+
28
+ これらの疑問へのAppiumの答えを知ることは、Appiumが何かを学ぶ最短の方法ではないかもしれませんが、確かな道になります。 では、見ていきましょう。
29
+
30
+ ## Appium's choice of API
31
+
32
+ Appium is very fortunate to have been preceded by a technology which has been a long-standing
33
+ pioneer in the field of UI automation, namely [Selenium](https://selenium.dev). The goal of the
34
+ Selenium project has been to support UI automation of web browsers, and in this way we can think of
35
+ it as occupying a subset of Appium's goals. Along the way, Selenium (and, after they merged,
36
+ another project called WebDriver) developed a relatively stable API for browser automation.
37
+
38
+ Over the years, Selenium worked with various web browser vendors and the [W3C](https://w3.org)
39
+ standards group to turn its API into an official web browser standard, called the WebDriver
40
+ specification. All the main browsers now
41
+ implement automation capabilities inline with the WebDriver spec, without the Selenium team having
42
+ to maintain any software that performs actual automation; standards for the win!
43
+
44
+ Appium's initial goals were to develop an automation standard for mobile apps (iOS and Android). We
45
+ could have made up something new, but in the spirit of joining forces and keeping standards, well,
46
+ standard, we decided to adopt the WebDriver spec as Appium's API.[^2] While user interaction on
47
+ websites and in mobile native apps are not entirely identical (with even greater differences once
48
+ we start to consider, for example, TV platforms controlled by simple remotes), the fact is that
49
+ most software UIs are pretty much the same. This means that the WebDriver spec provides automation
50
+ API primitives (finding elements, interacting with elements, loading pages or screens, etc...) that
51
+ more or less map to any platform.
52
+
53
+ [^2]: Technically, when Appium was first written, we were dealing with something older than the
54
+ WebDriver spec, called the JSON Wire Protocol. Since then, Appium continued to evolve along with
55
+ the W3C spec and is fully W3C-compliant.
56
+
57
+ Of course, Appium wants to support the cases where user interaction _does_ differ from web to
58
+ mobile or web to TV, and so Appium also makes use of the built-in _extensibility_ of the WebDriver
59
+ spec. The result is that, no matter what platform you want to automate, when you use Appium, you
60
+ will do so using the standard WebDriver spec, with two caveats:
61
+
62
+ - We might not have any way to support a particular WebDriver API command on a given platform, and
63
+ so some commands might be unsupported (for example, getting or setting cookies is not possible in
64
+ the world of native mobile app automation).
65
+ - We might support automation behaviours that go _beyond_ what's available in the WebDriver API
66
+ command list, though any such commands will be valid and spec-compliant extensions to the
67
+ WebDriver API.
68
+
69
+ How do you actually _use_ the WebDriver API, particularly in the context of Appium? We'll cover
70
+ that in the [section below](#universal-programming-language-access) on how Appium provides
71
+ universal programming language access. All you need to know for now is that the way Appium
72
+ introduces a universal UI automation interface is by implementing the WebDriver protocol.
73
+
74
+ ## Platform automation behaviour
75
+
76
+ The next question is, how does Appium map this protocol to automation behaviour on a wide range of
77
+ platforms? The trick is that, strictly speaking, Appium doesn't! It leaves this responsibility up
78
+ to a kind of software module called an Appium _driver_. There's a whole Driver
79
+ Introduction which you can read next, so we won't go into huge detail on how they
80
+ work for now.
81
+
82
+ What's important to understand at the moment is that a driver is kind of like a pluggable module
83
+ for Appium that gives Appium the power to automate a particular platform (or set of platforms,
84
+ depending on the goal of the driver). At the end of the day, a driver's responsibility is to simply
85
+ implement an Appium-internal interface representing the WebDriver protocol. How it implements this
86
+ interface is totally up to the driver, based on its strategy for making automation happen on
87
+ a specific platform. Typically, and with a lot more complexity and difficulty in the details,
88
+ a driver does this by relying on platform-specific automation technologies. For example, Apple
89
+ maintains an iOS automation technology called
90
+ [XCUITest](https://developer.apple.com/documentation/xctest/user_interface_tests). The Appium
91
+ driver that supports iOS app automation is called the XCUITest
92
+ Driver because ultimately what it does is
93
+ convert the WebDriver protocol to XCUITest library calls.
94
+
95
+ One of the reasons that drivers are independent, pluggable modules is that they work completely
96
+ differently from one another. The tools and requirements for building and using drivers for
97
+ different platforms are completely different. And so Appium lets you use just the drivers that you
98
+ need for your automation tasks. Choosing drivers and installing them so that you can use them with
99
+ your Appium instance is so important that Appium has its very own CLI for managing
100
+ drivers.
101
+
102
+ So, to answer our original question, the way that Appium provides access to automation capabilities
103
+ for a given platform is that the Appium team (or anyone else[^3]) writes a _driver_ for that
104
+ platform, implementing as much or little of the WebDriver protocol as desired. The driver can then
105
+ be installed by anyone using Appium.
106
+
107
+ [^3]: You can build and share your own drivers! Check out Building
108
+ Drivers to learn more about how to develop drivers in Node.js
109
+ that can be used with Appium.
110
+
111
+ ## Universal programming language access
112
+
113
+ But what does it mean, or look like, to _use_ Appium, anyway? Since Appium is ultimately a Node.js
114
+ program, it _could_ have looked like importing Appium and its drivers as libraries into your own
115
+ Node.js programs. But that wouldn't meet Appium's goal of providing automation capabilities to
116
+ people using any popular programming language.
117
+
118
+ Luckily, the fact that Appium rode in on Selenium's coattails meant that we had a solution to this
119
+ problem from day one. You see, the WebDriver specification is actually an HTTP-based protocol,
120
+ meaning it is designed to be used over a network rather than within the memory of a single program.
121
+
122
+ One of the main benefits of this "client-server" architecture is that it allows the automation
123
+ implementer (the thing doing the automation, in this case the 'server') to be completely distinct
124
+ from the automation runner (the thing defining what automation should be done, in what steps,
125
+ etc..., in this case the 'client'). Basically, all the "hard stuff" (actually figuring out how to
126
+ make automation happen on a given platform) can be handled in one place by the server, and "thin"
127
+ client libraries can be written in any programming language which simply encode HTTP requests to
128
+ the server in language-appropriate way. It's possible, in other words, to bring basic Appium
129
+ / WebDriver capabilities to a new programming language relatively easily, assuming high-level HTTP
130
+ libraries exist, simply by coding up a basic HTTP client in that language.
131
+
132
+ There are a couple important takeaways here for you, the Appium user:
133
+
134
+ - Appium is an _HTTP server_. It must run as a process on some computer for as long as you want to
135
+ be able to use it for automation. It must be accessible on the network to whichever computer you
136
+ want to use to run the automation from (whether that is the same machine or one across the
137
+ world).
138
+ - Unless you want to write raw HTTP calls or use cURL, using Appium for automation involves the use
139
+ of an [Appium Client](clients.md) in the language of your choice. The goal of each of these
140
+ clients is to encapsulate the WebDriver protocol so that rather than worrying about the protocol
141
+ itself, you can work with objects and methods that feel idiomatic for your language.
142
+ - The Appium server and the Appium client do _not_ need to be running on the same computer. You
143
+ simply need to be able to send HTTP requests from the client to the server over some network.
144
+ This greatly facilitates the use of cloud providers for Appium, since they can host the Appium
145
+ server and any related drivers and devices, and all you need to do is point your client script to
146
+ their secure endpoints.
147
+
148
+ And of course, none of this is about "testing" per se, purely about the use of Appium and its
149
+ client libraries for automation purposes. If you want to do automation for the purpose of
150
+ "testing", you'll likely want to enlist the help of test runners, test frameworks, and the like,
151
+ none of which need be related to Appium; one of the benefits of Appium's "universal accessibility"
152
+ is that it plays well with whatever set of tools you find most beneficial for your situation.
153
+
154
+ ## Appium's huge scope
155
+
156
+ Appium's vision (automation of everything under a single API) is huge! Certainly, much bigger than
157
+ the team of core maintainers for the open source project. So how does Appium hope to achieve this
158
+ goal? Basically, by empowering the community to develop functionality on top of Appium as
159
+ a _platform_. This is what we call the Appium "ecosystem".
160
+
161
+ The Appium team does officially maintain a few drivers itself (for example, the XCUITest driver
162
+ that we spoke about earlier). But it cannot hope to have the platform-specific expertise or the
163
+ capacity to maintain drivers for many different platforms. But what we have done, particularly
164
+ beginning with Appium 2, is to provide tools to empower the community to join in our vision:
165
+
166
+ - Anyone can create a driver simply by creating a Node.js module that conforms to the appropriate
167
+ conventions and implements any (sub|super)set of the WebDriver protocol. Creating a driver often
168
+ involves a minimal amount of code because the WebDriver protocol details are abstracted away, and
169
+ many helper libraries are available---the same libraries that power the Appium team's own
170
+ drivers.
171
+ - Sharing drivers with others is easy using the Appium driver CLI. There is no central authority.
172
+ Anyone can share drivers publicly or privately, for free or for sale. Drivers can be open or
173
+ closed source (though obviously we appreciate open source!).
174
+
175
+ Appium's vision of being a platform for development extends beyond the support of automation for
176
+ all app platforms. As a popular automation tool, there are many opportunities for integrating
177
+ Appium with all kinds of other tools and services. In addition, there are many feature ideas for
178
+ Appium, either as a core server or in its incarnation across various drivers, which the core team
179
+ will never have time to build. And so, with Appium 2, Appium has released a plugin system that
180
+ enables anyone to build and share modules that change how Appium works!
181
+
182
+ In the same way that drivers are easily shareable and consumable via the Appium driver CLI, plugins
183
+ can be published and consumed via a parallel [Plugin CLI](../reference/cli/extensions.md). Plugins
184
+ can do all sorts of things, for example adding the ability for Appium to find and interact with
185
+ screen regions based on a template image (as in the images). There are very few
186
+ limitations on what you can do with plugins, so you might also be interested in learning how to
187
+ [Build Plugins](../developing/build-plugins.md) in Node.js that can be used with Appium.
188
+
189
+ So that's Appium: an extensible, universal interface for the UI automation of potentially
190
+ everything! Read on into some of the specific intro docs for more details, or check out the various
191
+ 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!