appium-mcp 1.8.15 → 1.8.16

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 (436) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/package.json +2 -1
  3. package/server.json +2 -2
  4. package/src/command.ts +249 -0
  5. package/src/devicemanager/adb-manager.ts +164 -0
  6. package/src/devicemanager/ios-manager.ts +145 -0
  7. package/src/index.ts +45 -0
  8. package/src/locators/element-filter.ts +136 -0
  9. package/src/locators/generate-all-locators.ts +150 -0
  10. package/src/locators/locator-generation.ts +657 -0
  11. package/src/locators/source-parsing.ts +149 -0
  12. package/src/logger.ts +11 -0
  13. package/src/resources/caps.json +697 -0
  14. package/src/resources/index.ts +8 -0
  15. package/src/resources/java/template.ts +83 -0
  16. package/src/resources/submodules/appium/.github/PULL_REQUEST_TEMPLATE.md +28 -0
  17. package/src/resources/submodules/appium/CHANGELOG.md +45 -0
  18. package/src/resources/submodules/appium/CONDUCT.md +48 -0
  19. package/src/resources/submodules/appium/GOVERNANCE.md +185 -0
  20. package/src/resources/submodules/appium/IDEAS.md +16 -0
  21. package/src/resources/submodules/appium/README.md +221 -0
  22. package/src/resources/submodules/appium/ROADMAP.md +30 -0
  23. package/src/resources/submodules/appium/SPONSORS.md +3 -0
  24. package/src/resources/submodules/appium/docs/README.md +6 -0
  25. package/src/resources/submodules/appium/docs/payout.md +35 -0
  26. package/src/resources/submodules/appium/packages/appium/CHANGELOG.md +1437 -0
  27. package/src/resources/submodules/appium/packages/appium/README.md +221 -0
  28. package/src/resources/submodules/appium/packages/appium/docs/en/blog/index.md +2 -0
  29. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-appiumconf2024.md +45 -0
  30. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
  31. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-headspin-as-development-partner.md +47 -0
  32. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-lambdatest-as-strategic-partner.md +42 -0
  33. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
  34. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-sponsorship-program.md +48 -0
  35. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/appium3.md +40 -0
  36. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/hello-world.md +15 -0
  37. package/src/resources/submodules/appium/packages/appium/docs/en/contributing/index.md +150 -0
  38. package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-docs.md +86 -0
  39. package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-doctor-checks.md +141 -0
  40. package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-drivers.md +860 -0
  41. package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-plugins.md +514 -0
  42. package/src/resources/submodules/appium/packages/appium/docs/en/developing/config-system.md +451 -0
  43. package/src/resources/submodules/appium/packages/appium/docs/en/developing/index.md +18 -0
  44. package/src/resources/submodules/appium/packages/appium/docs/en/developing/sensitive.md +49 -0
  45. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/clients.md +132 -0
  46. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/drivers.md +207 -0
  47. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/index.md +45 -0
  48. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/plugins.md +138 -0
  49. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/tools.md +83 -0
  50. package/src/resources/submodules/appium/packages/appium/docs/en/guides/branch-testing.md +57 -0
  51. package/src/resources/submodules/appium/packages/appium/docs/en/guides/caching.md +76 -0
  52. package/src/resources/submodules/appium/packages/appium/docs/en/guides/caps.md +275 -0
  53. package/src/resources/submodules/appium/packages/appium/docs/en/guides/config.md +98 -0
  54. package/src/resources/submodules/appium/packages/appium/docs/en/guides/context.md +44 -0
  55. package/src/resources/submodules/appium/packages/appium/docs/en/guides/event-timing.md +73 -0
  56. package/src/resources/submodules/appium/packages/appium/docs/en/guides/execute-methods.md +122 -0
  57. package/src/resources/submodules/appium/packages/appium/docs/en/guides/grid.md +166 -0
  58. package/src/resources/submodules/appium/packages/appium/docs/en/guides/headers.md +17 -0
  59. package/src/resources/submodules/appium/packages/appium/docs/en/guides/log-filters.md +86 -0
  60. package/src/resources/submodules/appium/packages/appium/docs/en/guides/managing-exts.md +87 -0
  61. package/src/resources/submodules/appium/packages/appium/docs/en/guides/migrating-1-to-2.md +368 -0
  62. package/src/resources/submodules/appium/packages/appium/docs/en/guides/migrating-2-to-3.md +464 -0
  63. package/src/resources/submodules/appium/packages/appium/docs/en/guides/security.md +89 -0
  64. package/src/resources/submodules/appium/packages/appium/docs/en/guides/settings.md +68 -0
  65. package/src/resources/submodules/appium/packages/appium/docs/en/guides/tls.md +42 -0
  66. package/src/resources/submodules/appium/packages/appium/docs/en/index.md +59 -0
  67. package/src/resources/submodules/appium/packages/appium/docs/en/intro/appium.md +202 -0
  68. package/src/resources/submodules/appium/packages/appium/docs/en/intro/clients.md +127 -0
  69. package/src/resources/submodules/appium/packages/appium/docs/en/intro/drivers.md +188 -0
  70. package/src/resources/submodules/appium/packages/appium/docs/en/intro/history.md +196 -0
  71. package/src/resources/submodules/appium/packages/appium/docs/en/intro/index.md +39 -0
  72. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/index.md +29 -0
  73. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/install.md +50 -0
  74. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/next-steps.md +23 -0
  75. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/requirements.md +29 -0
  76. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-dotnet.md +105 -0
  77. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-java.md +23 -0
  78. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-js.md +75 -0
  79. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-py.md +60 -0
  80. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-rb.md +83 -0
  81. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/uiauto2-driver.md +144 -0
  82. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/appium.md +394 -0
  83. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/bidi.md +70 -0
  84. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/index.md +30 -0
  85. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/jsonwp.md +214 -0
  86. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/mjsonwp.md +151 -0
  87. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/others.md +671 -0
  88. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/plugins.md +289 -0
  89. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/webdriver.md +1114 -0
  90. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/env-vars.md +31 -0
  91. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/extensions.md +239 -0
  92. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/index.md +35 -0
  93. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/server.md +76 -0
  94. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/setup.md +76 -0
  95. package/src/resources/submodules/appium/packages/appium/docs/en/reference/index.md +25 -0
  96. package/src/resources/submodules/appium/packages/appium/docs/en/resources/index.md +28 -0
  97. package/src/resources/submodules/appium/packages/appium/docs/en/sponsors/index.md +64 -0
  98. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/index.md +2 -0
  99. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-appiumconf2024.md +45 -0
  100. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
  101. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-headspin-as-development-partner.md +47 -0
  102. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-lambdatest-as-strategic-partner.md +41 -0
  103. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
  104. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-sponsorship-program.md +48 -0
  105. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/appium3.md +40 -0
  106. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/hello-world.md +15 -0
  107. package/src/resources/submodules/appium/packages/appium/docs/ja/contributing/index.md +158 -0
  108. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-docs.md +86 -0
  109. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-doctor-checks.md +141 -0
  110. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-drivers.md +866 -0
  111. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-plugins.md +520 -0
  112. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/config-system.md +468 -0
  113. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/index.md +18 -0
  114. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/sensitive.md +49 -0
  115. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/clients.md +143 -0
  116. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/drivers.md +219 -0
  117. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/index.md +45 -0
  118. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/plugins.md +140 -0
  119. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/tools.md +87 -0
  120. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/branch-testing.md +57 -0
  121. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/caching.md +78 -0
  122. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/caps.md +259 -0
  123. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/config.md +102 -0
  124. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/context.md +44 -0
  125. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/event-timing.md +75 -0
  126. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/execute-methods.md +142 -0
  127. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/grid.md +166 -0
  128. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/headers.md +17 -0
  129. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/log-filters.md +86 -0
  130. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/managing-exts.md +89 -0
  131. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/migrating-1-to-2.md +402 -0
  132. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/migrating-2-to-3.md +458 -0
  133. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/security.md +89 -0
  134. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/settings.md +70 -0
  135. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/tls.md +43 -0
  136. package/src/resources/submodules/appium/packages/appium/docs/ja/index.md +55 -0
  137. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/appium.md +191 -0
  138. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/clients.md +139 -0
  139. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/drivers.md +188 -0
  140. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/history.md +196 -0
  141. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/index.md +39 -0
  142. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/index.md +23 -0
  143. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/install.md +47 -0
  144. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/next-steps.md +19 -0
  145. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/requirements.md +29 -0
  146. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-dotnet.md +107 -0
  147. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-java.md +23 -0
  148. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-js.md +77 -0
  149. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-py.md +63 -0
  150. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-rb.md +85 -0
  151. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/uiauto2-driver.md +148 -0
  152. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/appium.md +395 -0
  153. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/bidi.md +71 -0
  154. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/index.md +30 -0
  155. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/jsonwp.md +215 -0
  156. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/mjsonwp.md +152 -0
  157. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/others.md +672 -0
  158. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/plugins.md +291 -0
  159. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/webdriver.md +1114 -0
  160. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/env-vars.md +31 -0
  161. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/extensions.md +240 -0
  162. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/index.md +35 -0
  163. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/server.md +76 -0
  164. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/setup.md +78 -0
  165. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/index.md +25 -0
  166. package/src/resources/submodules/appium/packages/appium/docs/ja/resources/index.md +28 -0
  167. package/src/resources/submodules/appium/packages/appium/docs/ja/sponsors/index.md +61 -0
  168. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-horiz-white.png +0 -0
  169. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-horiz.png +0 -0
  170. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-white.png +0 -0
  171. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo.png +0 -0
  172. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-dark.png +0 -0
  173. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-light.png +0 -0
  174. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-dark.png +0 -0
  175. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-light.png +0 -0
  176. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-sauce.png +0 -0
  177. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/index.md +2 -0
  178. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-appiumconf2024.md +45 -0
  179. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
  180. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-headspin-as-development-partner.md +47 -0
  181. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-lambdatest-as-strategic-partner.md +41 -0
  182. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
  183. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-sponsorship-program.md +48 -0
  184. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/appium3.md +40 -0
  185. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/hello-world.md +15 -0
  186. package/src/resources/submodules/appium/packages/appium/docs/zh/contributing/index.md +132 -0
  187. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-docs.md +86 -0
  188. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-doctor-checks.md +141 -0
  189. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-drivers.md +866 -0
  190. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-plugins.md +520 -0
  191. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/config-system.md +468 -0
  192. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/index.md +18 -0
  193. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/sensitive.md +49 -0
  194. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/clients.md +143 -0
  195. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/drivers.md +219 -0
  196. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/index.md +45 -0
  197. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/plugins.md +140 -0
  198. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/tools.md +87 -0
  199. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/branch-testing.md +57 -0
  200. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/caching.md +78 -0
  201. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/caps.md +284 -0
  202. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/config.md +102 -0
  203. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/context.md +44 -0
  204. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/event-timing.md +75 -0
  205. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/execute-methods.md +142 -0
  206. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/grid.md +166 -0
  207. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/headers.md +17 -0
  208. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/log-filters.md +86 -0
  209. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/managing-exts.md +89 -0
  210. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/migrating-1-to-2.md +410 -0
  211. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/migrating-2-to-3.md +459 -0
  212. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/security.md +89 -0
  213. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/settings.md +70 -0
  214. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/tls.md +43 -0
  215. package/src/resources/submodules/appium/packages/appium/docs/zh/index.md +54 -0
  216. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/appium.md +200 -0
  217. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/clients.md +139 -0
  218. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/drivers.md +188 -0
  219. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/history.md +196 -0
  220. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/index.md +39 -0
  221. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/index.md +23 -0
  222. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/install.md +47 -0
  223. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/next-steps.md +19 -0
  224. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/requirements.md +21 -0
  225. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-dotnet.md +99 -0
  226. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-java.md +20 -0
  227. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-js.md +62 -0
  228. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-py.md +57 -0
  229. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-rb.md +80 -0
  230. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/uiauto2-driver.md +148 -0
  231. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/appium.md +395 -0
  232. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/bidi.md +71 -0
  233. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/index.md +30 -0
  234. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/jsonwp.md +215 -0
  235. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/mjsonwp.md +152 -0
  236. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/others.md +672 -0
  237. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/plugins.md +291 -0
  238. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/webdriver.md +1114 -0
  239. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/env-vars.md +31 -0
  240. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/extensions.md +240 -0
  241. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/index.md +35 -0
  242. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/server.md +76 -0
  243. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/setup.md +78 -0
  244. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/index.md +25 -0
  245. package/src/resources/submodules/appium/packages/appium/docs/zh/resources/index.md +28 -0
  246. package/src/resources/submodules/appium/packages/appium/docs/zh/sponsors/index.md +61 -0
  247. package/src/resources/submodules/appium/packages/appium/types/manifest/README.md +30 -0
  248. package/src/resources/submodules/appium/packages/base-driver/CHANGELOG.md +1131 -0
  249. package/src/resources/submodules/appium/packages/base-driver/README.md +15 -0
  250. package/src/resources/submodules/appium/packages/base-driver/docs/mjsonwp/errors.md +82 -0
  251. package/src/resources/submodules/appium/packages/base-driver/docs/mjsonwp/protocol-methods.md +182 -0
  252. package/src/resources/submodules/appium/packages/base-driver/static/appium.png +0 -0
  253. package/src/resources/submodules/appium/packages/base-plugin/CHANGELOG.md +672 -0
  254. package/src/resources/submodules/appium/packages/base-plugin/README.md +15 -0
  255. package/src/resources/submodules/appium/packages/docutils/CHANGELOG.md +948 -0
  256. package/src/resources/submodules/appium/packages/docutils/README.md +27 -0
  257. package/src/resources/submodules/appium/packages/driver-test-support/CHANGELOG.md +717 -0
  258. package/src/resources/submodules/appium/packages/driver-test-support/README.md +112 -0
  259. package/src/resources/submodules/appium/packages/eslint-config-appium-ts/CHANGELOG.md +168 -0
  260. package/src/resources/submodules/appium/packages/eslint-config-appium-ts/README.md +33 -0
  261. package/src/resources/submodules/appium/packages/execute-driver-plugin/CHANGELOG.md +603 -0
  262. package/src/resources/submodules/appium/packages/execute-driver-plugin/README.md +42 -0
  263. package/src/resources/submodules/appium/packages/fake-driver/CHANGELOG.md +545 -0
  264. package/src/resources/submodules/appium/packages/fake-driver/README.md +7 -0
  265. package/src/resources/submodules/appium/packages/fake-driver/lib/screen.png +0 -0
  266. package/src/resources/submodules/appium/packages/fake-plugin/CHANGELOG.md +683 -0
  267. package/src/resources/submodules/appium/packages/fake-plugin/README.md +7 -0
  268. package/src/resources/submodules/appium/packages/images-plugin/CHANGELOG.md +602 -0
  269. package/src/resources/submodules/appium/packages/images-plugin/README.md +27 -0
  270. package/src/resources/submodules/appium/packages/images-plugin/docs/find-by-image.md +65 -0
  271. package/src/resources/submodules/appium/packages/images-plugin/docs/image-comparison.md +203 -0
  272. package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/appstore.png +0 -0
  273. package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/img1.png +0 -0
  274. package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/img2.png +0 -0
  275. package/src/resources/submodules/appium/packages/images-plugin/test/fixtures/img2_part.png +0 -0
  276. package/src/resources/submodules/appium/packages/logger/CHANGELOG.md +162 -0
  277. package/src/resources/submodules/appium/packages/logger/README.md +31 -0
  278. package/src/resources/submodules/appium/packages/opencv/CHANGELOG.md +384 -0
  279. package/src/resources/submodules/appium/packages/opencv/README.md +68 -0
  280. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/appium-diagram.jpg +0 -0
  281. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/cc1.png +0 -0
  282. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/cc2.png +0 -0
  283. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/cc_rotated.png +0 -0
  284. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/findwaldo.jpg +0 -0
  285. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/number5.png +0 -0
  286. package/src/resources/submodules/appium/packages/opencv/test/e2e/images/waldo.jpg +0 -0
  287. package/src/resources/submodules/appium/packages/plugin-test-support/CHANGELOG.md +539 -0
  288. package/src/resources/submodules/appium/packages/plugin-test-support/README.md +49 -0
  289. package/src/resources/submodules/appium/packages/relaxed-caps-plugin/CHANGELOG.md +154 -0
  290. package/src/resources/submodules/appium/packages/relaxed-caps-plugin/README.md +35 -0
  291. package/src/resources/submodules/appium/packages/schema/CHANGELOG.md +271 -0
  292. package/src/resources/submodules/appium/packages/schema/README.md +50 -0
  293. package/src/resources/submodules/appium/packages/storage-plugin/CHANGELOG.md +73 -0
  294. package/src/resources/submodules/appium/packages/storage-plugin/README.md +83 -0
  295. package/src/resources/submodules/appium/packages/strongbox/CHANGELOG.md +94 -0
  296. package/src/resources/submodules/appium/packages/strongbox/README.md +96 -0
  297. package/src/resources/submodules/appium/packages/support/CHANGELOG.md +1054 -0
  298. package/src/resources/submodules/appium/packages/support/README.md +161 -0
  299. package/src/resources/submodules/appium/packages/test-support/CHANGELOG.md +712 -0
  300. package/src/resources/submodules/appium/packages/test-support/README.md +61 -0
  301. package/src/resources/submodules/appium/packages/tsconfig/CHANGELOG.md +131 -0
  302. package/src/resources/submodules/appium/packages/tsconfig/README.md +19 -0
  303. package/src/resources/submodules/appium/packages/types/CHANGELOG.md +793 -0
  304. package/src/resources/submodules/appium/packages/types/README.md +21 -0
  305. package/src/resources/submodules/appium/packages/universal-xml-plugin/CHANGELOG.md +435 -0
  306. package/src/resources/submodules/appium/packages/universal-xml-plugin/README.md +53 -0
  307. package/src/resources/submodules/appium/renovate/README.md +63 -0
  308. package/src/resources/submodules/appium-uiautomator2-driver/CHANGELOG.md +1204 -0
  309. package/src/resources/submodules/appium-uiautomator2-driver/README.md +2077 -0
  310. package/src/resources/submodules/appium-uiautomator2-driver/docs/actions.md +72 -0
  311. package/src/resources/submodules/appium-uiautomator2-driver/docs/activity-startup.md +47 -0
  312. package/src/resources/submodules/appium-uiautomator2-driver/docs/android-appbundle.md +69 -0
  313. package/src/resources/submodules/appium-uiautomator2-driver/docs/android-mobile-gestures.md +352 -0
  314. package/src/resources/submodules/appium-uiautomator2-driver/docs/bidi.md +50 -0
  315. package/src/resources/submodules/appium-uiautomator2-driver/docs/capability-sets.md +136 -0
  316. package/src/resources/submodules/appium-uiautomator2-driver/docs/scheduled-actions.md +155 -0
  317. package/src/resources/submodules/appium-uiautomator2-driver/docs/uiautomator-uiselector.md +51 -0
  318. package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/main.md +95 -0
  319. package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/screen1.png +0 -0
  320. package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/screen2.png +0 -0
  321. package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/checkered-squares.png +0 -0
  322. package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/start-button.png +0 -0
  323. package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/stop-button.png +0 -0
  324. package/src/resources/submodules/appium-xcuitest-driver/.github/ISSUE_TEMPLATE.md +4 -0
  325. package/src/resources/submodules/appium-xcuitest-driver/CHANGELOG.md +2594 -0
  326. package/src/resources/submodules/appium-xcuitest-driver/README.md +55 -0
  327. package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-logo-white.png +0 -0
  328. package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-logo.png +0 -0
  329. package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-plus-xctest.png +0 -0
  330. package/src/resources/submodules/appium-xcuitest-driver/docs/contributing.md +45 -0
  331. package/src/resources/submodules/appium-xcuitest-driver/docs/endpoints-wda.md +61 -0
  332. package/src/resources/submodules/appium-xcuitest-driver/docs/endpoints.md +98 -0
  333. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/keynote.png +0 -0
  334. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/on_my_iphone.png +0 -0
  335. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/top_files.png +0 -0
  336. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/attach-to-running-wda.md +43 -0
  337. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/audio-capture.md +78 -0
  338. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/capability-sets.md +169 -0
  339. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/ci-setup.md +47 -0
  340. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/clipboard.md +47 -0
  341. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/elements-lookup-troubleshooting.md +158 -0
  342. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/file-transfer.md +147 -0
  343. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/gestures.md +52 -0
  344. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/hybrid.md +137 -0
  345. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/input-events.md +67 -0
  346. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/install-certificate.md +19 -0
  347. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/multiple-xcode-versions.md +37 -0
  348. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/parallel-tests.md +39 -0
  349. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/run-prebuilt-wda.md +135 -0
  350. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/run-preinstalled-wda.md +178 -0
  351. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/touch-id.md +33 -0
  352. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/troubleshooting.md +191 -0
  353. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/tvos.md +114 -0
  354. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/wda-custom-server.md +283 -0
  355. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/wda-slowness.md +231 -0
  356. package/src/resources/submodules/appium-xcuitest-driver/docs/index.md +36 -0
  357. package/src/resources/submodules/appium-xcuitest-driver/docs/installation/index.md +137 -0
  358. package/src/resources/submodules/appium-xcuitest-driver/docs/overview.md +19 -0
  359. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/check-prov-prof.png +0 -0
  360. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/create-new-project.png +0 -0
  361. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/create-single-page.png +0 -0
  362. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/no-prov-prof.png +0 -0
  363. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/project-prov-prof.png +0 -0
  364. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/set-up-bundle.png +0 -0
  365. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/untrusted-dev.png +0 -0
  366. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-bundle-id.png +0 -0
  367. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-config.png +0 -0
  368. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-facebook-fail.png +0 -0
  369. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/assets/images/xcode-facebook-succeed.png +0 -0
  370. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/index.md +51 -0
  371. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-basic-auto.md +49 -0
  372. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-basic-manual.md +40 -0
  373. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-full-manual.md +50 -0
  374. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/prov-profile-generic-manual.md +49 -0
  375. package/src/resources/submodules/appium-xcuitest-driver/docs/preparation/real-device-config.md +100 -0
  376. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/assets/images/useXctestrunFile.png +0 -0
  377. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/bidi.md +75 -0
  378. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/capabilities.md +165 -0
  379. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/commands.md +490 -0
  380. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/element-attributes.md +27 -0
  381. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/execute-methods.md +2206 -0
  382. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/ios-predicate.md +196 -0
  383. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/locator-strategies.md +19 -0
  384. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/scripts.md +29 -0
  385. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/security-flags.md +22 -0
  386. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/server-args.md +16 -0
  387. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/settings.md +49 -0
  388. package/src/resources/submodules/appium-xcuitest-driver/test/assets/TestApp-iphonesimulator.app/Default-568h@2x.png +0 -0
  389. package/src/resources/submodules/appium-xcuitest-driver/test/assets/test.png +0 -0
  390. package/src/schema.ts +5 -0
  391. package/src/scripts/simple-index-documentation.ts +93 -0
  392. package/src/scripts/simple-query-documentation.ts +61 -0
  393. package/src/server.ts +40 -0
  394. package/src/session-store.ts +151 -0
  395. package/src/tests/README.md +83 -0
  396. package/src/tests/__mocks__/@appium/support.ts +30 -0
  397. package/src/tests/generate-all-locators.test.ts +178 -0
  398. package/src/tests/screenshot.test.ts +279 -0
  399. package/src/tests/test-setup-wda.ts +255 -0
  400. package/src/tools/README.md +179 -0
  401. package/src/tools/app-management/activate-app.ts +47 -0
  402. package/src/tools/app-management/install-app.ts +46 -0
  403. package/src/tools/app-management/list-apps.ts +87 -0
  404. package/src/tools/app-management/terminate-app.ts +48 -0
  405. package/src/tools/app-management/uninstall-app.ts +48 -0
  406. package/src/tools/context/get-contexts.ts +87 -0
  407. package/src/tools/context/switch-context.ts +101 -0
  408. package/src/tools/documentation/answer-appium.ts +73 -0
  409. package/src/tools/documentation/index.ts +98 -0
  410. package/src/tools/documentation/reasoning-rag.ts +435 -0
  411. package/src/tools/documentation/sentence-transformers-embeddings.ts +144 -0
  412. package/src/tools/documentation/simple-pdf-indexer.ts +508 -0
  413. package/src/tools/documentation/uploads/documents.json +1 -0
  414. package/src/tools/index.ts +159 -0
  415. package/src/tools/interactions/click.ts +48 -0
  416. package/src/tools/interactions/double-tap.ts +96 -0
  417. package/src/tools/interactions/drag-and-drop.ts +236 -0
  418. package/src/tools/interactions/find.ts +58 -0
  419. package/src/tools/interactions/get-page-source.ts +65 -0
  420. package/src/tools/interactions/get-text.ts +48 -0
  421. package/src/tools/interactions/long-press.ts +111 -0
  422. package/src/tools/interactions/screenshot.ts +116 -0
  423. package/src/tools/interactions/set-value.ts +49 -0
  424. package/src/tools/ios/boot-simulator.ts +88 -0
  425. package/src/tools/ios/install-wda.ts +277 -0
  426. package/src/tools/ios/setup-wda.ts +217 -0
  427. package/src/tools/navigations/scroll-to-element.ts +198 -0
  428. package/src/tools/navigations/scroll.ts +101 -0
  429. package/src/tools/navigations/swipe.ts +364 -0
  430. package/src/tools/session/create-session.ts +379 -0
  431. package/src/tools/session/delete-session.ts +56 -0
  432. package/src/tools/session/select-device.ts +326 -0
  433. package/src/tools/session/select-platform.ts +250 -0
  434. package/src/tools/test-generation/generate-tests.ts +48 -0
  435. package/src/tools/test-generation/locators.ts +103 -0
  436. package/src/ui/mcp-ui-utils.ts +1630 -0
@@ -0,0 +1,151 @@
1
+ import { AndroidUiautomator2Driver } from 'appium-uiautomator2-driver';
2
+ import { XCUITestDriver } from 'appium-xcuitest-driver';
3
+ import type { Client } from 'webdriver';
4
+ import log from './logger.js';
5
+
6
+ let driver: any = null;
7
+ let sessionId: string | null = null;
8
+ let isDeletingSession = false; // Lock to prevent concurrent deletion
9
+
10
+ // Type aliases for driver variants used throughout the project.
11
+ export type DriverInstance =
12
+ | Client
13
+ | AndroidUiautomator2Driver
14
+ | XCUITestDriver;
15
+ export type NullableDriverInstance = DriverInstance | null;
16
+
17
+ export const PLATFORM = {
18
+ android: 'Android',
19
+ ios: 'iOS',
20
+ };
21
+
22
+ /**
23
+ * Determine whether the provided driver represents a remote driver session.
24
+ *
25
+ * This checks for the presence of a string-valued `sessionId` property on the
26
+ * driver object, which indicates a remote/WebDriver session.
27
+ *
28
+ * @param driver - The driver instance to inspect (may be a Client, AndroidUiautomator2Driver, XCUITestDriver, or null).
29
+ * @returns `true` if `driver` is non-null and has a string `sessionId`; otherwise `false`.
30
+ */
31
+ export function isRemoteDriverSession(driver: NullableDriverInstance): boolean {
32
+ if (driver) {
33
+ return (
34
+ !(driver instanceof AndroidUiautomator2Driver) &&
35
+ !(driver instanceof XCUITestDriver)
36
+ );
37
+ }
38
+ return false;
39
+ }
40
+
41
+ /**
42
+ * Type-guard that asserts the provided driver is an Android UiAutomator2 driver.
43
+ *
44
+ * Performs a runtime `instanceof` check. When this function returns `true`,
45
+ * TypeScript will narrow the variable's type to `AndroidUiautomator2Driver`.
46
+ * Use this helper to safely call Android-specific driver methods without
47
+ * casting.
48
+ *
49
+ * @param driver - The driver instance to test (may be a `Client`,
50
+ * `AndroidUiautomator2Driver`, `XCUITestDriver`, or `null`).
51
+ * @returns `true` if `driver` is an `AndroidUiautomator2Driver`.
52
+ */
53
+ export function isAndroidUiautomator2DriverSession(
54
+ driver: NullableDriverInstance
55
+ ): driver is AndroidUiautomator2Driver {
56
+ return driver instanceof AndroidUiautomator2Driver;
57
+ }
58
+
59
+ /**
60
+ * Type-guard that asserts the provided driver is an XCUITest (iOS) driver.
61
+ *
62
+ * Performs a runtime `instanceof` check and narrows the type to
63
+ * `XCUITestDriver` when true. This lets callers invoke iOS-specific driver
64
+ * APIs without explicit casts.
65
+ *
66
+ * @param driver - The driver instance to test (may be a `Client`,
67
+ * `AndroidUiautomator2Driver`, `XCUITestDriver`, or `null`).
68
+ * @returns `true` if `driver` is an `XCUITestDriver`.
69
+ */
70
+ export function isXCUITestDriverSession(
71
+ driver: NullableDriverInstance
72
+ ): driver is XCUITestDriver {
73
+ return driver instanceof XCUITestDriver;
74
+ }
75
+
76
+ export function setSession(d: DriverInstance, id: string | null) {
77
+ driver = d;
78
+ sessionId = id;
79
+ // Reset deletion flag when setting a new session
80
+ if (d && id) {
81
+ isDeletingSession = false;
82
+ }
83
+ }
84
+
85
+ export function getDriver(): NullableDriverInstance {
86
+ return driver;
87
+ }
88
+
89
+ export function getSessionId() {
90
+ return sessionId;
91
+ }
92
+
93
+ export function isDeletingSessionInProgress() {
94
+ return isDeletingSession;
95
+ }
96
+
97
+ export function hasActiveSession(): boolean {
98
+ return driver !== null && sessionId !== null && !isDeletingSession;
99
+ }
100
+
101
+ export async function safeDeleteSession(): Promise<boolean> {
102
+ // Check if there's no session to delete
103
+ if (!driver || !sessionId) {
104
+ log.info('No active session to delete.');
105
+ return false;
106
+ }
107
+
108
+ // Check if deletion is already in progress
109
+ if (isDeletingSession) {
110
+ log.info('Session deletion already in progress, skipping...');
111
+ return false;
112
+ }
113
+
114
+ // Set lock
115
+ isDeletingSession = true;
116
+
117
+ try {
118
+ log.info('Deleting current session');
119
+ await driver.deleteSession();
120
+
121
+ // Clear the session from store
122
+ driver = null;
123
+ sessionId = null;
124
+
125
+ log.info('Session deleted successfully.');
126
+ return true;
127
+ } catch (error) {
128
+ log.error('Error deleting session:', error);
129
+ throw error;
130
+ } finally {
131
+ // Always release lock
132
+ isDeletingSession = false;
133
+ }
134
+ }
135
+
136
+ export const getPlatformName = (driver: any): string => {
137
+ if (driver instanceof AndroidUiautomator2Driver) {
138
+ return PLATFORM.android;
139
+ }
140
+ if (driver instanceof XCUITestDriver) {
141
+ return PLATFORM.ios;
142
+ }
143
+
144
+ if ((driver as Client).isAndroid) {
145
+ return PLATFORM.android;
146
+ } else if ((driver as Client).isIOS) {
147
+ return PLATFORM.ios;
148
+ }
149
+
150
+ throw new Error('Unknown driver type');
151
+ };
@@ -0,0 +1,83 @@
1
+ # Tests for Mobile Agent
2
+
3
+ This directory contains unit tests for the Mobile Agent project.
4
+
5
+ ## Running Tests
6
+
7
+ To run all tests:
8
+
9
+ ```bash
10
+ npm test
11
+ ```
12
+
13
+ To run specific test files:
14
+
15
+ ```bash
16
+ # Run tests for the locator generation functionality
17
+ npm run test:locators
18
+ ```
19
+
20
+ ## Test Files
21
+
22
+ ### generate-all-locators.test.ts
23
+
24
+ This file contains tests for the `generateAllElementLocators` function, which is responsible for generating locators for all elements in a page source XML.
25
+
26
+ The tests cover:
27
+
28
+ 1. Basic functionality with valid XML
29
+ 2. Handling of invalid/empty XML
30
+ 3. Various filtering options:
31
+ - `includeTagNames` - Include only specific element types
32
+ - `excludeTagNames` - Exclude specific element types
33
+ - `minAttributeCount` - Filter elements by minimum attribute count
34
+ - `fetchableOnly` - Include only interactable elements (platform-specific)
35
+ - `clickableOnly` - Include only clickable elements
36
+
37
+ ## Adding New Tests
38
+
39
+ When adding new tests:
40
+
41
+ 1. Create a new test file in the `src/tests` directory with the `.test.ts` extension
42
+ 2. Import the necessary functions and types from the source files
43
+ 3. Use Jest's `describe`, `test`, and `expect` functions to structure your tests
44
+ 4. Add a new script to `package.json` for running your specific test file
45
+
46
+ ## Test Structure
47
+
48
+ Tests should follow this general structure:
49
+
50
+ ```typescript
51
+ import { describe, test, expect } from '@jest/globals';
52
+ import { functionToTest } from '../path/to/function.js';
53
+
54
+ describe('functionToTest', () => {
55
+ test('should do something specific', () => {
56
+ // Arrange - set up test data
57
+ const input = 'some input';
58
+
59
+ // Act - call the function
60
+ const result = functionToTest(input);
61
+
62
+ // Assert - verify the result
63
+ expect(result).toBe('expected output');
64
+ });
65
+ });
66
+ ```
67
+
68
+ ## Mocking
69
+
70
+ For tests that require mocking dependencies, use Jest's mocking capabilities:
71
+
72
+ ```typescript
73
+ import { jest } from '@jest/globals';
74
+
75
+ // Mock a module
76
+ jest.mock('../path/to/module.js');
77
+
78
+ // Create a mock function
79
+ const mockFunction = jest.fn();
80
+ mockFunction.mockReturnValue('mocked value');
81
+ ```
82
+
83
+ Note that when working with ESM modules, you may need to use different mocking approaches than with CommonJS modules.
@@ -0,0 +1,30 @@
1
+ // Mock @appium/support for Jest tests
2
+ // This avoids the ESM/CommonJS mismatch with uuid dependency
3
+
4
+ export const logger = {
5
+ getLogger: (name: string) =>
6
+ // Simple logger implementation for tests
7
+ // No-op functions that match the logger interface
8
+ ({
9
+ debug: (message: string, ...args: any[]) => {
10
+ // Silent in tests by default
11
+ },
12
+ info: (message: string, ...args: any[]) => {
13
+ // Silent in tests by default
14
+ },
15
+ warn: (message: string, ...args: any[]) => {
16
+ // Silent in tests by default
17
+ },
18
+ error: (message: string, ...args: any[]) => {
19
+ // Silent in tests by default
20
+ },
21
+ trace: (message: string, ...args: any[]) => {
22
+ // Silent in tests by default
23
+ },
24
+ }),
25
+ };
26
+
27
+ // Export other commonly used utilities from @appium/support if needed
28
+ export default {
29
+ logger,
30
+ };
@@ -0,0 +1,178 @@
1
+ import { describe, test, expect } from '@jest/globals';
2
+ import {
3
+ generateAllElementLocators,
4
+ ElementWithLocators,
5
+ } from '../locators/generate-all-locators.js';
6
+
7
+ describe('generateAllElementLocators', () => {
8
+ // Sample XML for testing
9
+ const sampleXML = `
10
+ <hierarchy>
11
+ <android.widget.FrameLayout resource-id="android:id/content">
12
+ <android.widget.LinearLayout>
13
+ <android.widget.TextView text="Hello World" resource-id="com.example:id/text_view" clickable="true" enabled="true" displayed="true" />
14
+ <android.widget.Button text="Click Me" resource-id="com.example:id/button" clickable="true" enabled="true" displayed="true" />
15
+ <android.widget.EditText text="" resource-id="com.example:id/edit_text" clickable="true" enabled="true" displayed="true" />
16
+ </android.widget.LinearLayout>
17
+ </android.widget.FrameLayout>
18
+ </hierarchy>
19
+ `;
20
+
21
+ // Sample iOS XML for testing
22
+ const sampleIOSXML = `
23
+ <hierarchy>
24
+ <XCUIElementTypeApplication>
25
+ <XCUIElementTypeWindow>
26
+ <XCUIElementTypeButton name="Click Me" enabled="true" visible="true" />
27
+ <XCUIElementTypeTextField name="Enter text" enabled="true" visible="true" />
28
+ <XCUIElementTypeStaticText name="Hello World" enabled="true" visible="true" />
29
+ </XCUIElementTypeWindow>
30
+ </XCUIElementTypeApplication>
31
+ </hierarchy>
32
+ `;
33
+
34
+ test('should return an array when given valid XML', () => {
35
+ // Call the function with the sample XML
36
+ const result = generateAllElementLocators(sampleXML, true, 'uiautomator2');
37
+
38
+ // Basic validation of the result
39
+ expect(Array.isArray(result)).toBe(true);
40
+ expect(result.length).toBeGreaterThan(0);
41
+
42
+ // Verify the structure of the returned elements
43
+ if (result.length > 0) {
44
+ const element = result[0];
45
+ expect(element).toHaveProperty('tagName');
46
+ expect(element).toHaveProperty('locators');
47
+ expect(element).toHaveProperty('text');
48
+ expect(element).toHaveProperty('contentDesc');
49
+ expect(element).toHaveProperty('resourceId');
50
+ expect(element).toHaveProperty('clickable');
51
+ expect(element).toHaveProperty('enabled');
52
+ expect(element).toHaveProperty('displayed');
53
+ }
54
+ });
55
+
56
+ test('should return an empty array when given invalid XML', () => {
57
+ // Call the function with invalid XML (just a root element with no content)
58
+ const result = generateAllElementLocators(
59
+ '<hierarchy></hierarchy>',
60
+ true,
61
+ 'uiautomator2'
62
+ );
63
+
64
+ // Verify the result is an empty array or at least doesn't throw an error
65
+ expect(Array.isArray(result)).toBe(true);
66
+ expect(result.length).toBe(0);
67
+ });
68
+
69
+ test('should apply includeTagNames filter correctly', () => {
70
+ // Call the function with filters
71
+ const result = generateAllElementLocators(sampleXML, true, 'uiautomator2', {
72
+ includeTagNames: ['android.widget.Button'],
73
+ });
74
+
75
+ // If the filter works, either the result will be empty (if no buttons found)
76
+ // or all elements will be buttons
77
+ if (result.length > 0) {
78
+ expect(
79
+ result.every((element) => element.tagName.includes('Button'))
80
+ ).toBe(true);
81
+ }
82
+ });
83
+
84
+ test('should apply excludeTagNames filter correctly', () => {
85
+ // Call the function with excludeTagNames filter
86
+ const result = generateAllElementLocators(sampleXML, true, 'uiautomator2', {
87
+ excludeTagNames: ['android.widget.Button'],
88
+ });
89
+
90
+ // Verify no Button elements are included
91
+ expect(result.every((element) => !element.tagName.includes('Button'))).toBe(
92
+ true
93
+ );
94
+ });
95
+
96
+ test('should apply minAttributeCount filter correctly', () => {
97
+ // Call the function with minAttributeCount filter
98
+ const result = generateAllElementLocators(sampleXML, true, 'uiautomator2', {
99
+ minAttributeCount: 3,
100
+ });
101
+
102
+ // All elements should have at least 3 attributes
103
+ if (result.length > 0) {
104
+ // We can't directly check the attributes count since we only have the processed elements
105
+ // But we can verify that elements with fewer attributes are filtered out
106
+ expect(result.length).toBeLessThanOrEqual(
107
+ generateAllElementLocators(sampleXML, true, 'uiautomator2').length
108
+ );
109
+ }
110
+ });
111
+
112
+ test('should handle fetchableOnly filter for Android', () => {
113
+ // Call the function with fetchableOnly filter
114
+ const result = generateAllElementLocators(sampleXML, true, 'uiautomator2', {
115
+ fetchableOnly: true,
116
+ });
117
+
118
+ // Verify the result contains only interactable elements
119
+ if (result.length > 0) {
120
+ const interactableTags = [
121
+ 'EditText',
122
+ 'Button',
123
+ 'ImageButton',
124
+ 'CheckBox',
125
+ 'RadioButton',
126
+ 'Switch',
127
+ 'ToggleButton',
128
+ 'TextView',
129
+ ];
130
+
131
+ expect(
132
+ result.every(
133
+ (element) =>
134
+ interactableTags.some((tag) => element.tagName.includes(tag)) ||
135
+ element.clickable === true
136
+ )
137
+ ).toBe(true);
138
+ }
139
+ });
140
+
141
+ test('should handle fetchableOnly filter for iOS', () => {
142
+ // Call the function with fetchableOnly filter for iOS
143
+ const result = generateAllElementLocators(sampleIOSXML, true, 'xcuitest', {
144
+ fetchableOnly: true,
145
+ });
146
+
147
+ // Verify the result contains only interactable iOS elements
148
+ if (result.length > 0) {
149
+ const interactableTags = [
150
+ 'XCUIElementTypeTextField',
151
+ 'XCUIElementTypeSecureTextField',
152
+ 'XCUIElementTypeButton',
153
+ 'XCUIElementTypeImage',
154
+ 'XCUIElementTypeSwitch',
155
+ 'XCUIElementTypeStaticText',
156
+ 'XCUIElementTypeTextView',
157
+ 'XCUIElementTypeCell',
158
+ 'XCUIElementTypeLink',
159
+ ];
160
+
161
+ expect(
162
+ result.every((element) =>
163
+ interactableTags.some((tag) => element.tagName.includes(tag))
164
+ )
165
+ ).toBe(true);
166
+ }
167
+ });
168
+
169
+ test('should handle clickableOnly filter correctly', () => {
170
+ // Call the function with clickableOnly filter
171
+ const result = generateAllElementLocators(sampleXML, true, 'uiautomator2', {
172
+ clickableOnly: true,
173
+ });
174
+
175
+ // Verify all elements are clickable
176
+ expect(result.every((element) => element.clickable === true)).toBe(true);
177
+ });
178
+ });