@appium/mcp-documentation 1.0.2 → 1.0.4

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 +15 -0
  2. package/package.json +3 -6
  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,47 @@
1
+ ---
2
+ title: Continuous Integration
3
+ ---
4
+
5
+ Setting up the XCUITest driver in an automated environment brings a few challenges with it. Any scenario
6
+ where user interaction is required must be automated or avoided altogether. For real device setup,
7
+ you should first follow the [Real Device Setup tutorial](../getting-started/device-setup.md#real-devices).
8
+
9
+ ### Keychains
10
+
11
+ One common scenario is a prompt asking for a keychain to be unlocked in order to sign the WebDriverAgent.
12
+ There are multiple possible solutions for this:
13
+
14
+ 1. Keychains can be set to have no timeout and be unlocked manually once. This can be done using the
15
+ keychain access application. Sometimes keychains still lock themselves though and this approach
16
+ is not recommended.
17
+ 2. [It is possible to create a second keychain](../troubleshooting/index.md#real-device-security-settings),
18
+ which just stores the required certificate to sign the WebDriverAgent. The issue with this
19
+ approach is that Codesign wants to unlock all listed keychains regardless of the specified
20
+ keychain, thus leading to a password prompt. This can be avoided by setting the default keychain
21
+ and basically hiding the login keychain at the start of the build.
22
+ [See this Stackoverflow article](https://stackoverflow.com/questions/16550594/jenkins-xcode-build-works-codesign-fails)
23
+ for how to utilize this approach. It is impractical when running other build jobs simultaneously.
24
+ 3. Stick with the existing keychains as in approach 1, but explicitly call unlock keychain before
25
+ **each** build. This can be done using [fastlane unlock_keychain](https://docs.fastlane.tools/actions/unlock_keychain/)
26
+ or by using [security unlock-keychain](https://www.unix.com/man-page/osx/1/security/) directly.
27
+ The password can be saved as a CI variable/secret or on the machine itself.
28
+
29
+ It is recommended to go with the second or third option. The third one is the easiest and most
30
+ reliable one to set up, at the cost of having to set the keychain password as an environment variable.
31
+
32
+ ### Xcode
33
+
34
+ When setting up a new machine as a CI server, you are probably going to install Xcode, without
35
+ executing it once, because you are not going to use it for development. Make sure to start Xcode at
36
+ least once and do the initial set up and install the suggested extensions.
37
+
38
+ ### Linking Apple Account
39
+
40
+ This only applies for real device set up. Make sure to link your 'Apple Developer Account' in the
41
+ machine's system wide "Account Panel" when using the "Basic Automatic Configuration" described
42
+ [here](../getting-started/provisioning-profile/auto-config.md).
43
+
44
+ ### Troubleshooting
45
+
46
+ Enable the `appium:showXcodeLog` [capability](../reference/capabilities.md#webdriveragent) and
47
+ check the Appium server output.
@@ -0,0 +1,47 @@
1
+ ---
2
+ hide:
3
+ - toc
4
+
5
+ title: Get/Set Clipboard
6
+ ---
7
+
8
+ Working with the clipboard on real devices has an Apple security limitation, where the
9
+ WebDriverAgentRunner application must be in foreground in order for the action to work. Otherwise
10
+ an empty string is always returned, or it could raise an exception like
11
+ [this issue](https://github.com/appium/appium/issues/18730).
12
+
13
+ Consider using [`mobile: activateApp`](../reference/execute-methods.md/#mobile-activateapp)
14
+ and [`mobile: backgroundApp`](../reference/execute-methods.md/#mobile-backgroundapp) to change the
15
+ foreground application.
16
+
17
+ ## Get Clipboard
18
+
19
+ Applies to iOS 13+ real devices. You can also use
20
+ [`mobile: getPasteboard`](../reference/execute-methods.md#mobile-getpasteboard) for simulators.
21
+
22
+ ```ruby
23
+ # Ruby
24
+
25
+ # Bring the WebDriverAgent foreground. The bundle id depends on configuration such as "appium:updatedWDABundleId" for real devices.
26
+ driver.execute_script 'mobile: activateApp', {bundleId: 'com.facebook.WebDriverAgentRunner.xctrunner'}
27
+ # Get the clipboard content
28
+ driver.get_clipboard
29
+ # Go back to the application under test
30
+ driver.execute_script 'mobile: activateApp', {bundleId: '<bundle id of the test app>'}
31
+ ```
32
+
33
+ ## Set Clipboard
34
+
35
+ Applies to iOS 15+ real devices. You can also use
36
+ [`mobile: setPasteboard`](../reference/execute-methods.md#mobile-setpasteboard) for simulators.
37
+
38
+ ```ruby
39
+ # Ruby
40
+
41
+ # Bring the WebDriverAgent foreground. The bundle id depends on configuration such as "appium:updatedWDABundleId" for real devices.
42
+ driver.execute_script 'mobile: activateApp', {bundleId: 'com.facebook.WebDriverAgentRunner.xctrunner'}
43
+ # Set the clipboard content
44
+ driver.set_clipboard(content: 'happy testing')
45
+ # Go back to the application under test
46
+ driver.execute_script 'mobile: activateApp', {bundleId: '<bundle id of the test app>'}
47
+ ```
@@ -0,0 +1,147 @@
1
+ ---
2
+ title: File Transfer
3
+ ---
4
+
5
+ The XCUITest driver provides several [extension commands](../reference/execute-methods.md) for file transfer:
6
+
7
+ * [`mobile: pullFolder`](../reference/execute-methods.md#mobile-pullfolder)
8
+ * [`mobile: pullFile`](../reference/execute-methods.md#mobile-pullfile)
9
+ * [`mobile: pushFile`](../reference/execute-methods.md#mobile-pushfile)
10
+ * [`mobile: deleteFolder`](../reference/execute-methods.md#mobile-deletefolder)
11
+ * [`mobile: deleteFile`](../reference/execute-methods.md#mobile-deletefile)
12
+
13
+ This documentation aims to help to understand how they work on iOS.
14
+
15
+ ## Formats
16
+
17
+ All commands require a parameter with a path to the file/folder on the target device. There are 3
18
+ possible formats this path can take:
19
+
20
+ ### Format 1
21
+
22
+ ```
23
+ @<app-bundle-id>:<container-type>/<path-to-file-or-folder>
24
+ ```
25
+
26
+ * `@<app-bundle-id>` is the application bundle identifier
27
+ * `<container-type>` is the container type
28
+ * On simulators, common values are `app`, `data`, `groups`, but a custom one can also be provided
29
+ * On real devices, the only accepted value is `documents`. All others are treated as Format 2
30
+ * This value can only be specified for apps that have the `UIFileSharingEnabled` flag set to
31
+ `true`. You can use the [`mobile: listApps`](../reference/execute-methods.md#mobile-listapps)
32
+ extension to identify such apps.
33
+ * By assigning the `skipDocumentsContainerCheck` [Settings API](https://appium.io/docs/en/latest/guides/settings/) to `true`, you may skip the above limitation for certain apps.
34
+
35
+ * `<path-to-file-or-folder>` is the target file or folder
36
+ * On real devices, if `<container-type>` is set to `documents`, this path will be mapped to
37
+ `On My iPhone/<app name>` in the _Files_ app
38
+
39
+ ### Format 2
40
+
41
+ ```
42
+ @<app-bundle-id>/<path-to-file-or-folder>
43
+ ```
44
+
45
+ * On simulators, the implicit `<container-type>` is set to `app`.
46
+ * On real device, only apps with the `UIFileSharingEnabled` flag set to `true` in their `info.plist`
47
+ can be mounted. You can use the [`mobile: listApps`](../reference/execute-methods.md#mobile-listapps)
48
+ extension to identify such apps.
49
+
50
+ ### Format 3
51
+
52
+ ```
53
+ <path-to-file-or-folder>
54
+ ```
55
+
56
+ This format is only supported on simulators. The implicit `<container-type>` is set to `app`.
57
+ Eventually the whole simulator file system is
58
+ [available](https://stackoverflow.com/questions/6480607/is-there-any-way-to-see-the-file-system-on-the-ios-simulator)
59
+ directly from the macOS Finder, so you may pull any file from there by providing a path to it
60
+ relatively to the simulator's file system root.
61
+
62
+ ## Examples
63
+
64
+ ### `pullFile`
65
+
66
+ This example pulls a file present in _Files -> On My iPhone -> Keynote_:
67
+
68
+ |Top | On My iPhone | Keynote |
69
+ |:----:|:----:|:----:|
70
+ |![](./assets/images/ios-xctest-file-movement/top_files.png)|![](./assets/images/ios-xctest-file-movement/on_my_iphone.png)|![](./assets/images/ios-xctest-file-movement/keynote.png)|
71
+
72
+ === "JS (WebdriverIO)"
73
+
74
+ ```javascript
75
+ let data = driver.pullFile('@com.apple.Keynote:documents/Presentation.key');
76
+ await fs.writeFile('presentation.key', Buffer.from(data, 'base64'), 'binary');
77
+ ```
78
+
79
+ === "Ruby"
80
+
81
+ ```ruby
82
+ file = @driver.pull_file '@com.apple.Keynote:documents/Presentation.key'
83
+ File.open('presentation.key', 'wb') { |f| f<< file }
84
+ ```
85
+
86
+ If the file is in deeper place like _Keynote/Dir1/Dir2_, then the path changes:
87
+
88
+ === "JS (WebdriverIO)"
89
+
90
+ ```javascript
91
+ let data = driver.pullFile('@com.apple.Keynote:documents/Dir1/Dir2/Presentation.key');
92
+ await fs.writeFile('presentation.key', Buffer.from(data, 'base64'), 'binary');
93
+ ```
94
+
95
+ === "Ruby"
96
+
97
+ ```ruby
98
+ file = @driver.pull_file '@com.apple.Keynote:documents/Dir1/Dir2/Presentation.key'
99
+ File.open('presentation.key', 'wb') { |f| f<< file }
100
+ ```
101
+
102
+ Example for a simulator using Format 3:
103
+
104
+ ```java
105
+ // Java
106
+ // Get AddressBook.sqlitedb in test app package ('app' container)
107
+ byte[] fileContent = driver.pullFile("Library/AddressBook/AddressBook.sqlitedb");
108
+ Path dstPath = Paths.get(new File("/local/path/AddressBook.sqlitedb"));
109
+ Files.write(dstPath, fileContent);
110
+ ```
111
+
112
+ ### `pullFolder`
113
+
114
+ You can pull folders similarly to files, but the path must end with a forward slash (`/`).
115
+
116
+ === "JS (WebdriverIO)"
117
+
118
+ ```javascript
119
+ let data = driver.pullFolder('@com.apple.Keynote:documents/');
120
+ await fs.writeFile('documents.zip', Buffer.from(data, 'base64'), 'binary');
121
+ ```
122
+
123
+ === "Ruby"
124
+
125
+ ```ruby
126
+ file = @driver.pull_folder '@com.apple.Keynote:documents/'
127
+ File.open('documents.zip', 'wb') { |f| f<< file }
128
+ ```
129
+
130
+ ### `pushFile`
131
+
132
+ === "JS (WebdriverIO)"
133
+
134
+ ```javascript
135
+ driver.pushFile('@com.apple.Keynote:documents/text.txt', new Buffer("Hello World").toString('base64'));
136
+ ```
137
+
138
+ === "Ruby"
139
+
140
+ ```ruby
141
+ @driver.push_file '@com.apple.Keynote:documents/text.txt', (File.read 'path/to/file')
142
+ ```
143
+
144
+ ## References
145
+ - <https://stackoverflow.com/questions/1108076/where-does-the-iphone-simulator-store-its-data>
146
+ - <https://stackoverflow.com/questions/48884248/how-can-i-add-files-to-the-ios-simulator>
147
+ - <https://apple.stackexchange.com/questions/299413/how-to-allow-the-files-app-to-save-to-on-my-iphone-or-to-on-my-ipad-in-ios/299565#299565>
@@ -0,0 +1,55 @@
1
+ ---
2
+ hide:
3
+ - toc
4
+
5
+ title: Gestures
6
+ ---
7
+
8
+ The XCUITest driver provides multiple options for touch gestures automation.
9
+ For simple gestures, like tap by coordinates, long tap, multi-finger tap, double/triple tap,
10
+ swipe, drag, rotate, scroll or pinch use the below gesture shortcuts:
11
+
12
+ - [mobile: tap](../reference/execute-methods.md#mobile-tap)
13
+ - [mobile: doubleTap](../reference/execute-methods.md#mobile-doubletap)
14
+ - [mobile: touchAndHold](../reference/execute-methods.md#mobile-touchandhold)
15
+ - [mobile: twoFingerTap](../reference/execute-methods.md#mobile-twofingertap)
16
+ - [mobile: dragFromToForDuration](../reference/execute-methods.md#mobile-dragfromtoforduration)
17
+ - [mobile: dragFromToWithVelocity](../reference/execute-methods.md#mobile-dragfromtowithvelocity)
18
+ - [mobile: rotateElement](../reference/execute-methods.md#mobile-rotateelement)
19
+ - [mobile: tapWithNumberOfTaps](../reference/execute-methods.md#mobile-tapwithnumberoftaps)
20
+ - [mobile: forcePress](../reference/execute-methods.md#mobile-forcepress)
21
+ - [mobile: scrollToElement](../reference/execute-methods.md#mobile-scrolltoelement)
22
+ - [mobile: scroll](../reference/execute-methods.md#mobile-scroll)
23
+ - [mobile: pinch](../reference/execute-methods.md#mobile-pinch)
24
+
25
+ For more sophisticated gestures
26
+ consider using [W3C actions](https://w3c.github.io/webdriver/#actions).
27
+
28
+ Make sure you don't use deprecated JSONWP TouchActions APIs. They have been
29
+ removed from the XCUITest driver since version 7.
30
+
31
+ If the action code in the client source looks good and satisfies the above requirements,
32
+ but its execution still does not deliver the expected result then the following debugging
33
+ measures might be applied:
34
+
35
+ - Make sure the gesture has valid coordinates and respects pauses between pointer state changes.
36
+ For example, it is always mandatory to provide a valid element or valid `absolute` coordinates
37
+ to any gesture at the beginning. iOS only registers
38
+ a long touch/click if the pointer has been depressed for longer than 500ms. For shorter actions
39
+ a simple click is registered instead.
40
+ - If your tests run on Simulator then it is possible to activate pointer tracing by enabling
41
+ the [appium:simulatorTracePointer](../reference/capabilities.md#simulator) capability or by enabling
42
+ `Visual Indicators` items from Simulator settings. After running
43
+ your automation code with this feature enabled you would be able to see the exact pointer trace path
44
+ and check the velocity of the gesture. Compare the trace
45
+ to how the same gesture is usually done manually and apply the necessary updates to your code.
46
+ - Do not mix webview and native elements in actions arguments. It simply won't work. Native
47
+ actions could only consume native elements. A single possibility to perform a native action
48
+ on a web element would be to translate its coordinates into the native context and pass these
49
+ coordinates as native action arguments.
50
+
51
+ Check the below tutorials for more details on how to build reliable action chains:
52
+
53
+ - [Automating Complex Gestures with the W3C Actions API](https://appiumpro.com/editions/29-automating-complex-gestures-with-the-w3c-actions-api)
54
+ - [Swiping your way through Appium by Wim Selles #AppiumConf2021](https://www.youtube.com/watch?v=oAJ7jwMNFVU)
55
+ - [About iOS Input Events](./input-events.md)
@@ -0,0 +1,137 @@
1
+ ---
2
+ title: Hybrid Apps
3
+ ---
4
+
5
+ One of the core principles of XCUITest driver is that you shouldn't have to change your
6
+ app to test it. In line with that methodology, it is possible to test hybrid
7
+ apps the same way you can with Selenium for web apps. There is a bit of technical
8
+ complexity required so that XCUITest driver knows whether you want to automate the native
9
+ aspects of the app or the web views. But, thankfully, we can stay within the
10
+ Selenium WebDriver protocol for everything.
11
+
12
+ Once the test is in a web view context the command set that is available is the
13
+ full [Selenium](http://www.seleniumhq.org/) [WebDriver API](https://www.w3.org/TR/webdriver/).
14
+
15
+ ### Requirements
16
+
17
+ To interact with a web view XCUITest driver establishes a connection using a custom
18
+ [remote debugger](https://github.com/appium/appium-remote-debugger).
19
+ This debugger can connect directly to any WebKit debugger socket exposed by the system.
20
+ The protocol used for the communication there is a proprietary Apple's JSON RPC similar
21
+ to Chrome's [Devtools Protocol](https://chromedevtools.github.io/devtools-protocol/).
22
+ Not all web views expose debugger web sockets by default thus making them invisible
23
+ for the XCUITest driver and not showing in the available contexts list.
24
+ Make sure the following prerequisites are satisfied if you are unsure about whether
25
+ the particular web view is debuggable or not:
26
+
27
+ - If you use real devices then make sure the Settings→Safari→Advanced→Web Inspector
28
+ checkbox is turned on.
29
+ - If your app's web view is based on WKWebView then make sure the
30
+ [isInspectable](https://developer.apple.com/documentation/webkit/wkwebview/4111163-inspectable?language=objc) property of it set to `true`. Note, that you must have access to the application sources in order
31
+ to ensure that!
32
+ - Make sure you see the corresponding web view in Safari's
33
+ [remote debugger](https://help.salesforce.com/s/articleView?id=000391692&type=1) list.
34
+
35
+ If all the above requirements have been satisfied, but the desired web view is still not present in the
36
+ XCUITest driver's context list then there is probably an issue in the driver itself, which must be reported
37
+ to driver maintainers.
38
+
39
+ ### Entering the web view context
40
+
41
+ Here are the steps required to talk to a web view in your XCUITest driver test:
42
+
43
+ 1. Navigate to a portion of your app where a web view is active
44
+ 2. Retrieve the currently available contexts
45
+ * This returns a list of contexts we can access, like `'NATIVE_APP'` or `'WEBVIEW_1'`
46
+ 3. Set the id of the context you want to access
47
+ * This puts your XCUITest session into a mode where all commands are
48
+ interpreted as being intended for automating the web view, rather than the
49
+ native portion of the app. For example, if you run `findElement`, it
50
+ will operate on the DOM of the web view, rather than return native elements.
51
+ Of course, certain WebDriver methods only make sense in one context or
52
+ another, so in the wrong context you will receive an error message.
53
+ 4. To stop automating in the web view context and go back to automating the
54
+ native portion of the app, simply set the context
55
+ again with the native context id (generally `'NATIVE_APP'`) to leave the web
56
+ context and once again access the native commands.
57
+
58
+ ### Automatically entering the web view context on session start
59
+
60
+ If your application begins in a web view, and you do not want to automate the
61
+ native application before entering it, you can have XCUITest driver automatically enter
62
+ the web view context on session initialization by setting the `autoWebview`
63
+ [capability](../reference/capabilities.md) to `true`.
64
+
65
+
66
+ ### Examples
67
+
68
+ === "Java"
69
+ ```java
70
+ // java
71
+ // assuming we have a set of capabilities
72
+ driver = new AppiumDriver(new URL("http://127.0.0.1:4723/"), options);
73
+
74
+ Set<String> contextNames = driver.getContextHandles();
75
+ for (String contextName : contextNames) {
76
+ System.out.println(contextName); //prints out something like NATIVE_APP \n WEBVIEW_1
77
+ }
78
+ driver.context(contextNames.toArray()[1]); // set context to WEBVIEW_1
79
+
80
+ //do some web testing
81
+ String myText = driver.findElement(By.cssSelector(".green_button")).click();
82
+
83
+ driver.context("NATIVE_APP");
84
+
85
+ // do more native testing if we want
86
+
87
+ driver.quit();
88
+ ```
89
+
90
+ === "Ruby"
91
+ ```ruby
92
+ # ruby_lib_core
93
+ # assuming we have a set of capabilities
94
+ @driver = Appium::Core.for(url: SERVER_URL, desired_capabilities: capabilities).start_driver
95
+ # ruby_lib
96
+ # opts = { caps: capabilities, appium_lib: { custom_url: SERVER_URL }}
97
+ # @driver = Appium::Driver.new(opts, true).start_driver
98
+
99
+ # I switch to the last context because its always the webview in our case, in other cases you may need to specify a context
100
+ # View the appium logs while running @driver.contexts to figure out which context is the one you want and find the associated ID
101
+ # Then switch to it using @driver.switch_to.context("WEBVIEW_6")
102
+
103
+ Given(/^I switch to webview$/) do
104
+ webview = @driver.available_contexts.last
105
+ @driver.switch_to.context(webview)
106
+ end
107
+
108
+ Given(/^I switch out of webview$/) do
109
+ @driver.switch_to.context(@driver.contexts.first)
110
+ end
111
+
112
+ # Now you can use CSS to select an element inside your webview
113
+
114
+ And(/^I click a webview button $/) do
115
+ @driver.find_element(:css, ".green_button").click
116
+ end
117
+ ```
118
+
119
+ === "Python"
120
+ ```python
121
+ # python
122
+ # assuming we have an initialized `driver` object for an app
123
+
124
+ # switch to webview
125
+ webview = driver.contexts.last
126
+ driver.switch_to.context(webview)
127
+
128
+ # do some webby stuff
129
+ driver.find_element(By.CSS, ".green_button").click
130
+
131
+ # switch back to native view
132
+ driver.switch_to.context(driver.contexts.first)
133
+
134
+ # do more native testing if we want
135
+
136
+ driver.quit()
137
+ ```
@@ -0,0 +1,67 @@
1
+ ---
2
+ title: iOS Input Events
3
+ ---
4
+
5
+ ## What Are Input Events
6
+
7
+ iOS uses the Events concept to handle signals received from different input devices. An Event is an
8
+ object generated in response to a signal from an input device. These objects are then delivered to
9
+ the corresponding kernel subsystem, which processes them and notifies all listening processes about
10
+ taps, key presses, swipes, etc. This means that in order to emulate a signal generated by an external
11
+ device, such as a touch screen, it is necessary to just send Event objects with the same properties
12
+ and in the same sequence as they would be generated by a real device.
13
+
14
+ ## Simulating a Single Tap
15
+
16
+ The Events API itself is a part of Apple private API, and it is neither open sourced nor documented.
17
+ The XCTest framework also does not expose any _public_ APIs for input events generation, although
18
+ there is a possibility to perform events generation via XCTest _private_ undocumented APIs.
19
+
20
+ In particular, we are interested in the
21
+ [`XCPointerEventPath`](https://github.com/appium/WebDriverAgent/blob/master/PrivateHeaders/XCTest/XCPointerEventPath.h)
22
+ and [`XCSynthesizedEventRecord`](https://github.com/appium/WebDriverAgent/blob/master/PrivateHeaders/XCTest/XCSynthesizedEventRecord.h)
23
+ interfaces. These APIs allow to create chains of input events and supply them to the system kernel
24
+ for execution.
25
+
26
+ In order to synthesize a single tap, it is necessary to:
27
+
28
+ - Create a new `XCPointerEventPath` instance and initialize it for touch at the starting point
29
+ - Add a new `liftUp` event at `0.125s` offset using `liftUpAtOffset:` method
30
+ - Add the generated event path object to `XCSynthesizedEventRecord` instance using
31
+ `addPointerEventPath:` method
32
+ - Execute the events using `synthesizeWithError:` method of `XCSynthesizedEventRecord` instance and
33
+ control the returned error
34
+
35
+ There are several limitations to these APIs:
36
+
37
+ - Each `XCPointerEventPath` instance can only be executed for a single action. If one tries to add,
38
+ for example, two taps to a single path, then these are effectively ignored
39
+ - Each `XCPointerEventPath` instance can only be initialized for a particular pointer type: touch,
40
+ mouse (since Xcode 10.2) or keyboard (since Xcode 10.2)
41
+ - Events can only be added with increasing offset values to an existing `XCPointerEventPath` instance
42
+
43
+ ## More Complicated Actions
44
+
45
+ Unfortunately, because the API is private and has zero documentation, one can only figure out what
46
+ it can do by playing with it and trying different input combinations.
47
+
48
+ It is known that providing multiple `XCPointerEventPath` instances with overlapping timeouts will
49
+ generate a multitouch action with the amount of fingers equal to the amount of the supplied event
50
+ paths. So, in order to generate two-finger symmetric swipe we need to supply the following events:
51
+
52
+ - Create a two `XCPointerEventPath` instances and init them for touch at the starting point
53
+ - Add a `moveToPoint` event at `0.525s` offset using `moveToPoint:` method to each path
54
+ - Add a `liftUp` eventa at `0.525s` offset using `liftUpAtOffset:` method to each path
55
+ - Add the generated event paths to `XCSynthesizedEventRecord` instance using `addPointerEventPath:` method
56
+ - Execute the events using `synthesizeWithError:` method of `XCSynthesizedEventRecord` instance and
57
+ control the returned error
58
+
59
+ ## Further Reading
60
+
61
+ Unfortunately, there is no information on this topic at all (private API `¯\_(ツ)_/¯`). Consider
62
+ visiting the following resources:
63
+
64
+ * <https://github.com/appium/WebDriverAgent/tree/master/PrivateHeaders/XCTest>
65
+ * <https://github.com/appium/WebDriverAgent/blob/master/WebDriverAgentTests/IntegrationTests/FBW3CTouchActionsIntegrationTests.m>
66
+ * <https://github.com/appium/WebDriverAgent/blob/master/WebDriverAgentTests/IntegrationTests/FBW3CMultiTouchActionsIntegrationTests.m>
67
+ * <https://github.com/appium/WebDriverAgent/blob/master/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.m>
@@ -0,0 +1,20 @@
1
+ ---
2
+ hide:
3
+ - toc
4
+
5
+ title: Self-Signed Certificates
6
+ ---
7
+
8
+ Unfortunately, Apple does not provide any command line options which can help to install self-signed
9
+ certificate on a real device or simulator. However, there is
10
+ [over-the-air](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/iPhoneOTAConfiguration/Introduction/Introduction.html)
11
+ enrollment technology, which allows the deployment of several entity types, including such
12
+ certificates, by simply downloading specially prepared configuration files with the built-in web
13
+ browser. After the configuration is downloaded it can be installed and trusted by going through
14
+ several simple wizard steps.
15
+
16
+ You can use the following extension methods to assist with this. Please note that on real devices,
17
+ this functionality is only supported starting from iOS/tvOS 18.
18
+
19
+ * [`mobile: installCertificate`](../reference/execute-methods.md#mobile-installcertificate)
20
+ * [`mobile: removeCertificate`](../reference/execute-methods.md#mobile-removecertificate)
@@ -0,0 +1,98 @@
1
+ ---
2
+ title: MJPEG Screenshot Stream
3
+ ---
4
+
5
+ The XCUITest driver supports a **MJPEG screenshot stream** provided by WebDriverAgent (WDA). This feature allows real-time device screens to be broadcast as a continuous stream of JPEG frames over HTTP, which can be used for screen recording, live viewing, or using the latest stream frame as the source for screenshot commands.
6
+
7
+ ## Overview
8
+
9
+ When WDA runs on the device or simulator, it starts an **MJPEG screenshots broadcaster** service on a dedicated TCP port (default **9100**). This service:
10
+
11
+ - Captures the device screen at a configurable framerate (screenshots per second)
12
+ - Encodes each frame as JPEG with configurable quality
13
+ - Optionally downscales frames by a configurable factor
14
+ - Streams frames to all connected clients using the **multipart/x-mixed-replace** HTTP response format (standard MJPEG over HTTP)
15
+
16
+ Any client that connects to the stream URL and sends a request receives a never-ending HTTP response where the body is a sequence of JPEG images (each with a boundary and headers). This is the same format used by many IP cameras and browser-based MJPEG viewers.
17
+
18
+ ## Use Cases
19
+
20
+ | Use case | Description |
21
+ |----------|-------------|
22
+ | **Screen recording** | The driver’s [`mobile: startScreenRecording`](../reference/execute-methods.md#mobile-startscreenrecording) (or [`startRecordingScreen`](../reference/commands.md#startrecordingscreen) over HTTP) can use the MJPEG stream as input to **ffmpeg** to produce MP4 (or other) video files. This is the default when using the `mjpeg` video type. |
23
+ | **Screenshots from stream** | If you set the **`mjpegScreenshotUrl`** capability, the driver uses the **latest frame** from that MJPEG stream when you call the screenshot command instead of calling WDA’s regular screenshot API. |
24
+ | **Live viewing / custom tools** | Any HTTP client (browser, script, or custom app) can connect to the MJPEG URL (after port forwarding for real devices) to view or process the live screen. |
25
+
26
+ ## Capabilities
27
+
28
+ | <div style="width:14em">Capability</div> | Description |
29
+ |------------|-------------|
30
+ | **`appium:mjpegServerPort`** | Port on which WDA broadcasts the MJPEG stream. Default: **9100**. Change this if the default port is already in use (e.g. when running [parallel sessions](parallel-tests.md)); each session must use a unique MJPEG port if you use MJPEG features. |
31
+ | **`appium:mjpegScreenshotUrl`** | URL of a service that provides real-time device screenshots in MJPEG format. If set, the driver uses this stream for the **screenshot** command (returning the latest frame as the screenshot). Appium does **not** set up port forwarding for this URL; you must ensure the URL is reachable (e.g. by using the same port forwarding that `mjpegServerPort` uses, or an external MJPEG server). Example: `http://<host>:9100`. |
32
+
33
+ For full capability details, see [Capabilities](../reference/capabilities.md).
34
+
35
+ ## Settings
36
+
37
+ You can tune how WDA produces the MJPEG stream via the [Settings API](../reference/settings.md). These settings affect framerate, scaling, and JPEG quality of the broadcast only.
38
+
39
+ | <div style="width:15em">Setting</div> | Type | Description | Default |
40
+ |------------------------------|------|-------------|---------|
41
+ | **`mjpegServerFramerate`** | `int` | Maximum screenshots per second sent by the MJPEG broadcaster. Allowed range: **1–60**. | `10` |
42
+ | **`mjpegScalingFactor`** | `float` | Percentage used to downscale MJPEG frames. **1–100**; `100` means no downscaling. | `100` |
43
+ | **`mjpegServerScreenshotQuality`** | `int` | JPEG compression quality for MJPEG frames (1–100). Lower values mean smaller **file size on the wire** (more compression) and lower visual quality; higher values mean larger frames (less compression) and better visual quality. | `25` |
44
+ | **`mjpegFixOrientation`** | `boolean` | Whether to automatically normalize the orientation of MJPEG frames so that they match the current device orientation. Affects only the MJPEG screenshots broadcaster and does not change regular screenshot responses. | `true` |
45
+
46
+ You can also set initial values for some of these settings via environment variables before WDA starts, namely `MJPEG_SCALING_FACTOR` (for `mjpegScalingFactor`) and `MJPEG_SERVER_SCREENSHOT_QUALITY` (for `mjpegServerScreenshotQuality`). See [Environment variables](../reference/env-vars.md) for details.
47
+
48
+ Example (via Settings API):
49
+
50
+ ```json
51
+ {
52
+ "settings": {
53
+ "mjpegServerFramerate": 15,
54
+ "mjpegScalingFactor": 50,
55
+ "mjpegServerScreenshotQuality": 50
56
+ }
57
+ }
58
+ ```
59
+
60
+ ## How it works (driver and WDA)
61
+
62
+ ### Port forwarding
63
+
64
+ - For **real devices**, the driver forwards the **device** MJPEG port to the **host** so that clients can connect to e.g. `http://localhost:9100` (or the port you set with `mjpegServerPort`). If the default port is in use and you did not set `mjpegServerPort`, the driver logs a warning and MJPEG-based features (like MJPEG-based screen recording) may be unavailable for that session.
65
+ - For **simulators**, the MJPEG server is already on the host, so no port forwarding is needed for local access.
66
+
67
+ ### WDA implementation (WebDriverAgentLib)
68
+
69
+ At a high level, [WebDriverAgent](https://github.com/appium/WebDriverAgent) exposes an HTTP MJPEG endpoint that continuously captures the screen, encodes each frame as JPEG, and streams frames to all connected clients using the `multipart/x-mixed-replace` response format. The capture rate, scaling, quality, and orientation of these frames are controlled by the MJPEG-related [settings](../reference/settings.md) and a few [environment variables](../reference/env-vars.md) that WebDriverAgent reads when the screenshots broadcaster is initialized.
70
+
71
+ ### Screenshot command and `mjpegScreenshotUrl`
72
+
73
+ If **`appium:mjpegScreenshotUrl`** is set at session start, the driver starts an internal **MJPEG stream client** that connects to that URL. When you call the **screenshot** command, the driver returns the **latest received frame** from this stream (as PNG base64) instead of calling WDA’s normal screenshot endpoint. If no frame has been received yet, it falls back to the regular screenshot path.
74
+
75
+ ### Screen recording
76
+
77
+ For **`mobile: startScreenRecording`** / **`startRecordingScreen`** (HTTP) with video type **`mjpeg`** (the default), the driver uses **ffmpeg** with input `-f mjpeg -i <url>`, where the URL is the MJPEG stream (typically the forwarded `mjpegServerPort`). Frames from the stream are then encoded (e.g. to H.264) and written to an MP4 file. The recording quality and framerate can be aligned with the MJPEG settings (e.g. `mjpegServerFramerate`, `mjpegServerScreenshotQuality`) and with the `videoFps` / `videoQuality` options of the recording API.
78
+
79
+ ## Parallel sessions
80
+
81
+ When running [parallel tests](parallel-tests.md), each session that uses MJPEG (e.g. screen recording or `mjpegScreenshotUrl`) must use a **different** `mjpegServerPort`. Otherwise port conflicts or wrong-stream issues can occur. The driver will try to forward the requested MJPEG port; if the default 9100 is already in use and you did not set a custom port, it only warns and leaves MJPEG features unavailable for that session.
82
+
83
+ ## Requirements
84
+
85
+ - **Screen recording** via MJPEG: **ffmpeg** must be installed and on the PATH (e.g. `brew install ffmpeg`). The driver uses the MJPEG stream as ffmpeg input.
86
+ - **`mjpegScreenshotUrl`**: The given URL must be reachable from the Appium process (e.g. correct host/port and, for real devices, port forwarding if the stream is on the device).
87
+
88
+ ## Summary
89
+
90
+ | Topic | Details |
91
+ |-------|---------|
92
+ | **Default port** | 9100 (`mjpegServerPort`) |
93
+ | **Protocol** | HTTP, `multipart/x-mixed-replace` (MJPEG) |
94
+ | **Default framerate** | 10 fps (`mjpegServerFramerate`) |
95
+ | **Default quality** | 25% JPEG (`mjpegServerScreenshotQuality`) |
96
+ | **Default scaling** | 100% (`mjpegScalingFactor`) |
97
+ | **Related commands** | Screenshot (when `mjpegScreenshotUrl` is set), `mobile: startScreenRecording` / `startRecordingScreen` (HTTP) (with MJPEG input) |
98
+ | **Related reference** | [Capabilities](../reference/capabilities.md), [Settings](../reference/settings.md), [Execute methods](../reference/execute-methods.md) |
@@ -0,0 +1,37 @@
1
+ ---
2
+ hide:
3
+ - toc
4
+
5
+ title: Multiple Xcode Installs
6
+ ---
7
+
8
+ If you have multiple Xcode installations, you may choose which toolset Appium should use with one
9
+ of two ways:
10
+
11
+ ### `xcode-select` tool
12
+ Only available with `sudo` privileges, affects the whole system.
13
+
14
+ Assuming you want to choose `/Applications/Xcode13.app`:
15
+
16
+ 1. Set the default Xcode
17
+ ```
18
+ sudo xcode-select -s /Applications/Xcode13.app/Contents/Developer
19
+ ```
20
+ 2. Run Appium
21
+ ```
22
+ appium
23
+ ```
24
+
25
+ ### Environment variable
26
+ No privileges needed, affects only the current shell, so Appium should be started within that shell.
27
+
28
+ Assuming you want to choose `/Applications/Xcode12.app`:
29
+
30
+ 1. Set the `DEVELOPER_DIR` environment variable
31
+ ```
32
+ export DEVELOPER_DIR=/Applications/Xcode12.app/Contents/Developer
33
+ ```
34
+ 2. Run Appium
35
+ ```
36
+ appium
37
+ ```