@appium/mcp-documentation 1.0.3 → 1.0.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 (417) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/package.json +4 -7
  3. package/src/resources/submodules/appium/.github/PULL_REQUEST_TEMPLATE.md +28 -0
  4. package/src/resources/submodules/appium/.github/copilot-instructions.md +9 -0
  5. package/src/resources/submodules/appium/CHANGELOG.md +45 -0
  6. package/src/resources/submodules/appium/GOVERNANCE.md +189 -0
  7. package/src/resources/submodules/appium/README.md +221 -0
  8. package/src/resources/submodules/appium/ROADMAP.md +30 -0
  9. package/src/resources/submodules/appium/SPONSORS.md +3 -0
  10. package/src/resources/submodules/appium/docs/README.md +6 -0
  11. package/src/resources/submodules/appium/docs/payout.md +35 -0
  12. package/src/resources/submodules/appium/packages/appium/CHANGELOG.md +1547 -0
  13. package/src/resources/submodules/appium/packages/appium/README.md +221 -0
  14. package/src/resources/submodules/appium/packages/appium/docs/en/blog/index.md +2 -0
  15. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-appiumconf2024.md +45 -0
  16. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
  17. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-headspin-as-development-partner.md +47 -0
  18. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-lambdatest-as-development-partner.md +36 -0
  19. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-lambdatest-as-strategic-partner.md +42 -0
  20. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
  21. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/announcing-sponsorship-program.md +48 -0
  22. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/appium3.md +40 -0
  23. package/src/resources/submodules/appium/packages/appium/docs/en/blog/posts/hello-world.md +15 -0
  24. package/src/resources/submodules/appium/packages/appium/docs/en/contributing/index.md +150 -0
  25. package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-docs.md +86 -0
  26. package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-doctor-checks.md +141 -0
  27. package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-drivers.md +1002 -0
  28. package/src/resources/submodules/appium/packages/appium/docs/en/developing/build-plugins.md +523 -0
  29. package/src/resources/submodules/appium/packages/appium/docs/en/developing/config-system.md +451 -0
  30. package/src/resources/submodules/appium/packages/appium/docs/en/developing/index.md +18 -0
  31. package/src/resources/submodules/appium/packages/appium/docs/en/developing/sensitive.md +49 -0
  32. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/clients.md +132 -0
  33. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/drivers.md +207 -0
  34. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/index.md +45 -0
  35. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/plugins.md +138 -0
  36. package/src/resources/submodules/appium/packages/appium/docs/en/ecosystem/tools.md +106 -0
  37. package/src/resources/submodules/appium/packages/appium/docs/en/guides/branch-testing.md +57 -0
  38. package/src/resources/submodules/appium/packages/appium/docs/en/guides/caching.md +76 -0
  39. package/src/resources/submodules/appium/packages/appium/docs/en/guides/caps.md +271 -0
  40. package/src/resources/submodules/appium/packages/appium/docs/en/guides/config.md +98 -0
  41. package/src/resources/submodules/appium/packages/appium/docs/en/guides/context.md +44 -0
  42. package/src/resources/submodules/appium/packages/appium/docs/en/guides/event-timing.md +73 -0
  43. package/src/resources/submodules/appium/packages/appium/docs/en/guides/execute-methods.md +122 -0
  44. package/src/resources/submodules/appium/packages/appium/docs/en/guides/grid.md +178 -0
  45. package/src/resources/submodules/appium/packages/appium/docs/en/guides/headers.md +17 -0
  46. package/src/resources/submodules/appium/packages/appium/docs/en/guides/log-filters.md +86 -0
  47. package/src/resources/submodules/appium/packages/appium/docs/en/guides/managing-exts.md +87 -0
  48. package/src/resources/submodules/appium/packages/appium/docs/en/guides/migrating-1-to-2.md +368 -0
  49. package/src/resources/submodules/appium/packages/appium/docs/en/guides/migrating-2-to-3.md +464 -0
  50. package/src/resources/submodules/appium/packages/appium/docs/en/guides/security.md +87 -0
  51. package/src/resources/submodules/appium/packages/appium/docs/en/guides/settings.md +68 -0
  52. package/src/resources/submodules/appium/packages/appium/docs/en/guides/tls.md +42 -0
  53. package/src/resources/submodules/appium/packages/appium/docs/en/index.md +59 -0
  54. package/src/resources/submodules/appium/packages/appium/docs/en/intro/appium.md +202 -0
  55. package/src/resources/submodules/appium/packages/appium/docs/en/intro/clients.md +127 -0
  56. package/src/resources/submodules/appium/packages/appium/docs/en/intro/drivers.md +188 -0
  57. package/src/resources/submodules/appium/packages/appium/docs/en/intro/history.md +196 -0
  58. package/src/resources/submodules/appium/packages/appium/docs/en/intro/index.md +39 -0
  59. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/index.md +29 -0
  60. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/install.md +50 -0
  61. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/next-steps.md +23 -0
  62. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/requirements.md +29 -0
  63. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-dotnet.md +105 -0
  64. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-java.md +23 -0
  65. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-js.md +75 -0
  66. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-py.md +60 -0
  67. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/test-rb.md +83 -0
  68. package/src/resources/submodules/appium/packages/appium/docs/en/quickstart/uiauto2-driver.md +144 -0
  69. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/appium.md +394 -0
  70. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/bidi.md +70 -0
  71. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/index.md +30 -0
  72. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/jsonwp.md +214 -0
  73. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/mjsonwp.md +151 -0
  74. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/others.md +736 -0
  75. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/plugins.md +289 -0
  76. package/src/resources/submodules/appium/packages/appium/docs/en/reference/api/webdriver.md +1114 -0
  77. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/env-vars.md +31 -0
  78. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/extensions.md +246 -0
  79. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/index.md +36 -0
  80. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/insecure-features.md +24 -0
  81. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/server.md +78 -0
  82. package/src/resources/submodules/appium/packages/appium/docs/en/reference/cli/setup.md +76 -0
  83. package/src/resources/submodules/appium/packages/appium/docs/en/reference/index.md +31 -0
  84. package/src/resources/submodules/appium/packages/appium/docs/en/reference/session/caps.md +56 -0
  85. package/src/resources/submodules/appium/packages/appium/docs/en/reference/session/index.md +23 -0
  86. package/src/resources/submodules/appium/packages/appium/docs/en/resources/index.md +28 -0
  87. package/src/resources/submodules/appium/packages/appium/docs/en/sponsors/index.md +69 -0
  88. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/index.md +2 -0
  89. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-appiumconf2024.md +45 -0
  90. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
  91. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-headspin-as-development-partner.md +47 -0
  92. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-lambdatest-as-development-partner.md +34 -0
  93. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-lambdatest-as-strategic-partner.md +41 -0
  94. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
  95. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/announcing-sponsorship-program.md +48 -0
  96. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/appium3.md +40 -0
  97. package/src/resources/submodules/appium/packages/appium/docs/ja/blog/posts/hello-world.md +15 -0
  98. package/src/resources/submodules/appium/packages/appium/docs/ja/contributing/index.md +158 -0
  99. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-docs.md +86 -0
  100. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-doctor-checks.md +141 -0
  101. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-drivers.md +1010 -0
  102. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/build-plugins.md +529 -0
  103. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/config-system.md +468 -0
  104. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/index.md +18 -0
  105. package/src/resources/submodules/appium/packages/appium/docs/ja/developing/sensitive.md +49 -0
  106. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/clients.md +143 -0
  107. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/drivers.md +219 -0
  108. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/index.md +45 -0
  109. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/plugins.md +140 -0
  110. package/src/resources/submodules/appium/packages/appium/docs/ja/ecosystem/tools.md +115 -0
  111. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/branch-testing.md +57 -0
  112. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/caching.md +78 -0
  113. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/caps.md +276 -0
  114. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/config.md +102 -0
  115. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/context.md +44 -0
  116. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/event-timing.md +75 -0
  117. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/execute-methods.md +142 -0
  118. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/grid.md +178 -0
  119. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/headers.md +17 -0
  120. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/log-filters.md +86 -0
  121. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/managing-exts.md +89 -0
  122. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/migrating-1-to-2.md +402 -0
  123. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/migrating-2-to-3.md +458 -0
  124. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/security.md +89 -0
  125. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/settings.md +70 -0
  126. package/src/resources/submodules/appium/packages/appium/docs/ja/guides/tls.md +43 -0
  127. package/src/resources/submodules/appium/packages/appium/docs/ja/index.md +55 -0
  128. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/appium.md +191 -0
  129. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/clients.md +139 -0
  130. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/drivers.md +188 -0
  131. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/history.md +196 -0
  132. package/src/resources/submodules/appium/packages/appium/docs/ja/intro/index.md +39 -0
  133. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/index.md +23 -0
  134. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/install.md +47 -0
  135. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/next-steps.md +19 -0
  136. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/requirements.md +29 -0
  137. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-dotnet.md +107 -0
  138. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-java.md +23 -0
  139. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-js.md +77 -0
  140. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-py.md +63 -0
  141. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/test-rb.md +85 -0
  142. package/src/resources/submodules/appium/packages/appium/docs/ja/quickstart/uiauto2-driver.md +148 -0
  143. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/appium.md +395 -0
  144. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/bidi.md +71 -0
  145. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/index.md +30 -0
  146. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/jsonwp.md +215 -0
  147. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/mjsonwp.md +152 -0
  148. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/others.md +737 -0
  149. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/plugins.md +291 -0
  150. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/api/webdriver.md +1114 -0
  151. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/env-vars.md +31 -0
  152. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/extensions.md +247 -0
  153. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/index.md +36 -0
  154. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/insecure-features.md +23 -0
  155. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/server.md +78 -0
  156. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/cli/setup.md +78 -0
  157. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/index.md +31 -0
  158. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/session/caps.md +56 -0
  159. package/src/resources/submodules/appium/packages/appium/docs/ja/reference/session/index.md +23 -0
  160. package/src/resources/submodules/appium/packages/appium/docs/ja/resources/index.md +28 -0
  161. package/src/resources/submodules/appium/packages/appium/docs/ja/sponsors/index.md +66 -0
  162. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-horiz-white.png +0 -0
  163. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-horiz.png +0 -0
  164. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo-white.png +0 -0
  165. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/appium-logo.png +0 -0
  166. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-dark.png +0 -0
  167. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-browserstack-light.png +0 -0
  168. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-dark.png +0 -0
  169. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-lambdatest-light.png +0 -0
  170. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-sauce.png +0 -0
  171. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-testmuai-dark.png +0 -0
  172. package/src/resources/submodules/appium/packages/appium/docs/overrides/assets/images/sponsor-logo-testmuai-light.png +0 -0
  173. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/index.md +2 -0
  174. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-appiumconf2024.md +45 -0
  175. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-browserstack-as-strategic-partner.md +46 -0
  176. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-headspin-as-development-partner.md +47 -0
  177. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-lambdatest-as-development-partner.md +34 -0
  178. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-lambdatest-as-strategic-partner.md +41 -0
  179. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-sauce-labs-as-strategic-partner.md +36 -0
  180. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/announcing-sponsorship-program.md +48 -0
  181. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/appium3.md +40 -0
  182. package/src/resources/submodules/appium/packages/appium/docs/zh/blog/posts/hello-world.md +15 -0
  183. package/src/resources/submodules/appium/packages/appium/docs/zh/contributing/index.md +132 -0
  184. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-docs.md +86 -0
  185. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-doctor-checks.md +141 -0
  186. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-drivers.md +1010 -0
  187. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/build-plugins.md +529 -0
  188. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/config-system.md +468 -0
  189. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/index.md +18 -0
  190. package/src/resources/submodules/appium/packages/appium/docs/zh/developing/sensitive.md +49 -0
  191. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/clients.md +143 -0
  192. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/drivers.md +219 -0
  193. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/index.md +45 -0
  194. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/plugins.md +140 -0
  195. package/src/resources/submodules/appium/packages/appium/docs/zh/ecosystem/tools.md +115 -0
  196. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/branch-testing.md +57 -0
  197. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/caching.md +78 -0
  198. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/caps.md +279 -0
  199. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/config.md +102 -0
  200. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/context.md +44 -0
  201. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/event-timing.md +75 -0
  202. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/execute-methods.md +142 -0
  203. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/grid.md +178 -0
  204. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/headers.md +17 -0
  205. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/log-filters.md +86 -0
  206. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/managing-exts.md +89 -0
  207. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/migrating-1-to-2.md +410 -0
  208. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/migrating-2-to-3.md +459 -0
  209. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/security.md +89 -0
  210. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/settings.md +70 -0
  211. package/src/resources/submodules/appium/packages/appium/docs/zh/guides/tls.md +43 -0
  212. package/src/resources/submodules/appium/packages/appium/docs/zh/index.md +54 -0
  213. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/appium.md +91 -0
  214. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/clients.md +100 -0
  215. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/drivers.md +101 -0
  216. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/history.md +72 -0
  217. package/src/resources/submodules/appium/packages/appium/docs/zh/intro/index.md +36 -0
  218. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/index.md +23 -0
  219. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/install.md +47 -0
  220. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/next-steps.md +19 -0
  221. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/requirements.md +21 -0
  222. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-dotnet.md +99 -0
  223. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-java.md +20 -0
  224. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-js.md +62 -0
  225. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-py.md +57 -0
  226. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/test-rb.md +80 -0
  227. package/src/resources/submodules/appium/packages/appium/docs/zh/quickstart/uiauto2-driver.md +119 -0
  228. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/appium.md +395 -0
  229. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/bidi.md +71 -0
  230. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/index.md +30 -0
  231. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/jsonwp.md +215 -0
  232. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/mjsonwp.md +152 -0
  233. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/others.md +737 -0
  234. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/plugins.md +291 -0
  235. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/api/webdriver.md +1114 -0
  236. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/env-vars.md +31 -0
  237. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/extensions.md +247 -0
  238. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/index.md +36 -0
  239. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/insecure-features.md +23 -0
  240. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/server.md +78 -0
  241. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/cli/setup.md +78 -0
  242. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/index.md +31 -0
  243. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/session/caps.md +56 -0
  244. package/src/resources/submodules/appium/packages/appium/docs/zh/reference/session/index.md +23 -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 +66 -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 +1244 -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 +764 -0
  254. package/src/resources/submodules/appium/packages/base-plugin/README.md +15 -0
  255. package/src/resources/submodules/appium/packages/docutils/CHANGELOG.md +1038 -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 +790 -0
  258. package/src/resources/submodules/appium/packages/driver-test-support/README.md +103 -0
  259. package/src/resources/submodules/appium/packages/eslint-config-appium-ts/CHANGELOG.md +256 -0
  260. package/src/resources/submodules/appium/packages/eslint-config-appium-ts/README.md +47 -0
  261. package/src/resources/submodules/appium/packages/execute-driver-plugin/CHANGELOG.md +671 -0
  262. package/src/resources/submodules/appium/packages/execute-driver-plugin/README.md +55 -0
  263. package/src/resources/submodules/appium/packages/fake-driver/CHANGELOG.md +603 -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 +780 -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 +691 -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 +212 -0
  277. package/src/resources/submodules/appium/packages/logger/README.md +31 -0
  278. package/src/resources/submodules/appium/packages/opencv/CHANGELOG.md +446 -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 +610 -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 +209 -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 +308 -0
  292. package/src/resources/submodules/appium/packages/schema/README.md +50 -0
  293. package/src/resources/submodules/appium/packages/storage-plugin/CHANGELOG.md +157 -0
  294. package/src/resources/submodules/appium/packages/storage-plugin/README.md +83 -0
  295. package/src/resources/submodules/appium/packages/strongbox/CHANGELOG.md +129 -0
  296. package/src/resources/submodules/appium/packages/strongbox/README.md +110 -0
  297. package/src/resources/submodules/appium/packages/support/CHANGELOG.md +1147 -0
  298. package/src/resources/submodules/appium/packages/support/README.md +161 -0
  299. package/src/resources/submodules/appium/packages/tsconfig/CHANGELOG.md +147 -0
  300. package/src/resources/submodules/appium/packages/tsconfig/README.md +19 -0
  301. package/src/resources/submodules/appium/packages/types/CHANGELOG.md +871 -0
  302. package/src/resources/submodules/appium/packages/types/README.md +21 -0
  303. package/src/resources/submodules/appium/packages/universal-xml-plugin/CHANGELOG.md +502 -0
  304. package/src/resources/submodules/appium/packages/universal-xml-plugin/README.md +53 -0
  305. package/src/resources/submodules/appium/renovate/README.md +55 -0
  306. package/src/resources/submodules/appium-skills/.github/dependabot.yml +11 -0
  307. package/src/resources/submodules/appium-skills/.github/workflows/pr-title.yml +10 -0
  308. package/src/resources/submodules/appium-skills/AGENTS.md +214 -0
  309. package/src/resources/submodules/appium-skills/LICENSE +201 -0
  310. package/src/resources/submodules/appium-skills/README.md +33 -0
  311. package/src/resources/submodules/appium-skills/skills/appium-troubleshooting/SKILL.md +66 -0
  312. package/src/resources/submodules/appium-skills/skills/appium-troubleshooting/references/community-search.md +51 -0
  313. package/src/resources/submodules/appium-skills/skills/appium-troubleshooting/references/uiautomator2-locators.md +34 -0
  314. package/src/resources/submodules/appium-skills/skills/appium-troubleshooting/references/uiautomator2-session-startup.md +53 -0
  315. package/src/resources/submodules/appium-skills/skills/appium-troubleshooting/references/xcuitest-element-lookup.md +23 -0
  316. package/src/resources/submodules/appium-skills/skills/appium-troubleshooting/references/xcuitest-locators.md +16 -0
  317. package/src/resources/submodules/appium-skills/skills/appium-troubleshooting/references/xcuitest-troubleshooting.md +52 -0
  318. package/src/resources/submodules/appium-skills/skills/environment-setup-android/SKILL.md +346 -0
  319. package/src/resources/submodules/appium-skills/skills/environment-setup-bundletool/SKILL.md +91 -0
  320. package/src/resources/submodules/appium-skills/skills/environment-setup-chromium/SKILL.md +260 -0
  321. package/src/resources/submodules/appium-skills/skills/environment-setup-espresso/SKILL.md +216 -0
  322. package/src/resources/submodules/appium-skills/skills/environment-setup-ffmpeg/SKILL.md +91 -0
  323. package/src/resources/submodules/appium-skills/skills/environment-setup-node/SKILL.md +128 -0
  324. package/src/resources/submodules/appium-skills/skills/environment-setup-uiautomator2/SKILL.md +225 -0
  325. package/src/resources/submodules/appium-skills/skills/environment-setup-xcuitest/SKILL.md +153 -0
  326. package/src/resources/submodules/appium-skills/skills/xcuitest-real-device-config/SKILL.md +488 -0
  327. package/src/resources/submodules/appium-uiautomator2-driver/CHANGELOG.md +1506 -0
  328. package/src/resources/submodules/appium-uiautomator2-driver/README.md +2253 -0
  329. package/src/resources/submodules/appium-uiautomator2-driver/docs/actions.md +72 -0
  330. package/src/resources/submodules/appium-uiautomator2-driver/docs/activity-startup.md +47 -0
  331. package/src/resources/submodules/appium-uiautomator2-driver/docs/android-appbundle.md +69 -0
  332. package/src/resources/submodules/appium-uiautomator2-driver/docs/android-mobile-gestures.md +352 -0
  333. package/src/resources/submodules/appium-uiautomator2-driver/docs/android-multiwindow.md +872 -0
  334. package/src/resources/submodules/appium-uiautomator2-driver/docs/architecture.md +34 -0
  335. package/src/resources/submodules/appium-uiautomator2-driver/docs/bidi.md +50 -0
  336. package/src/resources/submodules/appium-uiautomator2-driver/docs/capability-sets.md +136 -0
  337. package/src/resources/submodules/appium-uiautomator2-driver/docs/mjpeg.md +111 -0
  338. package/src/resources/submodules/appium-uiautomator2-driver/docs/scheduled-actions.md +155 -0
  339. package/src/resources/submodules/appium-uiautomator2-driver/docs/uiautomator-uiselector.md +51 -0
  340. package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/main.md +95 -0
  341. package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/screen1.png +0 -0
  342. package/src/resources/submodules/appium-uiautomator2-driver/docs/unlock/screen2.png +0 -0
  343. package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/checkered-squares.png +0 -0
  344. package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/start-button.png +0 -0
  345. package/src/resources/submodules/appium-uiautomator2-driver/test/functional/assets/stop-button.png +0 -0
  346. package/src/resources/submodules/appium-xcuitest-driver/.github/ISSUE_TEMPLATE.md +4 -0
  347. package/src/resources/submodules/appium-xcuitest-driver/CHANGELOG.md +3373 -0
  348. package/src/resources/submodules/appium-xcuitest-driver/README.md +55 -0
  349. package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-logo-white.png +0 -0
  350. package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-logo.png +0 -0
  351. package/src/resources/submodules/appium-xcuitest-driver/docs/assets/images/appium-plus-xctest.png +0 -0
  352. package/src/resources/submodules/appium-xcuitest-driver/docs/contributing.md +45 -0
  353. package/src/resources/submodules/appium-xcuitest-driver/docs/endpoints-wda.md +61 -0
  354. package/src/resources/submodules/appium-xcuitest-driver/docs/endpoints.md +95 -0
  355. package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/device-setup.md +81 -0
  356. package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/index.md +36 -0
  357. package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/installation.md +38 -0
  358. package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/check-prov-prof.png +0 -0
  359. package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/create-new-project.png +0 -0
  360. package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/create-single-page.png +0 -0
  361. package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/no-prov-prof.png +0 -0
  362. package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/project-prov-prof.png +0 -0
  363. package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/set-up-bundle.png +0 -0
  364. package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/untrusted-dev.png +0 -0
  365. package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/xcode-bundle-id.png +0 -0
  366. package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/xcode-config.png +0 -0
  367. package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/xcode-facebook-fail.png +0 -0
  368. package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/assets/images/xcode-facebook-succeed.png +0 -0
  369. package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/auto-config.md +54 -0
  370. package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/basic-manual-config.md +40 -0
  371. package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/full-manual-config.md +49 -0
  372. package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/generic-device-config.md +75 -0
  373. package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/provisioning-profile/index.md +117 -0
  374. package/src/resources/submodules/appium-xcuitest-driver/docs/getting-started/system-requirements.md +131 -0
  375. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/keynote.png +0 -0
  376. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/on_my_iphone.png +0 -0
  377. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/assets/images/ios-xctest-file-movement/top_files.png +0 -0
  378. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/attach-to-running-wda.md +43 -0
  379. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/audio-capture.md +78 -0
  380. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/biometric-auth.md +29 -0
  381. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/capability-sets.md +169 -0
  382. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/ci-setup.md +47 -0
  383. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/clipboard.md +47 -0
  384. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/file-transfer.md +147 -0
  385. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/gestures.md +55 -0
  386. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/hybrid.md +137 -0
  387. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/input-events.md +67 -0
  388. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/install-certificate.md +20 -0
  389. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/mjpeg.md +98 -0
  390. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/multiple-xcode-versions.md +37 -0
  391. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/parallel-tests.md +39 -0
  392. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/remotexpc-tunnels-real-devices.md +148 -0
  393. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/run-prebuilt-wda.md +147 -0
  394. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/run-preinstalled-wda.md +177 -0
  395. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/tvos.md +246 -0
  396. package/src/resources/submodules/appium-xcuitest-driver/docs/guides/wda-custom-server.md +283 -0
  397. package/src/resources/submodules/appium-xcuitest-driver/docs/index.md +36 -0
  398. package/src/resources/submodules/appium-xcuitest-driver/docs/overview.md +137 -0
  399. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/assets/images/useXctestrunFile.png +0 -0
  400. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/bidi.md +192 -0
  401. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/capabilities.md +164 -0
  402. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/commands.md +468 -0
  403. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/element-attributes.md +157 -0
  404. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/env-vars.md +18 -0
  405. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/execute-methods.md +2269 -0
  406. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/ios-predicate.md +196 -0
  407. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/locator-strategies.md +107 -0
  408. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/scripts.md +555 -0
  409. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/security-flags.md +28 -0
  410. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/server-args.md +19 -0
  411. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/settings.md +467 -0
  412. package/src/resources/submodules/appium-xcuitest-driver/docs/reference/xpath-extensions.md +167 -0
  413. package/src/resources/submodules/appium-xcuitest-driver/docs/troubleshooting/element-lookup.md +202 -0
  414. package/src/resources/submodules/appium-xcuitest-driver/docs/troubleshooting/index.md +204 -0
  415. package/src/resources/submodules/appium-xcuitest-driver/docs/troubleshooting/wda-slowness.md +206 -0
  416. package/src/resources/submodules/appium-xcuitest-driver/test/assets/test.png +0 -0
  417. package/src/resources/submodules.zip +0 -0
@@ -0,0 +1,34 @@
1
+ # Architecture
2
+
3
+ ```mermaid
4
+ flowchart TD
5
+ subgraph ClientSide["Test Client"]
6
+ T["Test Code"]
7
+ CL["Appium Client Library<br/>(Java / Python / JS / Ruby / C#)"]
8
+ end
9
+
10
+ subgraph ServerHost["Automation Host"]
11
+ AS["Appium Server<br/>WebDriver HTTP API"]
12
+ XD["UiAutomator2 Driver<br/>(appium-uiautomator2-driver)"]
13
+ ADBM["ADB + Port Forwarding"]
14
+ CDM["Chromedriver Management<br/>(hybrid / webview only)"]
15
+ end
16
+
17
+ subgraph DeviceTarget["Android Device / Emulator"]
18
+ U2S["UiAutomator2 Server<br/>(instrumentation HTTP API)"]
19
+ UIA["UiAutomator Framework"]
20
+ CD["Chromedriver<br/>(in webview context)"]
21
+ AUT["Application Under Test"]
22
+ end
23
+
24
+ T --> CL
25
+ CL -->|"W3C WebDriver over HTTP"| AS
26
+ AS -->|"Forwards session commands to driver"| XD
27
+ XD -->|"Install, shell, forward ports"| ADBM
28
+ XD -->|"Context switch to WEBVIEW_*"| CDM
29
+ ADBM -->|"adb forward (e.g. host:8200 → device:6790)"| U2S
30
+ CDM -->|"Chromedriver HTTP"| CD
31
+ U2S -->|"UiAutomator APIs"| UIA
32
+ UIA -->|"UI interactions + accessibility tree"| AUT
33
+ CD -->|"WebDriver in webview"| AUT
34
+ ```
@@ -0,0 +1,50 @@
1
+ # Supported BiDi Commands And Events
2
+
3
+ Only events and commands mentioned below are supported.
4
+ All other entities described in the spec throw not implemented errors.
5
+
6
+ # Supported Events
7
+
8
+ ## log.entryAdded
9
+
10
+ This event is emitted if the driver retrieves a new entry for any of the below log types.
11
+
12
+ ### syslog
13
+
14
+ Events are emitted for both emulator and real devices. Each event contains a single device logcat line.
15
+ Events are always emitted with the `NATIVE_APP` context.
16
+ These events might be disabled if the `appium:skipLogcatCapture` capability is enabled.
17
+
18
+ ### server
19
+
20
+ Events are emitted for both emulator and real devices. Each event contains a single Appium server log line.
21
+ Events are always emitted with the `NATIVE_APP` context.
22
+ Events are only emitted if the `get_server_logs` server security feature is enabled.
23
+
24
+ ## appium:uiautomator2.contextUpdate
25
+
26
+ This event is emitted upon the context change, either explicit or implicit.
27
+ The event is always emitted upon new session initialization.
28
+ See the [GitHub feature ticket](https://github.com/appium/appium/issues/20741) for more details.
29
+
30
+ ### CDDL
31
+
32
+ ```cddl
33
+ appium:uiautomator2.contextUpdated = {
34
+ method: "appium:uiautomator2.contextUpdated",
35
+ params: {
36
+ name: text,
37
+ type: "NATIVE" / "WEB",
38
+ },
39
+ }
40
+ ```
41
+
42
+ The event contains the following params:
43
+
44
+ ### name
45
+
46
+ Contains the actual name of the new context, for example `NATIVE_APP`.
47
+
48
+ ### type
49
+
50
+ Either `NATIVE` or `WEB` depending on which context is currently active in the driver session.
@@ -0,0 +1,136 @@
1
+ ## Basic Examples of Session Capability Sets
2
+
3
+ This article describes necessary capabilities that must be provided in order
4
+ to implement some common automation testing scenarios.
5
+ It only describes very minimum sets of capabilities required to
6
+ be included. For refined setups more of them might need to be provided. Check the
7
+ [Capabilities](../README.md#capabilities) section in README for more details
8
+ on each option available for the fine-tuning of UIAutomator2 driver sessions.
9
+
10
+ ### Application File (Real Device)
11
+
12
+ ```json
13
+ {
14
+ "platformName": "Android",
15
+ "appium:automationName": "uiautomator2",
16
+ "appium:platformVersion": "<Android_Version>",
17
+ "appium:udid": "<Phone_ID>",
18
+ "appium:app": "/path/to/local/package.apk"
19
+ }
20
+ ```
21
+
22
+ `appium:app` could also be a remote app or an archive:
23
+
24
+ ```
25
+ "appium:app": "https://example.com/package.apk"
26
+ "appium:app": "https://example.com/package.zip"
27
+ ```
28
+
29
+ Sometimes it might also be necessary to explicitly provide
30
+ `appium:appPackage` and `appium:appActivity` capability values
31
+ if the driver is unable to autodetect them from the provided app package manifest.
32
+ Check the [How To Troubleshoot Activities Startup](./activity-startup.md) article
33
+ for more details.
34
+
35
+ ### Application File (Emulator)
36
+
37
+ ```json
38
+ {
39
+ "platformName": "Android",
40
+ "appium:automationName": "uiautomator2",
41
+ "appium:avd": "<Emulator_Name>",
42
+ "appium:platformVersion": "<Android_Version>",
43
+ "appium:app": "/path/to/local/package.apk"
44
+ }
45
+ ```
46
+
47
+ `appium:app` could also be a remote app or an archive:
48
+
49
+ ```
50
+ "appium:app": "https://example.com/package.apk"
51
+ ```
52
+
53
+ ### Chrome (Real Device)
54
+
55
+ ```json
56
+ {
57
+ "platformName": "Android",
58
+ "appium:automationName": "uiautomator2",
59
+ "browserName": "Chrome",
60
+ "appium:platformVersion": "<Android_Version>",
61
+ "appium:udid": "<Phone_ID>"
62
+ }
63
+ ```
64
+
65
+ ### Chrome (Emulator)
66
+
67
+ ```json
68
+ {
69
+ "platformName": "Android",
70
+ "appium:automationName": "uiautomator2",
71
+ "browserName": "Chrome",
72
+ "appium:avd": "<Emulator_Name>",
73
+ "appium:platformVersion": "<Android_Version>"
74
+ }
75
+ ```
76
+
77
+ ### Pre-Installed App (Real Device)
78
+
79
+ ```json
80
+ {
81
+ "platformName": "Android",
82
+ "appium:automationName": "uiautomator2",
83
+ "appium:platformVersion": "<Android_Version>",
84
+ "appium:udid": "<Phone_ID>",
85
+ "appium:appPackage": "<App_Package_Id>",
86
+ "appium:appActivity": "<App_Activity_Id>",
87
+ "appium:noReset": true
88
+ }
89
+ ```
90
+
91
+ The `appium:noReset` capability is set to `true` in order to tell the driver
92
+ the app identified by `appium:appPackage` is already preinstalled and must not be reset.
93
+
94
+ ### Pre-Installed App (Emulator)
95
+
96
+ ```json
97
+ {
98
+ "platformName": "Android",
99
+ "appium:automationName": "uiautomator2",
100
+ "appium:avd": "<Emulator_Name>",
101
+ "appium:platformVersion": "<Android_Version>",
102
+ "appium:appPackage": "<App_Package_Id>",
103
+ "appium:appActivity": "<App_Activity_Id>",
104
+ "appium:noReset": true
105
+ }
106
+ ```
107
+
108
+ ### Custom Launch (Real Device)
109
+
110
+ ```json
111
+ {
112
+ "platformName": "Android",
113
+ "appium:automationName": "uiautomator2",
114
+ "appium:platformVersion": "<Android_Version>",
115
+ "appium:udid": "<Phone_ID>"
116
+ }
117
+ ```
118
+
119
+ This will start your test at the Home screen.
120
+ Afterwards you may use any of the application management
121
+ methods, like [mobile: installApp](../README.md#mobile-installapp)
122
+ or [mobile: activateApp](../README.md#mobile-activateapp)
123
+ to manage the life cycle of your app or switch between contexts to
124
+ manage web pages. Check the full list of
125
+ [mobile: execute methods](../README.md#platform-specific-extensions) for more details.
126
+
127
+ ### Custom Launch (Emulator)
128
+
129
+ ```json
130
+ {
131
+ "platformName": "Android",
132
+ "appium:automationName": "uiautomator2",
133
+ "appium:avd": "<Emulator_Name>",
134
+ "appium:platformVersion": "<Android_Version>"
135
+ }
136
+ ```
@@ -0,0 +1,111 @@
1
+ # MJPEG Screen Streaming
2
+
3
+ This guide describes the MJPEG (Motion JPEG) screen streaming support in the UiAutomator2 driver.
4
+
5
+ ## Overview
6
+
7
+ The UiAutomator2 **server** (running on the Android device) includes a built-in MJPEG broadcaster. It captures the device screen at a configurable rate, encodes frames as JPEG, and serves them over TCP using the `multipart/x-mixed-replace` format. This allows:
8
+
9
+ - **Live viewing** of the device screen by connecting to the stream (e.g. in a browser or a custom client).
10
+ - **Screenshot from stream**: if the driver is configured to use the MJPEG URL, the standard screenshot command returns the latest frame from the stream instead of calling the server’s screenshot API.
11
+
12
+ The MJPEG server on the device is started automatically when the UiAutomator2 instrumentation starts and listens on a fixed port on the device (default `7810`).
13
+
14
+ ## Use Cases
15
+
16
+ | Use case | Description |
17
+ |----------|-------------|
18
+ | **Screen recording** | The UiAutomator2 driver can use the MJPEG stream as input for host-side screen recording tooling (for example, via `ffmpeg`) to produce MP4 (or other) video files. |
19
+ | **Screenshots from stream** | If you set the `appium:mjpegScreenshotUrl` capability, the driver uses the **latest frame** from that MJPEG stream when you call the screenshot command instead of calling the server’s regular screenshot API. |
20
+ | **Live viewing / custom tools** | Any HTTP client (browser, script, or custom app) can connect to the MJPEG URL (after port forwarding, if needed) to view or process the live screen. |
21
+
22
+ ## Configuration
23
+
24
+ ### Capabilities
25
+
26
+ #### `appium:mjpegServerPort`
27
+
28
+ - **Type:** integer (port number on the **host**)
29
+ - **Description:** The port on the host machine to which the device MJPEG server port is forwarded via ADB. If not set, no port forwarding is done, so the device MJPEG service is not reachable from the host.
30
+ - **Use case:** Set this when you want to connect to the device MJPEG stream from the host (e.g. `http://localhost:<mjpegServerPort>`) or when using screen recording so the host can receive the stream.
31
+ - **Parallel sessions:** Use a **unique** `mjpegServerPort` per session when running multiple devices or parallel tests to avoid port conflicts.
32
+
33
+ #### `appium:mjpegScreenshotUrl`
34
+
35
+ - **Type:** string (URL)
36
+ - **Description:** URL of a service that provides real-time device screenshots in MJPEG format. If set, the driver creates an MJPEG client that consumes this URL; the standard **screenshot** command then returns the latest frame from that stream instead of calling the UiAutomator2 server’s `/screenshot` endpoint.
37
+ - **Typical value:** When you forward the device MJPEG port with `appium:mjpegServerPort`, you can set this to `http://localhost:<mjpegServerPort>` (or the same host/port your client uses to reach the stream) so that screenshot uses the MJPEG stream.
38
+ - **Note:** The driver starts the MJPEG stream client after the session is created and stops it on session end. If the stream has not yet produced a frame, the screenshot command may fall back to the regular server screenshot.
39
+
40
+ ### Settings (device-side MJPEG broadcaster)
41
+
42
+ These settings control the MJPEG broadcaster that runs **on the device** (in the UiAutomator2 server). They can be changed at runtime via the [Settings API](https://appium.io/docs/en/latest/guides/settings/) (e.g. `driver.update_settings({...})`).
43
+
44
+ | Setting | Type | Range / values | Default | Description |
45
+ |--------|------|----------------|---------|-------------|
46
+ | `mjpegServerPort` | int | 1024..65535 | 7810 | Port on the **device** where the MJPEG server listens. The driver forwards this to the host when `appium:mjpegServerPort` capability is set. |
47
+ | `mjpegServerFramerate` | int | 1..60 | 10 | Maximum frames per second. Higher values increase CPU load on the device. |
48
+ | `mjpegScalingFactor` | int | 1..100 | 50 | Scale factor in percent (100 = no scaling). Lower values reduce size and CPU use. |
49
+ | `mjpegServerScreenshotQuality` | int | 1..100 | 50 | JPEG quality (100 = best). Higher values improve quality but use more CPU. |
50
+ | `mjpegBilinearFiltering` | boolean | true / false | false | Use bilinear filtering when scaling. Can improve scaled image quality with a small performance cost. |
51
+
52
+ ## How it Works
53
+
54
+ 1. When the UiAutomator2 server starts on the device, it starts an **MJPEG server** thread that listens on the configured device port (default 7810).
55
+ 2. For each TCP client that connects, the server sends an HTTP-like response with `Content-Type: multipart/x-mixed-replace; boundary=--BoundaryString` and then a continuous stream of JPEG frames (each frame preceded by a boundary and `Content-Length`).
56
+ 3. Frames are produced by the device at the configured framerate; each frame is taken via `UiAutomation.takeScreenshot()`, optionally scaled and compressed according to the settings above, then sent to all connected clients.
57
+ 4. If no clients are connected, the server does not capture at full rate (it sleeps) to save CPU.
58
+
59
+ ## Using the Stream
60
+
61
+ ### Port forwarding and connecting
62
+
63
+ 1. Set the capability **`appium:mjpegServerPort`** to a free port on the host (e.g. `7810` or any port you choose).
64
+ 2. The driver will run `adb forward <host port> 7810` (or the device port you set via the `mjpegServerPort` setting) so that the device MJPEG server is reachable at `http://localhost:<host port>` (or your host IP if you need remote access).
65
+ 3. Open that URL in a browser or use any MJPEG-capable client; you should see the live device screen.
66
+ 4. Optionally set **`appium:mjpegScreenshotUrl`** to the same URL (e.g. `http://localhost:7810`) so that the driver’s screenshot command uses the latest frame from this stream.
67
+
68
+ ### Screenshot behavior
69
+
70
+ - **Without `appium:mjpegScreenshotUrl`:** The screenshot command is sent to the UiAutomator2 server (`GET /screenshot`), which takes a single screenshot on demand.
71
+ - **With `appium:mjpegScreenshotUrl`:** The driver keeps an MJPEG client connected to the given URL. The screenshot command returns the latest frame received from that stream (as base64 PNG). If no frame is available yet, the driver falls back to the regular server screenshot and logs a warning.
72
+
73
+ ## Parallel Testing
74
+
75
+ When running multiple sessions (e.g. parallel tests or multiple devices):
76
+
77
+ - Set a **unique** `appium:mjpegServerPort` per session so each device’s MJPEG port is forwarded to a different host port.
78
+ - This is especially important if you use screen recording or any tool that connects to the MJPEG stream.
79
+
80
+ ## Performance Considerations
81
+
82
+ - Higher `mjpegServerFramerate` values increase the number of screenshots taken per second and therefore the CPU load.
83
+ - Higher `mjpegServerScreenshotQuality` values increase JPEG encoding cost and network bandwidth.
84
+ - Higher `mjpegScalingFactor` values (larger images) also increase encoding time and payload size.
85
+ - Enabling `mjpegBilinearFiltering` can improve scaled image quality with a small extra performance cost.
86
+
87
+ For long-running or parallel streaming, start with moderate defaults (for example, framerate `10`, scaling factor `50`, quality `50`) and then adjust as needed.
88
+
89
+ ## Relationship to `mobile: startScreenStreaming` / `stopScreenStreaming`
90
+
91
+ The driver also supports **`mobile: startScreenStreaming`** and **`mobile: stopScreenStreaming`**. These are **different** from the built-in device MJPEG server:
92
+
93
+ - They start or stop a **host-side** MJPEG server that uses **GStreamer** (and optionally ADB) to capture and broadcast the device screen. They require the `adb_screen_streaming` feature and GStreamer with `gst-plugins-base`, `gst-plugins-good`, and `gst-plugins-bad` on the **host**.
94
+ - The **device MJPEG server** described in this guide runs entirely on the device, is built into the UiAutomator2 server, and does not require GStreamer.
95
+
96
+ Use the **device MJPEG server** (with `appium:mjpegServerPort` and optionally `appium:mjpegScreenshotUrl`) when you only need a simple TCP MJPEG stream from the device. Use **`mobile: startScreenStreaming`** when you need the host-based GStreamer pipeline (e.g. for specific encoding or network options).
97
+
98
+ ## Requirements
99
+
100
+ - For **device-side MJPEG streaming** itself, no extra tools are required beyond a compatible Android device and the UiAutomator2 server; the broadcaster runs entirely on the device.
101
+ - For **tools that consume the stream** (for example, screen recording on the host), you must ensure whatever tool you use (such as `ffmpeg` or a custom recorder) understands MJPEG over HTTP and can connect to the forwarded MJPEG URL.
102
+ - For **`mobile: startScreenStreaming` / `stopScreenStreaming`**, which are host-side and GStreamer-based, you must have GStreamer with `gst-plugins-base`, `gst-plugins-good`, and `gst-plugins-bad` installed and available on the host `PATH`.
103
+
104
+ ## Summary
105
+
106
+ | What you want | What to use |
107
+ |---------------|-------------|
108
+ | Expose device screen as MJPEG on the host | Set `appium:mjpegServerPort` to a host port; connect to `http://localhost:<port>`. |
109
+ | Screenshot from the MJPEG stream | Also set `appium:mjpegScreenshotUrl` to that URL (e.g. `http://localhost:<port>`). |
110
+ | Tune framerate, size, or quality on the device | Use Settings API: `mjpegServerFramerate`, `mjpegScalingFactor`, `mjpegServerScreenshotQuality`, `mjpegBilinearFiltering`. |
111
+ | Host-side GStreamer-based streaming | Use `mobile: startScreenStreaming` / `mobile: stopScreenStreaming` (see README). |
@@ -0,0 +1,155 @@
1
+ # Scheduled Actions
2
+
3
+ ## Problem Statement
4
+
5
+ Sometimes it is necessary to verify a UI scenario where one has to assert a UI control has appeared on the screen and then perform a decision action on this control. An example of such control might be a notification or any other popup that automatically disappears shortly after being shown. The WebDriver protocol uses HTTP REST API to communicate with clients. This means if you want to assert the existence of the above popup in your test script or perform any action on it then it is necessary to send an HTTP request to the server and receive an answer from it. Furthermore, this is needed for each particular command or assertion you want to perform, e.g. click, find element, get text, etc. The time an HTTP request needs to reach the server and then its response to reach the client is the roundtrip time, and the length of it depends on many factors. For some complex setups the roundtrip duration may even be counted in seconds, which makes it impossible to quickly handle an UI element, because it would already not exist/disappear by the time your next request reaches the server.
6
+
7
+ ## Scheduled Actions Concept
8
+
9
+ In order to address the problem above we have created the Scheduled Actions concept. The main idea there is to run the action code on the server side in asynchronous manner and only retrieve the detailed execution history if needed. `Action` is this context means emulating a gesture, or taking a screenshot, or taking a xml page source. More actions could be added later. The `scheduled` means after you create an action, or rather describe it in JSON, it is parsed and stored by the server for the further async execution. The client does not have any control over the previously scheduled action and can only unschedule it later or fetch its execution history. All actions are being scheduled on the main UI thread. All scheduled actions are reset automatically upon a new session creation.
10
+
11
+ This feature is available in the UIA2 driver since version *2.26.0*
12
+
13
+ ## mobile: scheduleAction
14
+
15
+ Adds a new action to the list of scheduled actions.
16
+
17
+ ### Arguments
18
+
19
+ Name | Type | Required | Description | Example
20
+ --- | --- | --- | --- | ---
21
+ name | string | yes | The unique name of the action. | popupHandlingAction
22
+ steps | ActionStep[] | yes | One or more action steps to execute. Steps are executed in sequential order. All steps are executed even if any of them fails. The execution is considered failed if at least one step fails. | Check [Action Steps](#action-steps)
23
+ maxPass | number | no | If set to a number greater than zero then the action will stop rescheduling itself after it passes the desired number of times | 1
24
+ maxFail | number | no | If set to a number greater than zero then the action will stop rescheduling itself after it fails the desired number of times | 1
25
+ times | number | no | How many times the action must be executed itself. 1 by default | 10
26
+ intervalMs | number | no | How long the interval in milliseconds between the next action reschedule should be. 1000 ms by default. | 100
27
+ maxHistoryItems | number | no | The maximum size of the history items array that are stored for this action. Each action execution creates a new history item. All items are sorted in descending order by action execution timestamp. If the amount of executions reaches `maxHistoryItems` value then the oldest history item gets deleted. Be careful to not set this parameter to large values as you might get out of memory issues. 20 history items are being stored for each action by default. | 100
28
+
29
+ #### Action Steps
30
+
31
+ Name | Type | Required | Description | Example
32
+ --- | --- | --- | --- | ---
33
+ type | string | yes | One of supported step types: `gesture`, `source`, `screenshot`. | gesture
34
+ name | string | yes | Step name. It must not be unique, but is useful to track the step execution history. | click
35
+ payload | map | yes | Step payload. The payload format depends on the actual step type. | Check on [Step Payload](#step-payload) below
36
+
37
+ #### Step Payload
38
+
39
+ Each step payload is required to contain the `subtype` item. Then the combination of step's `type` and `subtype` defines the actual payload content:
40
+
41
+ Type | Subtype | Description | Payload Example
42
+ --- | --- | --- | ---
43
+ gesture | click | The payload is expected to be similar to the one the [mobile: clickGesture](./android-mobile-gestures.md#mobile-clickgesture) requires. | {subtype: 'click', locator: {strategy: 'id', selector: 'buttonIdentifier'}}
44
+ gesture | longClick | The payload is expected to be similar to the one the [mobile: longClickGesture](./android-mobile-gestures.md#mobile-longclickgesture) requires. | {subtype: 'click', locator: {strategy: 'accessbility id', selector: 'buttonIdentifier'}}
45
+ gesture | doubleClick | The payload is expected to be similar to the one the [mobile: doubleClickGesture](./android-mobile-gestures.md#mobile-doubleclickgesture) requires. | {subtype: 'click', elementId: 'yolo', x: 150, y: 200}
46
+ source | xml | The payload does not need to contain any other items. | {subtype: 'xml'}
47
+ screenshot | png | The payload does not need to contain any other items. | {subtype: 'png'}
48
+
49
+ ## mobile: getActionHistory
50
+
51
+ Returns the history of executions for the particular action.
52
+
53
+ ### Arguments
54
+
55
+ Name | Type | Required | Description | Example
56
+ --- | --- | --- | --- | ---
57
+ name | string | yes | The unique name of the action. | popupHandlingAction
58
+
59
+ ### Returned Result
60
+
61
+ The history of executions of the particular action. An error is thrown if no action with the given name has been scheduled before calling this API or if it has been already unscheduled.
62
+
63
+ The returned result map has the following items:
64
+
65
+ Name | Type | Description | Example
66
+ --- | --- | --- | ---
67
+ repeats | number | The number of times this action has been repeated so far. | 1
68
+ stepResults | list&lt;list&lt;map&gt;&gt; | The history of step executions for each action run. Items in this list are sorted by execution timestamp in descending order. The maximum length of the list is limited by `maxHistoryItems` action value | See below
69
+
70
+ The result of each action step is represented by the map inside each `stepResulsts` array item containing the following items:
71
+
72
+ Name | Type | Description | Example
73
+ --- | --- | --- | ---
74
+ name | string | The name of the corresponding step. | clickStep
75
+ type | string | One of supported step typed. | gesture
76
+ timestamp | number | The Unix timestamp in milliseconds when the step started its execution. | 1685370112000
77
+ passed | boolean | Whether the step has passed, e.g. no exceptions occurred during its execution. | true
78
+ result | any | The actual step result. Depends on the step type and subtype. Might be null. Always null if exception is not null. | something
79
+ exception | map | If an exception happens during the step execution then this map will contain the following items: name (the exception class name), message (the actual exception message), stacktrace (full exception stacktrace). If no exceptions occurs during step execution then the value of this item is always null | {name: 'java.lang.Exception', message: 'Bad things happen', stacktrace: 'happened somewhere'}
80
+
81
+ ## mobile: unscheduleAction
82
+
83
+ Unschedules an action from the async execution and returns its history.
84
+
85
+ ### Arguments
86
+
87
+ Name | Type | Required | Description | Example
88
+ --- | --- | --- | --- | ---
89
+ name | string | yes | The unique name of the action. | popupHandlingAction
90
+
91
+ ### Returned Result
92
+
93
+ The same as in [mobile: getActionHistory](#mobile-getactionhistory) endpoint
94
+
95
+ ## Usage Example
96
+
97
+ Let's assume our application under test shows a short-living popup with two buttons to either accept or reject it.
98
+ At first, we need to figure out how the popup looks like in the page source to build element locators. For that we are going to create an action that periodically retrieves page source snapshots:
99
+
100
+ ```python
101
+ driver.execute_script('mobile: scheduleAction', {
102
+ 'name': 'myPopupHandlingAction',
103
+ 'steps': [{
104
+ 'type': 'source',
105
+ 'name': 'fetchPageSourceStep',
106
+ 'payload': {
107
+ 'subtype': 'xml'
108
+ }
109
+ }],
110
+ 'intervalMs': 1000,
111
+ 'times': 30,
112
+ 'maxHistoryItems': 30,
113
+ })
114
+
115
+ # doing some other stuff which is supposed to trigger the popup for the next 30 seconds
116
+
117
+ history: Dict[str, Any] = driver.execute_script('mobile: unscheduleAction', {
118
+ 'name': 'myPopupHandlingAction',
119
+ })
120
+ ```
121
+
122
+ In the example above we have scheduled an action which takes UI hierarchy snapshot every second. Eventually we can
123
+ debug the value of `history` list and inspect each item for the presence of our expected popup element. After we have figured out locators for its Accept button our action may be updated to:
124
+
125
+ ```python
126
+ driver.execute_script('mobile: scheduleAction', {
127
+ 'name': 'myPopupHandlingAction',
128
+ 'steps': [{
129
+ 'type': 'gesture',
130
+ 'name': 'acceptPopupStep',
131
+ 'payload': {
132
+ 'subtype': 'click'
133
+ 'locator': {
134
+ 'strategy': 'id',
135
+ 'selector': 'acceptButtonIdentifier',
136
+ }
137
+ }
138
+ }],
139
+ 'intervalMs': 1000,
140
+ 'times': 30,
141
+ 'maxPass': 1,
142
+ 'maxHistoryItems': 30,
143
+ })
144
+
145
+ # doing some other stuff which is supposed to trigger the popup for the next 30 seconds
146
+
147
+ history: Dict[str, Any] = driver.execute_script('mobile: unscheduleAction', {
148
+ 'name': 'myPopupHandlingAction',
149
+ })
150
+
151
+ def did_execution_pass(execution: List[Dict]) -> bool:
152
+ return all((step['passed'] for step in execution))
153
+
154
+ assert any((did_execution_pass(execution) for exection in history['stepResults']))
155
+ ```
@@ -0,0 +1,51 @@
1
+ ## Guide on UiAutomator Locator Types
2
+
3
+ UIA2 driver enables elements lookup using [UiSelector](https://developer.android.com/reference/androidx/test/uiautomator/UiSelector).
4
+ [UiScrollable](https://developer.android.com/reference/androidx/test/uiautomator/UiScrollable)
5
+ is also supported.
6
+ Both locator types are supported natively by Google's [UiAutomator](https://developer.android.com/training/testing/other-components/ui-automator) framework for Android. With these locators you could create flexible ways to reference complicated element paths, and their performance is very close to native.
7
+
8
+ ### Examples
9
+
10
+ Note that the index selector is unreliable so prefer instance instead. The
11
+ following examples are written against the [ApiDemos](https://github.com/appium/android-apidemos) apk using Ruby.
12
+
13
+ Find the first textview.
14
+
15
+ ```ruby
16
+ # ruby
17
+ first_textview = find_element(:uiautomator, 'new UiSelector().className("android.widget.TextView").instance(0)');
18
+ ```
19
+
20
+ Find the first element by text.
21
+
22
+ ```ruby
23
+ # ruby
24
+ first_text = find_element(:uiautomator, 'new UiSelector().text("Animation")')
25
+ first_text.text # "Animation"
26
+ ```
27
+
28
+ Find the first scrollable element, then find a TextView with the text "Tabs".
29
+ The "Tabs" element will be scrolled into view.
30
+
31
+ ```ruby
32
+ # ruby
33
+ element = find_element(:uiautomator, 'new UiScrollable(new UiSelector().scrollable(true).instance(0)).getChildByText(new UiSelector().className("android.widget.TextView"), "Tabs")')
34
+ ```
35
+
36
+ As a special case, scrollIntoView returns the element that is scrolled into view.
37
+ scrollIntoView allows scrolling to any UiSelector.
38
+
39
+ ```ruby
40
+ # ruby
41
+ element = find_element(:uiautomator, 'new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text("WebView").instance(0));')
42
+ element.text # "WebView"
43
+ ```
44
+
45
+ ### More Resources
46
+
47
+ - [How to Use UISelector in Appium](http://code2test.com/appium-tutorial/how-to-use-uiselector-in-appium/)
48
+ - [How to use UiSelector to inspect elements on Android](https://www.automationtestinghub.com/uiselector-android/)
49
+ - [UiAutomatorParserTests.java](https://github.com/appium/appium-uiautomator2-server/blob/master/app/src/test/java/io/appium/uiautomator2/utils/UiAutomatorParserTests.java)
50
+ - [UiScrollableParserTests.java](https://github.com/appium/appium-uiautomator2-server/blob/master/app/src/test/java/io/appium/uiautomator2/utils/UiScrollableParserTests.java)
51
+ - [UiSelectorParserTests.java](https://github.com/appium/appium-uiautomator2-server/blob/master/app/src/test/java/io/appium/uiautomator2/utils/UiSelectorParserTests.java)
@@ -0,0 +1,95 @@
1
+ # Unlock
2
+
3
+ UiAutomator2 driver allows dealing with the Android lock screen using various APIs.
4
+ This article describes available APIs and their options.
5
+
6
+ ## Unlock On Session Startup
7
+
8
+ UiAutomator2 provides the following [capabilities](../../README.md#device-locking) to deal
9
+ with the system lock screen:
10
+
11
+ - appium:unlockStrategy
12
+ - appium:unlockSuccessTimeout
13
+ - appium:skipUnlock
14
+ - appium:unlockType
15
+ - appium:unlockKey
16
+
17
+ These capabilities could be used to unlock the device under test during the driver session initialization
18
+ as well as deal with different lock screen types.
19
+
20
+ ### appium:unlockStrategy
21
+
22
+ Either `locksettings` (default since Android 8/API level 26) or `uiautomator` (legacy).
23
+
24
+ The `locksettings` strategy uses `adb shell locksettings` CLI to deal with different
25
+ types of device lock screens. It is fast, reliable, but has one downside: the actual
26
+ pin, pattern or password must be temporarily removed in order to unlock the device and restored afterwards.
27
+
28
+ Setting the strategy to `uiautomator` will enforce the driver to use UiAutomator framework in order
29
+ to interact with the device's lock screen for various unlock types. It might be slower and less stable in comparison
30
+ to the `locksettings` strategy, although there is no other alternative if tests are being executed on an older Android version
31
+ or the application under test requires the device to constantly maintain display lock settings.
32
+
33
+ ### appium:unlockSuccessTimeout
34
+
35
+ Maximum number of milliseconds to wait until the device is unlocked. `2000` ms by default
36
+
37
+ ### appium:skipUnlock
38
+
39
+ The `appium:skipUnlock` capability is enabled by default and makes the driver to detect and handle the lock screen
40
+ upon session startup _if it is present_. If the lock screen cannot be detected upon session startup then nothing will be
41
+ done. By default, it is assumed the device has a "simple" lock screen, which could be removed by waking up the device.
42
+ In case the device has a different type of the lock screen configured in its settings then the information about it
43
+ must be provided in the below capability values.
44
+
45
+ ### appium:unlockType and appium:unlockKey
46
+
47
+ This capability supports the following possible values:
48
+
49
+ #### pin
50
+
51
+ Assumes the device is protected with a PIN code. Expects the `appium:unlockKey` to contain a valid pin consisting
52
+ of digits in range 0-9, for example `1111`.
53
+
54
+ #### pinWithKeyEvent
55
+
56
+ Same as [pin](#pin), but uses ADB instead of UiAutomator framework to enter the actual pin value.
57
+
58
+ #### password
59
+
60
+ Assumes the device is protected with a password. Expects the `appium:unlockKey` to contain a valid password consisting
61
+ of latin characters, for example `abcd1234`.
62
+
63
+ #### pattern
64
+
65
+ Assumes the device is protected with a secret pattern. Check the example below for more details on the `appium:unlockKey`
66
+ value for this particular unlock type.
67
+
68
+ ##### Example
69
+
70
+ Let say you have a device that is locked with a pattern similar to the one on the image below,
71
+ and you want to run a test over that device.
72
+
73
+ <img src="./screen1.png" />
74
+
75
+ We treat the pattern pins similarly to numbers on a digital phone dial. So, in this case the *unlockKey* is `729854163`
76
+
77
+ <img src="./screen2.png" />
78
+
79
+ and capabilities are:
80
+
81
+ ```json
82
+ {
83
+ "appium:unlockType": "pattern",
84
+ "appium:unlockKey": "729854163"
85
+ }
86
+ ```
87
+
88
+ ## Mid-Session Unlock
89
+
90
+ There is also a possibility to interact with the device's lock screen while the test session is running.
91
+ Use the following mobile extensions for this purpose:
92
+
93
+ - [mobile: lock](../../README.md#mobile-lock)
94
+ - [mobile: unlock](../../README.md#mobile-unlock)
95
+ - [mobile: isLocked](../../README.md#mobile-islocked)
@@ -0,0 +1,4 @@
1
+ **Warning:**
2
+
3
+ These issues are not tracked. Please create new issues in the main Appium
4
+ repository: https://github.com/appium/appium/issues/new