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,158 @@
1
+ ---
2
+ title: Elements Lookup Troubleshooting
3
+ ---
4
+
5
+ This article helps to resolve possible issues that may pop up while looking up for elements with XCUITest driver,
6
+ where the desired element is either not found or not visible in the page source at all.
7
+
8
+ Since there might be multiple reasons to why an element cannot be found the topic is divided into sections where
9
+ each section contains visible symptoms with the list of their possible resolutions.
10
+
11
+
12
+ ## Symptom #1
13
+
14
+ The desired element is shown as part of a bigger container and is not distinguishable in the page source tree.
15
+ Sometimes the whole application view with all elements in it is visible as one single container.
16
+
17
+ ## Resolutions To Symptom #1
18
+
19
+ ### Make sure the application under test is accessible
20
+
21
+ The XCUITest driver is based on Apple's XCTest framework. And the latter uses the information provided by the system
22
+ accessibility framework to interact with on-screen elements, and to distinguish them. The same approach is used by
23
+ various screen readers, VoiceOver, etc. You may start your journey into what Accessibility is and how to deal
24
+ with it in your applications from the official
25
+ [Apple's accessibility guideline](https://developer.apple.com/design/human-interface-guidelines/accessibility).
26
+ Bear in mind, that this tutorial only describes apps based on official Apple frameworks, like UIKit or SwiftUI. If you
27
+ use a different framework to build the application's user interface, for example
28
+ [React Native](https://reactnative.dev/), then consider looking for framework-specific accessibility guidelines.
29
+ It is also possible that the source tree displayed in Xcode accessibility inspector differs from the tree generated
30
+ by XCTest. The best possible way to verify the page source generated by the latter is to check the output of the
31
+ [debugDescription](https://developer.apple.com/documentation/xctest/xcuielement/1500909-debugdescription) attribute
32
+ of the corresponding XCUIApplication element. XCUITest driver allows to perform a direct forwarding for this API by
33
+ using the [mobile: source](../reference/execute-methods.md#mobile-source) execute method with `format` set
34
+ to `description`.
35
+
36
+ ### Check if this is a hybrid application
37
+
38
+ Hybrid applications are applications that use
39
+ [web views](https://developer.apple.com/design/human-interface-guidelines/web-views) in order to represent
40
+ their whole user interface or portions of it.
41
+ Web views is the technology that allows to seamlessly integrate web pages browsing experience
42
+ into native mobile applications. Applications might contain native views mixed with web views, or the whole
43
+ application UI might be just a single web view. And while the built-in web view engine allows limited accessibility
44
+ interactions via [ARIA](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA) attributes, consider
45
+ switching a driver context instead in order to get full native access to the page DOM.
46
+ Read [Automating Hybrid Apps](./hybrid.md) for more details there.
47
+
48
+ ### Make sure the application accessibility tree is not too deep
49
+
50
+ Apple's XCTest represents the page source as hierarchical structure (a tree), where each UI element has ancestor and
51
+ descendant relationships to other elements. There are applications having complex UI structure with deeply nested
52
+ views. Such deep structures are known to create problems for XCTest as the latter is unable to work with tree elements
53
+ whose nesting level is deeper than `62`. This limitation has to do with how `NSDictionary` works and cannot be worked
54
+ around. The default maximum nesting level for the XCUITest driver is set to `50` and could be customized by the
55
+ [snapshotMaxDepth](../reference/settings.md) setting.
56
+ [React Native](https://reactnative.dev/) is known to create
57
+ such deep hierarchies and the only viable solution for now is to fix the application
58
+ under test by flattening nested views. Check the corresponding [issue](https://github.com/appium/appium/issues/14825)
59
+ for more details.
60
+ Deeply nested hierarchies might also be the reason for the element lookup slowness. Read the [Diagnosing WebDriverAgent Slowness](./wda-slowness.md) article to troubleshoot the latter.
61
+
62
+ ### Make sure a valid active application is selected in WebDriverAgent
63
+
64
+ Sometimes, even if visually it looks like UI elements belong to the same application, they are referenced by
65
+ absolutely different apps. Moreover, the operating system
66
+ may change elements ownership in different versions. In the UI inspector it looks like visually the element
67
+ is visible, but no "real" accessibility control relies on it. Most frequent candidates for such behavior are:
68
+ - System alerts, for example camera or geolocation permission requests
69
+ - Quick access toolbars, for example the one where Wi-Fi or Bluetooth state could be changed
70
+ - Various RPC sheets, for example the Share To collection
71
+
72
+ WebDriverAgent is designed the way it only interacts with a single app hierarchy at the particular
73
+ moment of time. Such application is called `active`.
74
+ It is possible to switch between applications in runtime using
75
+ [mobile: activateApp](../reference/execute-methods.md#mobile-activateapp) API or
76
+ to provide a hint for WebDriverAgent on which application to prefer if multiple apps are running
77
+ using the [defaultActiveApplication setting](../reference/settings.md).
78
+ Check the [Troubleshooting guide](./troubleshooting.md) and/or
79
+ [Switching Between iOS Apps During a Test](https://appiumpro.com/editions/13-switching-between-ios-apps-during-a-test)
80
+ article for more details on how to make such elements available.
81
+
82
+ ## Symptom #2
83
+
84
+ The desired element is shown in the page tree, but cannot be found if looked up from an automated test.
85
+
86
+ ## Resolutions To Symptom #2
87
+
88
+ ### Make sure there is no race condition
89
+
90
+ Sometimes the automation might too fast or too slow depending on in which state the UI is while the lookup is being
91
+ executed. If it is too fast then consider using lookup timers, e.g. repeat the `findElement` more than once until
92
+ either the element is found or the timeout occurs. All clients have convenience wrappers for such timers in form of
93
+ expected conditions.
94
+ If the automation is too slow, e.g. the desired element disappears faster than `findElement` could detect its presence
95
+ then make sure your script is optimized for the maximum performance, e.g. optimal/fast element locators are used,
96
+ the application itself and driver settings are [adjusted](./wda-slowness.md) to perform optimally, etc.
97
+ There might be situations where the automation framework is already optimized, although the desired element is
98
+ a short-living one, for example some notification popup that only appears for a second and then is immediately hidden.
99
+ For such "special" elements consider using approaches different from `findElement`, for example post-test video recording analysis (video FPS should usually be enough to catch all short-living elements), or introducing special
100
+ application debug settings to change the behavior for such elements and make them stay visible for longer time, or
101
+ using non-UI-related assertions, like logs analysis or direct API calls.
102
+
103
+ ### Make sure the debug environment matches to the testing one
104
+
105
+ There are known cases where application interface/behavior might differ in simulators and real devices. It might even differ
106
+ if the screen size or device model/OS version/system setting differs. That is why always make sure your debug
107
+ environment, for example one where Appium Inspector is used,
108
+ is as close as possible to the environment where automated tests are being executed.
109
+
110
+
111
+ ## Symptom #3
112
+
113
+ The desired element is shown in the page tree, but its property value is not as expected, for example, it
114
+ is shown as visible while one does not see it in the application interface or vice versa.
115
+
116
+ ## Resolutions To Symptom #3
117
+
118
+ ### XCUITest driver has minimum influence to attribute values
119
+
120
+ This is a simple and at the same time complicated topic. Since XCUITest driver is based on Apple's XCTest,
121
+ all attribute values are retrieved from the latter. Standard attributes provided by XCTest could be found in
122
+ [XCUIElementAttributes](https://developer.apple.com/documentation/xctest/xcuielementattributes?language=objc)
123
+ protocol reference. The full list of attributes supported by XCUITest driver's WebElement
124
+ could be found in the [Element Attributes](../reference/element-attributes.md) document.
125
+ Most of the above attributes are simple compilations of standard attributes, for example, `elementType` is
126
+ translated to `type` by matching the corresponding
127
+ [enum](https://developer.apple.com/documentation/xctest/xcuielementtype?language=objc) value to a string representation, `name` is compiled from original element's identifier and label depending on what is
128
+ present first. The full list of mapping rules between standard and XCUITest attribute values could be found in
129
+ [WebDriverAgent sources](https://github.com/appium/WebDriverAgent/blob/master/WebDriverAgentLib/Categories/XCUIElement%2BFBWebDriverAttributes.m).
130
+ Although, some attributes there, like `visible` or `accessible` have no direct mapping in XCTest
131
+ and are retrieved directly from the accessibility framework ~~using dark magic~~.
132
+ This means the actual value of these attributes only depends on accessibility internals and is there
133
+ mostly due to ~~legacy~~ convenience purposes, as the original XCTest does not even expose them.
134
+ We'd love to deprecate and remove this legacy burden and only rely on officially supported attributes,
135
+ although historically many people rely on them, so we keep it, even though their values might
136
+ be not reliable and there is no good way to debug this behavior or somehow influence it.
137
+ The final recommendation there would be:
138
+ - If the value of an attribute that directly or indirectly relies on a public XCUIElement attribute
139
+ is different from what you expect then run a vanilla XCTest with the same app and make sure
140
+ it's not the same as you see in the XCUITest driver. If it is then the only place to complain
141
+ would be the Apple support forum or a XCTest bug tracker. If you can confirm the issue lies in
142
+ WebDriverAgent's mapping logic then feel free to raise an
143
+ [issue](https://github.com/appium/WebDriverAgent/issues) to its maintainers.
144
+ - If the value of an attribute that is a "custom" XCUITest attribute, like `visible` or `accessible`,
145
+ is different from what you expect then we, most likely, won't be able to help you. You may try
146
+ to improve the corresponding WebDriverAgent sources, but keep in mind there are many automation
147
+ tests around that rely on the current way these attributes are calculated, and we probably don't
148
+ want to break them.
149
+
150
+ ## Symptom #4
151
+
152
+ The desired element is shown in the page tree, but the content of its `value` property is cut off. For example, the actual size of the element's `value` attribute is above 512 bytes, while the size in the XML page source is always limited to 512 bytes.
153
+
154
+ ## Resolutions To Symptom #4
155
+
156
+ Retrieve the element's `value` using the corresponding API ([Get Element Attribute](https://www.w3.org/TR/webdriver1/#get-element-attribute) / [Get Element Text](https://www.w3.org/TR/webdriver1/#dfn-get-element-text)) to get the full/uncut content. Please see [this issue](https://github.com/appium/appium-xcuitest-driver/issues/2552) and [this PR](https://github.com/appium/WebDriverAgent/pull/1007) for more details.
157
+
158
+ XCTest framework cuts off long element values in snapshots to achieve the best performance and to reduce the memory footprint. If an element was inspected via [debugDescription](https://developer.apple.com/documentation/xctest/xcuielement/1500909-debugdescription) in XCTest for UI (not Appium XCUITest driver), it prints the value partially while the [value](https://developer.apple.com/documentation/xctest/xcuielementattributes/value) attribute like `element.value` prints the entire value.
@@ -0,0 +1,147 @@
1
+ ---
2
+ title: File Transfer
3
+ ---
4
+
5
+ The XCUITest driver provides several [extension commands](../reference/execute-methods.md) for file transfer:
6
+
7
+ * [`mobile: pullFolder`](../reference/execute-methods.md#mobile-pullfolder)
8
+ * [`mobile: pullFile`](../reference/execute-methods.md#mobile-pullfile)
9
+ * [`mobile: pushFile`](../reference/execute-methods.md#mobile-pushfile)
10
+ * [`mobile: deleteFolder`](../reference/execute-methods.md#mobile-deletefolder)
11
+ * [`mobile: deleteFile`](../reference/execute-methods.md#mobile-deletefile)
12
+
13
+ This documentation aims to help to understand how they work on iOS.
14
+
15
+ ## Formats
16
+
17
+ All commands require a parameter with a path to the file/folder on the target device. There are 3
18
+ possible formats this path can take:
19
+
20
+ ### Format 1
21
+
22
+ ```
23
+ @<app-bundle-id>:<container-type>/<path-to-file-or-folder>
24
+ ```
25
+
26
+ * `@<app-bundle-id>` is the application bundle identifier
27
+ * `<container-type>` is the container type
28
+ * On simulators, common values are `app`, `data`, `groups`, but a custom one can also be provided
29
+ * On real devices, the only accepted value is `documents`. All others are treated as Format 2
30
+ * This value can only be specified for apps that have the `UIFileSharingEnabled` flag set to
31
+ `true`. You can use the [`mobile: listApps`](../reference/execute-methods.md#mobile-listapps)
32
+ extension to identify such apps.
33
+ * By assigning the `skipDocumentsContainerCheck` [Settings API](https://appium.io/docs/en/latest/guides/settings/) to `true`, you may skip the above limitation for certain apps.
34
+
35
+ * `<path-to-file-or-folder>` is the target file or folder
36
+ * On real devices, if `<container-type>` is set to `documents`, this path will be mapped to
37
+ `On My iPhone/<app name>` in the _Files_ app
38
+
39
+ ### Format 2
40
+
41
+ ```
42
+ @<app-bundle-id>/<path-to-file-or-folder>
43
+ ```
44
+
45
+ * On simulators, the implicit `<container-type>` is set to `app`.
46
+ * On real device, only apps with the `UIFileSharingEnabled` flag set to `true` in their `info.plist`
47
+ can be mounted. You can use the [`mobile: listApps`](../reference/execute-methods.md#mobile-listapps)
48
+ extension to identify such apps.
49
+
50
+ ### Format 3
51
+
52
+ ```
53
+ <path-to-file-or-folder>
54
+ ```
55
+
56
+ This format is only supported on simulators. The implicit `<container-type>` is set to `app`.
57
+ Eventually the whole simulator file system is
58
+ [available](https://stackoverflow.com/questions/6480607/is-there-any-way-to-see-the-file-system-on-the-ios-simulator)
59
+ directly from the macOS Finder, so you may pull any file from there by providing a path to it
60
+ relatively to the simulator's file system root.
61
+
62
+ ## Examples
63
+
64
+ ### `pullFile`
65
+
66
+ This example pulls a file present in _Files -> On My iPhone -> Keynote_:
67
+
68
+ |Top | On My iPhone | Keynote |
69
+ |:----:|:----:|:----:|
70
+ |![](./assets/images/ios-xctest-file-movement/top_files.png)|![](./assets/images/ios-xctest-file-movement/on_my_iphone.png)|![](./assets/images/ios-xctest-file-movement/keynote.png)|
71
+
72
+ === "JS (WebdriverIO)"
73
+
74
+ ```javascript
75
+ let data = driver.pullFile('@com.apple.Keynote:documents/Presentation.key');
76
+ await fs.writeFile('presentation.key', Buffer.from(data, 'base64'), 'binary');
77
+ ```
78
+
79
+ === "Ruby"
80
+
81
+ ```ruby
82
+ file = @driver.pull_file '@com.apple.Keynote:documents/Presentation.key'
83
+ File.open('presentation.key', 'wb') { |f| f<< file }
84
+ ```
85
+
86
+ If the file is in deeper place like _Keynote/Dir1/Dir2_, then the path changes:
87
+
88
+ === "JS (WebdriverIO)"
89
+
90
+ ```javascript
91
+ let data = driver.pullFile('@com.apple.Keynote:documents/Dir1/Dir2/Presentation.key');
92
+ await fs.writeFile('presentation.key', Buffer.from(data, 'base64'), 'binary');
93
+ ```
94
+
95
+ === "Ruby"
96
+
97
+ ```ruby
98
+ file = @driver.pull_file '@com.apple.Keynote:documents/Dir1/Dir2/Presentation.key'
99
+ File.open('presentation.key', 'wb') { |f| f<< file }
100
+ ```
101
+
102
+ Example for a simulator using Format 3:
103
+
104
+ ```java
105
+ // Java
106
+ // Get AddressBook.sqlitedb in test app package ('app' container)
107
+ byte[] fileContent = driver.pullFile("Library/AddressBook/AddressBook.sqlitedb");
108
+ Path dstPath = Paths.get(new File("/local/path/AddressBook.sqlitedb"));
109
+ Files.write(dstPath, fileContent);
110
+ ```
111
+
112
+ ### `pullFolder`
113
+
114
+ You can pull folders similarly to files, but the path must end with a forward slash (`/`).
115
+
116
+ === "JS (WebdriverIO)"
117
+
118
+ ```javascript
119
+ let data = driver.pullFolder('@com.apple.Keynote:documents/');
120
+ await fs.writeFile('documents.zip', Buffer.from(data, 'base64'), 'binary');
121
+ ```
122
+
123
+ === "Ruby"
124
+
125
+ ```ruby
126
+ file = @driver.pull_folder '@com.apple.Keynote:documents/'
127
+ File.open('documents.zip', 'wb') { |f| f<< file }
128
+ ```
129
+
130
+ ### `pushFile`
131
+
132
+ === "JS (WebdriverIO)"
133
+
134
+ ```javascript
135
+ driver.pushFile('@com.apple.Keynote:documents/text.txt', new Buffer("Hello World").toString('base64'));
136
+ ```
137
+
138
+ === "Ruby"
139
+
140
+ ```ruby
141
+ @driver.push_file '@com.apple.Keynote:documents/text.txt', (File.read 'path/to/file')
142
+ ```
143
+
144
+ ## References
145
+ - <https://stackoverflow.com/questions/1108076/where-does-the-iphone-simulator-store-its-data>
146
+ - <https://stackoverflow.com/questions/48884248/how-can-i-add-files-to-the-ios-simulator>
147
+ - <https://apple.stackexchange.com/questions/299413/how-to-allow-the-files-app-to-save-to-on-my-iphone-or-to-on-my-ipad-in-ios/299565#299565>
@@ -0,0 +1,52 @@
1
+ ---
2
+ title: Gestures
3
+ ---
4
+
5
+ The XCUITest driver provides multiple options for touch gestures automation.
6
+ For simple gestures, like tap by coordinates, long tap, multi-finger tap, double/triple tap,
7
+ swipe, drag, rotate, scroll or pinch use the below gesture shortcuts:
8
+
9
+ - [mobile: tap](../reference/execute-methods.md#mobile-tap)
10
+ - [mobile: doubleTap](../reference/execute-methods.md#mobile-doubletap)
11
+ - [mobile: touchAndHold](../reference/execute-methods.md#mobile-touchandhold)
12
+ - [mobile: twoFingerTap](../reference/execute-methods.md#mobile-twofingertap)
13
+ - [mobile: dragFromToForDuration](../reference/execute-methods.md#mobile-dragfromtoforduration)
14
+ - [mobile: dragFromToWithVelocity](../reference/execute-methods.md#mobile-dragfromtowithvelocity)
15
+ - [mobile: rotateElement](../reference/execute-methods.md#mobile-rotateelement)
16
+ - [mobile: tapWithNumberOfTaps](../reference/execute-methods.md#mobile-tapwithnumberoftaps)
17
+ - [mobile: forcePress](../reference/execute-methods.md#mobile-forcepress)
18
+ - [mobile: scrollToElement](../reference/execute-methods.md#mobile-scrolltoelement)
19
+ - [mobile: scroll](../reference/execute-methods.md#mobile-scroll)
20
+ - [mobile: pinch](../reference/execute-methods.md#mobile-pinch)
21
+
22
+ For more sophisticated gestures
23
+ consider using [W3C actions](https://w3c.github.io/webdriver/#actions).
24
+
25
+ Make sure you don't use deprecated JSONWP TouchActions APIs. They have been
26
+ removed from the XCUITest driver since version 7.
27
+
28
+ If the action code in the client source looks good and satisfies the above requirements,
29
+ but its execution still does not deliver the expected result then the following debugging
30
+ measures might be applied:
31
+
32
+ - Make sure the gesture has valid coordinates and respects pauses between pointer state changes.
33
+ For example, it is always mandatory to provide a valid element or valid `absolute` coordinates
34
+ to any gesture at the beginning. iOS only registers
35
+ a long touch/click if the pointer has been depressed for longer than 500ms. For shorter actions
36
+ a simple click is registered instead.
37
+ - If your tests run on Simulator then it is possible to activate pointer tracing by enabling
38
+ the [appium:simulatorTracePointer](../reference/capabilities.md#simulator) capability or by enabling
39
+ `Visual Indicators` items from Simulator settings. After running
40
+ your automation code with this feature enabled you would be able to see the exact pointer trace path
41
+ and check the velocity of the gesture. Compare the trace
42
+ to how the same gesture is usually done manually and apply the necessary updates to your code.
43
+ - Do not mix webview and native elements in actions arguments. It simply won't work. Native
44
+ actions could only consume native elements. A single possibility to perform a native action
45
+ on a web element would be to translate its coordinates into the native context and pass these
46
+ coordinates as native action arguments.
47
+
48
+ Check the below tutorials for more details on how to build reliable action chains:
49
+
50
+ - [Automating Complex Gestures with the W3C Actions API](https://appiumpro.com/editions/29-automating-complex-gestures-with-the-w3c-actions-api)
51
+ - [Swiping your way through Appium by Wim Selles #AppiumConf2021](https://www.youtube.com/watch?v=oAJ7jwMNFVU)
52
+ - [About iOS Input Events](./input-events.md)
@@ -0,0 +1,137 @@
1
+ ---
2
+ title: Automating Hybrid Apps
3
+ ---
4
+
5
+ One of the core principles of XCUITest driver is that you shouldn't have to change your
6
+ app to test it. In line with that methodology, it is possible to test hybrid
7
+ apps the same way you can with Selenium for web apps. There is a bit of technical
8
+ complexity required so that XCUITest driver knows whether you want to automate the native
9
+ aspects of the app or the web views. But, thankfully, we can stay within the
10
+ Selenium WebDriver protocol for everything.
11
+
12
+ Once the test is in a web view context the command set that is available is the
13
+ full [Selenium](http://www.seleniumhq.org/) [WebDriver API](https://www.w3.org/TR/webdriver/).
14
+
15
+ ### Requirements
16
+
17
+ To interact with a web view XCUITest driver establishes a connection using a custom
18
+ [remote debugger](https://github.com/appium/appium-remote-debugger).
19
+ This debugger can connect directly to any WebKit debugger socket exposed by the system.
20
+ The protocol used for the communication there is a proprietary Apple's JSON RPC similar
21
+ to Chrome's [Devtools Protocol](https://chromedevtools.github.io/devtools-protocol/).
22
+ Not all web views expose debugger web sockets by default thus making them invisible
23
+ for the XCUITest driver and not showing in the available contexts list.
24
+ Make sure the following prerequisites are satisfied if you are unsure about whether
25
+ the particular web view is debuggable or not:
26
+
27
+ - If you use real devices then make sure the Settings→Safari→Advanced→Web Inspector
28
+ checkbox is turned on.
29
+ - If your app's web view is based on WKWebView then make sure the
30
+ [isInspectable](https://developer.apple.com/documentation/webkit/wkwebview/4111163-inspectable?language=objc) property of it set to `true`. Note, that you must have access to the application sources in order
31
+ to ensure that!
32
+ - Make sure you see the corresponding web view in Safari's
33
+ [remote debugger](https://help.salesforce.com/s/articleView?id=000391692&type=1) list.
34
+
35
+ If all the above requirements have been satisfied, but the desired web view is still not present in the
36
+ XCUITest driver's context list then there is probably an issue in the driver itself, which must be reported
37
+ to driver maintainers.
38
+
39
+ ### Entering the web view context
40
+
41
+ Here are the steps required to talk to a web view in your XCUITest driver test:
42
+
43
+ 1. Navigate to a portion of your app where a web view is active
44
+ 2. Retrieve the currently available contexts
45
+ * This returns a list of contexts we can access, like `'NATIVE_APP'` or `'WEBVIEW_1'`
46
+ 3. Set the id of the context you want to access
47
+ * This puts your XCUITest session into a mode where all commands are
48
+ interpreted as being intended for automating the web view, rather than the
49
+ native portion of the app. For example, if you run `findElement`, it
50
+ will operate on the DOM of the web view, rather than return native elements.
51
+ Of course, certain WebDriver methods only make sense in one context or
52
+ another, so in the wrong context you will receive an error message.
53
+ 4. To stop automating in the web view context and go back to automating the
54
+ native portion of the app, simply set the context
55
+ again with the native context id (generally `'NATIVE_APP'`) to leave the web
56
+ context and once again access the native commands.
57
+
58
+ ### Automatically entering the web view context on session start
59
+
60
+ If your application begins in a web view, and you do not want to automate the
61
+ native application before entering it, you can have XCUITest driver automatically enter
62
+ the web view context on session initialization by setting the `autoWebview`
63
+ [capability](../reference/capabilities.md) to `true`.
64
+
65
+
66
+ ### Examples
67
+
68
+ === "Java"
69
+ ```java
70
+ // java
71
+ // assuming we have a set of capabilities
72
+ driver = new AppiumDriver(new URL("http://127.0.0.1:4723/"), options);
73
+
74
+ Set<String> contextNames = driver.getContextHandles();
75
+ for (String contextName : contextNames) {
76
+ System.out.println(contextName); //prints out something like NATIVE_APP \n WEBVIEW_1
77
+ }
78
+ driver.context(contextNames.toArray()[1]); // set context to WEBVIEW_1
79
+
80
+ //do some web testing
81
+ String myText = driver.findElement(By.cssSelector(".green_button")).click();
82
+
83
+ driver.context("NATIVE_APP");
84
+
85
+ // do more native testing if we want
86
+
87
+ driver.quit();
88
+ ```
89
+
90
+ === "Ruby"
91
+ ```ruby
92
+ # ruby_lib_core
93
+ # assuming we have a set of capabilities
94
+ @driver = Appium::Core.for(url: SERVER_URL, desired_capabilities: capabilities).start_driver
95
+ # ruby_lib
96
+ # opts = { caps: capabilities, appium_lib: { custom_url: SERVER_URL }}
97
+ # @driver = Appium::Driver.new(opts, true).start_driver
98
+
99
+ # I switch to the last context because its always the webview in our case, in other cases you may need to specify a context
100
+ # View the appium logs while running @driver.contexts to figure out which context is the one you want and find the associated ID
101
+ # Then switch to it using @driver.switch_to.context("WEBVIEW_6")
102
+
103
+ Given(/^I switch to webview$/) do
104
+ webview = @driver.available_contexts.last
105
+ @driver.switch_to.context(webview)
106
+ end
107
+
108
+ Given(/^I switch out of webview$/) do
109
+ @driver.switch_to.context(@driver.contexts.first)
110
+ end
111
+
112
+ # Now you can use CSS to select an element inside your webview
113
+
114
+ And(/^I click a webview button $/) do
115
+ @driver.find_element(:css, ".green_button").click
116
+ end
117
+ ```
118
+
119
+ === "Python"
120
+ ```python
121
+ # python
122
+ # assuming we have an initialized `driver` object for an app
123
+
124
+ # switch to webview
125
+ webview = driver.contexts.last
126
+ driver.switch_to.context(webview)
127
+
128
+ # do some webby stuff
129
+ driver.find_element(By.CSS, ".green_button").click
130
+
131
+ # switch back to native view
132
+ driver.switch_to.context(driver.contexts.first)
133
+
134
+ # do more native testing if we want
135
+
136
+ driver.quit()
137
+ ```
@@ -0,0 +1,67 @@
1
+ ---
2
+ title: About iOS Input Events
3
+ ---
4
+
5
+ ## What Are Input Events
6
+
7
+ iOS uses the Events concept to handle signals received from different input devices. An Event is an
8
+ object generated in response to a signal from an input device. These objects are then delivered to
9
+ the corresponding kernel subsystem, which processes them and notifies all listening processes about
10
+ taps, key presses, swipes, etc. This means that in order to emulate a signal generated by an external
11
+ device, such as a touch screen, it is necessary to just send Event objects with the same properties
12
+ and in the same sequence as they would be generated by a real device.
13
+
14
+ ## Simulating a Single Tap
15
+
16
+ The Events API itself is a part of Apple private API, and it is neither open sourced nor documented.
17
+ The XCTest framework also does not expose any _public_ APIs for input events generation, although
18
+ there is a possibility to perform events generation via XCTest _private_ undocumented APIs.
19
+
20
+ In particular, we are interested in the
21
+ [`XCPointerEventPath`](https://github.com/appium/WebDriverAgent/blob/master/PrivateHeaders/XCTest/XCPointerEventPath.h)
22
+ and [`XCSynthesizedEventRecord`](https://github.com/appium/WebDriverAgent/blob/master/PrivateHeaders/XCTest/XCSynthesizedEventRecord.h)
23
+ interfaces. These APIs allow to create chains of input events and supply them to the system kernel
24
+ for execution.
25
+
26
+ In order to synthesize a single tap, it is necessary to:
27
+
28
+ - Create a new `XCPointerEventPath` instance and initialize it for touch at the starting point
29
+ - Add a new `liftUp` event at `0.125s` offset using `liftUpAtOffset:` method
30
+ - Add the generated event path object to `XCSynthesizedEventRecord` instance using
31
+ `addPointerEventPath:` method
32
+ - Execute the events using `synthesizeWithError:` method of `XCSynthesizedEventRecord` instance and
33
+ control the returned error
34
+
35
+ There are several limitations to these APIs:
36
+
37
+ - Each `XCPointerEventPath` instance can only be executed for a single action. If one tries to add,
38
+ for example, two taps to a single path, then these are effectively ignored
39
+ - Each `XCPointerEventPath` instance can only be initialized for a particular pointer type: touch,
40
+ mouse (since Xcode 10.2) or keyboard (since Xcode 10.2)
41
+ - Events can only be added with increasing offset values to an existing `XCPointerEventPath` instance
42
+
43
+ ## More Complicated Actions
44
+
45
+ Unfortunately, because the API is private and has zero documentation, one can only figure out what
46
+ it can do by playing with it and trying different input combinations.
47
+
48
+ It is known that providing multiple `XCPointerEventPath` instances with overlapping timeouts will
49
+ generate a multitouch action with the amount of fingers equal to the amount of the supplied event
50
+ paths. So, in order to generate two-finger symmetric swipe we need to supply the following events:
51
+
52
+ - Create a two `XCPointerEventPath` instances and init them for touch at the starting point
53
+ - Add a `moveToPoint` event at `0.525s` offset using `moveToPoint:` method to each path
54
+ - Add a `liftUp` eventa at `0.525s` offset using `liftUpAtOffset:` method to each path
55
+ - Add the generated event paths to `XCSynthesizedEventRecord` instance using `addPointerEventPath:` method
56
+ - Execute the events using `synthesizeWithError:` method of `XCSynthesizedEventRecord` instance and
57
+ control the returned error
58
+
59
+ ## Further Reading
60
+
61
+ Unfortunately, there is no information on this topic at all (private API `¯\_(ツ)_/¯`). Consider
62
+ visiting the following resources:
63
+
64
+ * <https://github.com/appium/WebDriverAgent/tree/master/PrivateHeaders/XCTest>
65
+ * <https://github.com/appium/WebDriverAgent/blob/master/WebDriverAgentTests/IntegrationTests/FBW3CTouchActionsIntegrationTests.m>
66
+ * <https://github.com/appium/WebDriverAgent/blob/master/WebDriverAgentTests/IntegrationTests/FBW3CMultiTouchActionsIntegrationTests.m>
67
+ * <https://github.com/appium/WebDriverAgent/blob/master/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.m>
@@ -0,0 +1,19 @@
1
+ ---
2
+ hide:
3
+ - toc
4
+
5
+ title: Self-Signed Certificates
6
+ ---
7
+
8
+ Unfortunately, Apple does not provide any command line options which can help to install self-signed
9
+ certificate on a real device or simulator. However, there is
10
+ [over-the-air](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/iPhoneOTAConfiguration/Introduction/Introduction.html)
11
+ enrollment technology, which allows the deployment of several entity types, including such
12
+ certificates, by simply downloading specially prepared configuration files with the built-in web
13
+ browser. After the configuration is downloaded it can be installed and trusted by going through
14
+ several simple wizard steps.
15
+
16
+ You can use the following extension methods to assist with this:
17
+
18
+ * [`mobile: installCertificate`](../reference/execute-methods.md#mobile-installcertificate)
19
+ * [`mobile: removeCertificate`](../reference/execute-methods.md#mobile-removecertificate)
@@ -0,0 +1,37 @@
1
+ ---
2
+ hide:
3
+ - toc
4
+
5
+ title: Managing Multiple Xcodes
6
+ ---
7
+
8
+ If you have multiple Xcode installations, you may choose which toolset Appium should use with one
9
+ of two ways:
10
+
11
+ ### `xcode-select` tool
12
+ Only available with `sudo` privileges, affects the whole system.
13
+
14
+ Assuming you want to choose `/Applications/Xcode13.app`:
15
+
16
+ 1. Set the default Xcode
17
+ ```
18
+ sudo xcode-select -s /Applications/Xcode13.app/Contents/Developer
19
+ ```
20
+ 2. Run Appium
21
+ ```
22
+ appium
23
+ ```
24
+
25
+ ### Environment variable
26
+ No privileges needed, affects only the current shell, so Appium should be started within that shell.
27
+
28
+ Assuming you want to choose `/Applications/Xcode12.app`:
29
+
30
+ 1. Set the `DEVELOPER_DIR` environment variable
31
+ ```
32
+ export DEVELOPER_DIR=/Applications/Xcode12.app/Contents/Developer
33
+ ```
34
+ 2. Run Appium
35
+ ```
36
+ appium
37
+ ```
@@ -0,0 +1,39 @@
1
+ ---
2
+ hide:
3
+ - toc
4
+
5
+ title: Testing in Parallel
6
+ ---
7
+
8
+ It is possible to execute tests in parallel using XCUITest driver. Appium allows to do this on a
9
+ per-process (multiple server processes running on different ports managing single session) or a
10
+ per-request basis (single server process managing multiple sessions, more preferable, uses less
11
+ resources and ensures better control over running sessions).
12
+
13
+ !!! note
14
+
15
+ If you are _not_ going to run your tests in parallel, consider enabling the `--session-override`
16
+ Appium server argument. It forces the server to close all pending sessions before a new one
17
+ could be opened, which allows you to avoid possible issues with such sessions silently
18
+ running/expiring in the background.
19
+
20
+ ### Important Real Device Capabilities
21
+
22
+ - `udid` must be a unique device UDID for each parallel session.
23
+ - `wdaLocalPort` must be a unique port number for each parallel session. The default value is `8100`.
24
+ - `derivedDataPath` set the unique derived data path root for each driver instance. This will help
25
+ to avoid possible conflicts and to speed up the parallel execution.
26
+ - `mjpegServerPort` must be a unique port number for each parallel session if you are going to
27
+ record a video stream from it. The default value is `9100`.
28
+
29
+ ### Important Simulator Capabilities
30
+
31
+ - Either `udid`, which is the unique simulator UDID for each parallel session (it could be retrieved
32
+ from `xcrun simctl list` command output), or a unique combination of `deviceName` and
33
+ `platformVersion` capabilities to identify the appropriate simulator with the given name and
34
+ version number for each parallel session.
35
+ - `wdaLocalPort` must be a unique port number for each parallel session. The default value is `8100`.
36
+ - `derivedDataPath` set the unique derived data path root for each driver instance. This will help
37
+ to avoid possible conflicts and to speed up the parallel execution.
38
+ - `mjpegServerPort` must be a unique port number for each parallel session if you are going to
39
+ record a video stream from it. The default value is `9100`.