@appium/mcp-documentation 1.0.3 → 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 +6 -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,202 @@
1
+ ---
2
+ title: Element Lookup Issues
3
+ ---
4
+
5
+ This article helps to resolve possible _functional_ issues that may arise during element lookup,
6
+ where the desired element is either not found or has unexpected property values. Such issues can
7
+ manifest with several symptoms.
8
+
9
+ For _non-functional_ issues, such as slow performance during element lookup, please refer to the
10
+ [WebDriverAgent Slowness](./wda-slowness.md) guide.
11
+
12
+ ## No Element in Page Source
13
+
14
+ The desired element is shown as part of a parent element container, and is not individually
15
+ distinguishable in the page source tree. Sometimes the entire application view is shown as one
16
+ single element container.
17
+
18
+ ### Ensure application accessibility
19
+
20
+ The XCUITest driver is based on Apple's XCTest framework, which uses the information provided by
21
+ the system accessibility framework to distinguish and interact with on-screen elements.
22
+ The same approach is used by various screen readers, VoiceOver, etc. This means that if the
23
+ application is missing accessibility indicators for certain elements, then they may not be visible.
24
+
25
+ You may start your journey into what Accessibility is and how to deal with it in your applications
26
+ from the official [Apple's accessibility guideline](https://developer.apple.com/design/human-interface-guidelines/accessibility).
27
+ Bear in mind that this tutorial only describes apps based on official Apple frameworks like UIKit
28
+ or SwiftUI. If you use a different framework to build the application's user interface, for example
29
+ [React Native](https://reactnative.dev/), then consider looking for framework-specific
30
+ accessibility guidelines.
31
+
32
+ It is also possible that the source tree displayed in the Xcode accessibility inspector differs from
33
+ the tree generated by XCTest. The best possible way to verify the page source generated by the
34
+ latter is to check the output of the [`debugDescription`](https://developer.apple.com/documentation/xctest/xcuielement/1500909-debugdescription)
35
+ attribute of the corresponding `XCUIApplication` element. The XCUITest driver exposes this
36
+ functionality using the [`mobile: source`](../reference/execute-methods.md#mobile-source) execute
37
+ method with `format` set to `description`.
38
+
39
+ ### Check if this is a hybrid application
40
+
41
+ Hybrid applications are applications that use [web views](https://developer.apple.com/design/human-interface-guidelines/web-views)
42
+ in order to represent their whole user interface or portions of it. The iOS web view engine only
43
+ allows for limited accessibility interactions via [ARIA](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA)
44
+ attributes, which may result in certain elements being absent.
45
+
46
+ One approach to handle this is to switch the driver context in order to get full native access to
47
+ the page DOM. Read [Automating Hybrid Apps](../guides/hybrid.md) for more details.
48
+
49
+ For app developers, setting [`aria-label`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-label)
50
+ and [`role`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles)
51
+ attributes allow exposing web elements to the accessibility tree, as [accessibilityLabel](https://developer.apple.com/documentation/objectivec/nsobject/1615181-accessibilitylabel)
52
+ in `WKWebView`. The primary purpose of these attributes is to make web elements accessible for
53
+ tools such as VoiceOver, but they also expose these elements to the XCUITest driver's `NATIVE_APP`
54
+ context. Consider adding these attributes to elements that you want to expose to the driver.
55
+
56
+ ### Adjust the tree depth
57
+
58
+ Apple's XCTest represents the page source as hierarchical structure (a tree), where each UI element
59
+ has ancestor, descendant or sibling relationships to other elements. Complex applications with
60
+ deeply nested views may therefore result in tree structures of large depth. For performance reasons,
61
+ the XCUITest driver sets the maximum nesting level to `50`, which means that elements of depth `51`
62
+ or greater will not be visible at all.
63
+
64
+ The driver allows to increase this limit using the [`snapshotMaxDepth`](../reference/settings.md#snapshotmaxdepth)
65
+ setting, but only to a maximum value of `62`. This is due to an Apple limitation, where XCTest
66
+ cannot return any elements located at depth `63` or greater. This limitation is linked to the
67
+ operation of `NSDictionary` and cannot be worked around.
68
+
69
+ The suggested approach for handling the depth limit of `62` is to refactor the code of the
70
+ actual application under test. For example, applications built using [React Native](https://reactnative.dev/)
71
+ are known to create deeply nested view hierarchies. There are several approaches that can help
72
+ mitigate this:
73
+
74
+ - Try to remove unnecessary nesting levels
75
+ - Use the Fabric renderer with [View Flattening](https://reactnative.dev/architecture/view-flattening)
76
+ - Use native stack navigator instead of stack navigator
77
+ - Reduce the amount of view tags/test IDs
78
+
79
+ Check [the corresponding issue](https://github.com/appium/appium/issues/14825) for more details.
80
+
81
+ Deeply nested hierarchies might also be the reason for the element lookup slowness. Read the
82
+ [Diagnosing WebDriverAgent Slowness](./wda-slowness.md) article to troubleshoot such cases.
83
+
84
+ ### Select the correct active application
85
+
86
+ Certain UI elements may appear as though they belong to the application under test, but are actually
87
+ part of a completely different application (oftentimes the iOS system itself - the springboard).
88
+ Application ownership of certain elements may even change in different iOS versions. Frequent
89
+ candidates for such behavior are:
90
+
91
+ - System alerts, such as camera or geolocation permission requests
92
+ - Quick access toolbars, such as Control Center
93
+ - Various RPC sheets, such as the Share To sheet
94
+
95
+ WebDriverAgent is designed in such a way that it only interacts with a single app hierarchy at a
96
+ time. This is considered the `active` application. The driver provides two approaches to change
97
+ the active app:
98
+
99
+ - The [`mobile: activateApp`](../reference/execute-methods.md#mobile-activateapp) execute method
100
+ allows to explicitly change the currently active application
101
+ - The [`defaultActiveApplication`](../reference/settings.md#defaultactiveapplication) setting allows
102
+ to set the preferred active application. This means that if WebDriverAgent detects multiple
103
+ applications, it will attempt to automatically set the preferred application as active.
104
+
105
+ Check the main [Troubleshooting guide](./index.md) and/or
106
+ [Switching Between iOS Apps During a Test](https://appiumpro.com/editions/13-switching-between-ios-apps-during-a-test)
107
+ article for more details on how to make such elements available.
108
+
109
+
110
+ ## Test Cannot Find a Known Element
111
+
112
+ The desired element is shown in the page tree, but cannot be found using an automated test.
113
+
114
+ ### Check for race conditions
115
+
116
+ Sometimes automation might run too quickly or too slowly depending on the application's UI state.
117
+ This means lookup may fail before the element has appeared, or after it has already disappeared.
118
+
119
+ - If lookup is too fast: consider using timers, e.g. repeat the `findElement` action multiple times
120
+ until either the element is found or the timeout occurs. All clients have convenience wrappers
121
+ for such timers in form of expected conditions.
122
+ - If lookup is too slow: try to optimize your script for the maximum performance, e.g. use
123
+ optimal/fast element locators, adjust the application and driver settings to perform optimally,
124
+ etc.
125
+
126
+ You may also encounter situations where the automation framework is already optimized, but the
127
+ target element disappears quickly by design, for example, a notification popup that only appears
128
+ for a second and then is immediately hidden. For such "special" elements, consider using approaches
129
+ different from `findElement`:
130
+
131
+ - Post-test video recording analysis (video FPS should usually be enough to catch all short-living
132
+ elements)
133
+ - Work with application developers to introduce a debug setting to change the behavior for such
134
+ elements and make them stay visible for longer time
135
+ - Use non-UI-related assertions, like log analysis or direct API calls
136
+
137
+ ### Check for environment mismatches
138
+
139
+ There are known cases where the application interface/behavior might differ in simulators and real
140
+ devices. It might even differ if the screen size or device model/OS version/system setting differs.
141
+ That is why always make sure that your test development environment, such as one where Appium
142
+ Inspector is used, is as close as possible to the environment where automated tests are run.
143
+
144
+
145
+ ## Incorrect Element Property Value
146
+
147
+ The desired element is shown in the page tree, but the value of a certain element property is not
148
+ as expected. For example, the element's `visible` property may be set to `true`, even though the
149
+ element is not actually shown in the application interface, or vice versa.
150
+
151
+ ### The driver has minimum influence to attribute values
152
+
153
+ This is a simple and at the same time complicated topic.
154
+
155
+ Since the XCUITest driver is based on Apple's XCTest, where possible, attribute values are
156
+ retrieved from the latter. The standard attributes provided by XCTest can be found in [XCUIElementAttributes](https://developer.apple.com/documentation/xctest/xcuielementattributes?language=objc)
157
+ protocol reference, while the full list of attributes supported by XCUITest driver's WebElement can
158
+ be found in the [Element Attributes](../reference/element-attributes.md) document.
159
+
160
+ Most of the supported driver attributes are simple compilations of standard XCTest attributes. For
161
+ example, `elementType` is translated to `type` by matching the corresponding [enum](https://developer.apple.com/documentation/xctest/xcuielementtype?language=objc)
162
+ value to a string representation, while `name` is compiled from the original element's identifier
163
+ and label, depending on what is present first. The full list of mapping rules between standard and
164
+ XCUITest attribute values can be found in [WebDriverAgent sources](https://github.com/appium/WebDriverAgent/blob/master/WebDriverAgentLib/Categories/XCUIElement%2BFBWebDriverAttributes.m).
165
+
166
+ Still, some supported driver attributes, like `visible` or `accessible`, have no direct mapping in
167
+ XCTest and are retrieved directly from the accessibility framework ~~using dark magic~~.
168
+ This means that the actual value of these attributes depends on accessibility internals, and is
169
+ available mostly due to ~~legacy~~ convenience purposes, since XCTest does not even expose them.
170
+ We'd love to deprecate and remove this legacy burden and only rely on officially supported
171
+ attributes, but historically many people rely on these attributes, even though their values might
172
+ be not reliable, and there is no good way to debug this behavior or somehow influence it.
173
+
174
+ The final recommendation here would be:
175
+
176
+ - If the problematic attribute is based on a public XCUIElement attribute, try to run a vanilla
177
+ XCTest test with the same app, and compare the attribute value to the one you see in the XCUITest
178
+ driver. If XCTest returns a correct value, then feel free to raise an [issue](https://github.com/appium/WebDriverAgent/issues)
179
+ to the Appium team. However, if the XCTest value is still incorrect, then the only place to
180
+ complain would be the Apple support forum or an XCTest bug tracker.
181
+ - If the problematic attribute is a "custom" driver attribute, like `visible` or `accessible`,
182
+ then we, most likely, won't be able to help you. You may try to contribute to the corresponding
183
+ WebDriverAgent sources, but keep in mind that many automation tests rely on the current way
184
+ these attributes are calculated, and we probably don't want to break them.
185
+
186
+
187
+ ## Long Element Property Value is Truncated
188
+
189
+ The desired element is shown in the page tree, but the value of a certain long element property is
190
+ truncated and not fully shown.
191
+
192
+ ### Use value retrieval methods
193
+
194
+ The XCTest framework limits element property values to 512 bytes in snapshots for performance reasons.
195
+ Such behavior can primarily be observed when retrieving the full page source using the driver, or via
196
+ [debugDescription](https://developer.apple.com/documentation/xctest/xcuielement/1500909-debugdescription)
197
+ in XCTest directly.
198
+
199
+ The solution here is to retrieve the property value using the corresponding API (such as
200
+ [Get Element Attribute](https://www.w3.org/TR/webdriver1/#get-element-attribute) / [Get Element Text](https://www.w3.org/TR/webdriver1/#dfn-get-element-text)).
201
+ Please see [this issue](https://github.com/appium/appium-xcuitest-driver/issues/2552) and
202
+ [this PR](https://github.com/appium/WebDriverAgent/pull/1007) for more details.
@@ -0,0 +1,204 @@
1
+ ---
2
+ title: Troubleshooting
3
+ ---
4
+
5
+ ## Known Problems
6
+
7
+ * Real devices with iOS/iPadOS 15+ show an overlay with the text `Automation Running Hold both
8
+ volume buttons to stop` while WebDriverAgent is running. This is a known limitation of the XCTest
9
+ framework. Note that screenshotting functionality is not affected (i.e. the overlay is not visible
10
+ on taken screenshots).
11
+ * Real devices with iOS/iPadOS 15+ [require passcode or Touch ID](https://github.com/appium/appium/issues/15898#issuecomment-927340411)
12
+ when starting a new session. A workaround for this is to disable passcode/Touch ID on the device.
13
+ * After many failures on a real device, it could transition to a state where connections are no
14
+ longer being accepted. Rebooting the device can help remedy this problem. Please read
15
+ [this issue](https://github.com/facebook/WebDriverAgent/issues/507) for more details.
16
+ * `shake` is implemented via AppleScript and works only on Simulator due to lack of support from Apple
17
+
18
+ ## Interact with dialogs managed by `com.apple.springboard`
19
+
20
+ System dialogs, such as permission dialogs, might not be interactable directly when the active application is not `com.apple.springboard`.
21
+ Despite a similar look, dialogs belonging to the active session application (e.g. initially passed as `appium:app` or `appium:bundleId` capability value)
22
+ do not require such adjustment.
23
+
24
+ XCUITest driver offers a couple of approaches to handle them:
25
+
26
+ - Set the [respectSystemAlerts setting](../reference/settings.md#respectsystemalerts) to `true`. It
27
+ enforces the active application detection algorithm to check a presence of system alerts and to
28
+ return the Springboard app if this check succeeds. Such approach emulates the driver behavior
29
+ prior to version 6 of XCUITest driver, although it might slightly slow down your scripts because
30
+ each attempt to detect an active app would require to also query for alerts presence.
31
+ - Start a session without `appium:app` nor `appium:bundleId`. Then XCUITest driver attempts to get the current active application. This requires you to start an application after a new session request with [`mobile: installApp`](../reference/execute-methods.md#mobile-installapp) to install an app if needed and [`mobile: launchApp`](../reference/execute-methods.md#mobile-launchapp)/[`mobile: activateApp`](../reference/execute-methods.md#mobile-activateapp), but it could automatically change the active application with `com.apple.springboard` or activate an application at the foreground. (Note that the automatic app detection might be lengthy, thus each action could take more time.)
32
+ - When a permission alert exists at the foreground, it could select the `com.apple.springboard`
33
+ - When another application is at the foreground by accepting/denying the system alert, or [`mobile: activateApp`](../reference/execute-methods.md#mobile-activateapp), the application would be selected as an active application.
34
+ - [`mobile: alert`](../reference/execute-methods.md#mobile-alert)
35
+ - `defaultActiveApplication` setting in [Settings](../reference/settings.md#defaultactiveapplication).
36
+ - e.g. With the [Appium Ruby client](https://github.com/appium/ruby_lib_core)
37
+ ```ruby
38
+ # Interacting with the test target
39
+ driver.settings.update({defaultActiveApplication: "com.apple.springboard"})
40
+ # to accept the alert
41
+ driver.find_element("accessibility_id", "Allow Once").click
42
+ driver.settings.update({defaultActiveApplication: "auto"})
43
+ # keep interacting with the test target
44
+ ```
45
+ - Enable `appium:autoAcceptAlerts`/`appium:autoDismissAlerts`, or interact with alerts via [User Prompts](https://www.w3.org/TR/webdriver1/#user-prompts) in WebDriver endpoints
46
+ - e.g. `driver.switch_to.alert.accept` with the [Appium Ruby client](https://github.com/appium/ruby_lib_core)
47
+ - It might be necessary to coordinate element selection via [`acceptAlertButtonSelector`](../reference/settings.md#acceptalertbuttonselector)
48
+ or [`dismissAlertButtonSelector`](../reference/settings.md#dismissalertbuttonselector) settings
49
+ - Activate `com.apple.springboard` with [`mobile: activateApp`](../reference/execute-methods.md#mobile-activateapp) before interacting with dialogs
50
+
51
+ [`mobile: activeAppInfo`](../reference/execute-methods.md#mobile-activeappinfo) helps to understand what application (bundleId) is considered as active for the XCUITest driver.
52
+
53
+ ## Interact with dialogs managed by `com.apple.ContactsUI.LimitedAccessPromptView`
54
+
55
+ iOS 18 introduced a new process named `com.apple.ContactsUI.LimitedAccessPromptView`. See [this issue](https://github.com/appium/appium/issues/20591) for more details.
56
+ As of XCUITest driver v7.26.4, the only workaround to interact with views available through the process is the below method:
57
+
58
+ - `defaultActiveApplication` setting in [Settings](../reference/settings.md#defaultactiveapplication).
59
+ - e.g. With the [Appium Ruby client](https://github.com/appium/ruby_lib_core)
60
+ ```ruby
61
+ # Interacting with the test target
62
+ driver.settings.update({defaultActiveApplication: "com.apple.ContactsUI.LimitedAccessPromptView"})
63
+ # to accept the alert
64
+ driver.find_element("accessibility_id", "Select Contacts").click
65
+ driver.settings.update({defaultActiveApplication: "auto"})
66
+ # keep interacting with the test target
67
+ ```
68
+
69
+ The `com.apple.ContactsUI.LimitedAccessPromptView` process can get elements available through `com.apple.springboard`, such as several system permission dialogs.
70
+ iOS 18+ devices may be possible to use `com.apple.ContactsUI.LimitedAccessPromptView` to interact with elements managed either by `com.apple.ContactsUI.LimitedAccessPromptView` or `com.apple.springboard`.
71
+
72
+ ## Leftover Application Data on Real Devices
73
+
74
+ There might be a situation where application data is present on the real device, even if the
75
+ application itself is not installed. This could happen if:
76
+
77
+ - The app is in an [offloaded state](https://discussions.apple.com/thread/254887240)
78
+ - The application state is cached
79
+ - There was an unexpected failure while installing the app. An example of such failure is the
80
+ `ApplicationVerificationFailed` which happens while installing an app signed with an invalid provisioning profile.
81
+
82
+ In the above cases, the application identifier will not be listed in the output of
83
+ [`mobile: listApps`](../reference/execute-methods.md#mobile-listapps), and it will not be detected
84
+ by [`mobile: isAppInstalled`](../reference/execute-methods.md#mobile-isappinstalled). Setting
85
+ `appium:fullReset` or `appium:enforceAppInstall` capabilities to `true` also will not help clear this data.
86
+
87
+ The only way to completely get rid of the cached application data is to call the
88
+ [`mobile: removeApp`](../reference/execute-methods.md#mobile-removeapp) command with the appropriate
89
+ bundle identifier.
90
+
91
+ The driver does automatically try to resolve application installs that failed because of the
92
+ `MismatchedApplicationIdentifierEntitlement` error. However, in cases when the previously installed
93
+ application's provisioning profile is different from what currently the driver is trying to
94
+ install, and if you explicitly set the driver to _not_ perform application uninstall, then consider
95
+ calling [`mobile: removeApp`](../reference/execute-methods.md#mobile-removeapp) before the
96
+ `MismatchedApplicationIdentifierEntitlement` error occurs. Example steps can be as follows:
97
+
98
+ 1. Start a session without `appium:app` and `appium:bundleId` capabilities
99
+ 2. Call [`mobile: removeApp`](../reference/execute-methods.md#mobile-removeapp) for the target
100
+ application's bundle id
101
+ 3. Install the test target with [`mobile: installApp`](../reference/execute-methods.md#mobile-installapp)
102
+ 4. Launch the application with [`mobile: launchApp`](../reference/execute-methods.md#mobile-launchapp)
103
+ or [`mobile: activateApp`](../reference/execute-methods.md#mobile-activateapp)
104
+
105
+
106
+ !!! note
107
+
108
+ We observed that iOS 18+ environments can retain the permission preference even after reinstallation.
109
+ Please refer to [this issue](https://github.com/appium/appium-xcuitest-driver/issues/2572) for more information about this behavior.
110
+
111
+
112
+ ## Weird State
113
+
114
+ ### Real Device Stops Responding
115
+
116
+ Running tests on a real device is particularly flakey. If things stop responding, the only recourse
117
+ is, most often, to restart the device. Logs in the form of the following _may_ start to occur:
118
+
119
+ ```shell
120
+ info JSONWP Proxy Proxying [POST /session] to [POST http://10.35.4.122:8100/session] with body: {"desiredCapabilities":{"ap..."
121
+ dbug WebDriverAgent Device: Jul 26 13:20:42 iamPhone XCTRunner[240] <Warning>: Listening on USB
122
+ dbug WebDriverAgent Device: Jul 26 13:21:42 iamPhone XCTRunner[240] <Warning>: Enqueue Failure: UI Testing Failure - Unable to update application state promptly. <unknown> 0 1
123
+ dbug WebDriverAgent Device: Jul 26 13:21:57 iamPhone XCTRunner[240] <Warning>: Enqueue Failure: UI Testing Failure - Failed to get screenshot within 15s <unknown> 0 1
124
+ dbug WebDriverAgent Device: Jul 26 13:22:57 iamPhone XCTRunner[240] <Warning>: Enqueue Failure: UI Testing Failure - App state of (null) is still unknown <unknown> 0 1
125
+ ```
126
+
127
+ ### Command Takes 60+ Seconds
128
+
129
+ Sometimes it is possible to encounter slowdowns for an additional 60 seconds for a command that
130
+ usually should not take long. This may be caused by a crash in the `testmanagerd` process on the
131
+ device under test. In such a case, the OS tries to restore the process, then wait for the resurrected
132
+ daemon to connect to the target process, which causes the aforementioned delay.
133
+
134
+ This can be fixed by terminating the target application process. For example, if this behavior
135
+ occurs while calling `mobile: queryAppState`, you can terminate the application once, or restart the
136
+ device entirely. Please check [this pull request](https://github.com/appium/WebDriverAgent/pull/774)
137
+ for more details.
138
+
139
+ ## Real Device Security Settings
140
+
141
+ On some systems, especially CI ones, where tests are executed by command line agents, macOS
142
+ Accessibility restrictions result in the WebDriverAgent process being unable to retrieve the
143
+ development keys from the system keychain. This usually manifests by `xcodebuild` returning error
144
+ code `65`. One workaround for this is to use a private key that is not stored on the system
145
+ keychain. See [this issue](https://github.com/appium/appium/issues/6955) and
146
+ [this Stack Exchange post](http://stackoverflow.com/questions/16550594/jenkins-xcode-build-works-codesign-fails).
147
+
148
+ To export the key, use
149
+
150
+ ```
151
+ security create-keychain -p [keychain_password] MyKeychain.keychain
152
+ security import MyPrivateKey.p12 -t agg -k MyKeychain.keychain -P [p12_Password] -A
153
+ ```
154
+
155
+ where `MyPrivateKey.p12` is the private development key exported from the system keychain.
156
+
157
+ You can then use the [`appium:keychainPath`](../reference/capabilities.md#webdriveragent) and
158
+ [`appium:keychainPassword`](../reference/capabilities.md#webdriveragent) capabilities to pass this
159
+ keychain to WebDriverAgent.
160
+
161
+ ## Simulator Resetting
162
+
163
+ When testing on simulators, the driver tries to leave the simulator state as it found it:
164
+
165
+ * If no `udid` is provided, the driver will create a new iOS simulator, run tests on it, and then
166
+ delete the simulator
167
+ * If a specific `udid` is provided for a simulator that _is not_ running, the driver will boot the
168
+ specified simulator, run tests on it, and then shut the simulator down
169
+ * If a specific `udid` is provided for a simulator that _is_ running, the driver will connect to the
170
+ existing simulator, run tests, and then leave the simulator running
171
+
172
+ You can use the `appium:noReset` capability to adjust this behavior: setting it to `true` will
173
+ leave the simulator running at the end of a test session.
174
+
175
+ ## Caching Issues During Build
176
+
177
+ Testing on iOS generates files that can sometimes get large. These include logs, temporary files,
178
+ and derived data from Xcode runs, all of which are safe to delete if any issues arise. The files are
179
+ usually found in the following locations, should they need to be deleted:
180
+
181
+ ```
182
+ $HOME/Library/Logs/CoreSimulator/*
183
+ $HOME/Library/Developer/Xcode/DerivedData/*
184
+ ```
185
+
186
+ ## Frequent `Disconnecting from remote debugger` error in iOS 17
187
+
188
+ Please try out iOS 17.6 or a newer version which includes [a possible fix by Apple](https://developer.apple.com/documentation/safari-release-notes/safari-17_6-release-notes#Web-Inspector).
189
+
190
+ Frequent Web Inspector debugger disconnection started since iOS 17.2 (or iOS 17.0), that eventually caused `Disconnecting from remote debugger` error.
191
+ It could be improved since iOS 17.6.
192
+ Please check [the corresponding pull request](https://github.com/appium/appium-xcuitest-driver/pull/2334) for more details.
193
+
194
+ ## Unable to Detect Webview
195
+
196
+ The driver can only detect webviews that are exposed for debugging. This can be configured by the
197
+ application developer as follows:
198
+
199
+ - On iOS/iPadOS >= 16.4: the destination `WKWebView` and/or `JSContext` component must have the
200
+ [`isInspectable`](https://developer.apple.com/documentation/webkit/wkwebview/4111163-isinspectable)
201
+ property set to `true`. Please read [the WebKit documentation page](https://webkit.org/blog/13936/enabling-the-inspection-of-web-content-in-apps/)
202
+ for more details on this property.
203
+ - On iOS/iPadOS < 16.4: the [`get-task-allow` entitlement](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_debugger)
204
+ must be set to `true` in the application manifest.
@@ -0,0 +1,206 @@
1
+ ---
2
+ title: WebDriverAgent Slowness
3
+ ---
4
+
5
+ The XCUITest driver is based on Apple's [XCTest](https://developer.apple.com/documentation/xctest)
6
+ test automation framework and thus inherits most (if not all) properties and features this framework
7
+ provides. The purpose of this article is to help with optimization of automation scenarios that
8
+ don't perform well and/or to explain possible causes of such behavior.
9
+
10
+ !!! note
11
+
12
+ This article only covers specific patterns that the author knows of or dealt with. If your pattern
13
+ is not present here, try to look for possible occurrences in existing [issues](https://github.com/appium/appium/issues),
14
+ [Appium forum](https://discuss.appium.io) or just search the internet.
15
+
16
+ ## Context
17
+
18
+ ### How Automation Runs
19
+
20
+ First, it is important to figure out what exactly is slow. The Appium ecosystem is complicated and
21
+ consists of multiple layers, where each layer could influence the overall duration. For example,
22
+ when an API call is invoked from a client script, it must go through the following stages:
23
+
24
+ 1. Your automation script (Java, Python, C#, etc; runs on your machine)
25
+ 2. Appium Client Lib (Java, Python, C#, etc; runs on your machine)
26
+ 3. Appium Server (Node.js HTTP server; runs on your machine or a remote one)
27
+ 4. XCUITest Driver (Node.js HTTP handler; runs on your machine or a remote one)
28
+ 5. WebDriverAgent Server (ObjectiveC HTTP Server; runs on the remote mobile device)
29
+
30
+ The example above is the simplest flow. If you run your scripts using cloud providers
31
+ infrastructure then the amount of intermediate components in this chain may be much greater. As
32
+ mentioned above, it is very important to know in which stage(s) (or between them) the bottleneck
33
+ is observed.
34
+
35
+ This article focuses only on the last stage: the WebDriverAgent (WDA) server.
36
+
37
+ ### How WDA Works
38
+
39
+ The WDA source code is located in [the WebDriverAgent repository](https://github.com/appium/WebDriverAgent/tree/master).
40
+ It is published as the [`appium-webdriveragent`](https://www.npmjs.com/package/appium-webdriveragent)
41
+ NPM package, and contains several helper Node.js modules, along with the WDA source code itself.
42
+ This source code is compiled into an `.xctrunner` bundle, which is a special application type that
43
+ contains tests, and has some higher privileges in comparison to standard apps. The project itself
44
+ consists of three main parts:
45
+
46
+ - Vendor Libraries (e.g. RoutingHTTPServer)
47
+ - Ensure support for low-level HTTP- and TCP-server APIs
48
+ - WebDriverAgentLib
49
+ - Defines handlers for [W3C WebDriver](https://www.w3.org/TR/webdriver/) endpoints and implements
50
+ all the heavy-lifting procedures related to Apple's XCTest communication, plus some custom
51
+ handling specific for the XCUITest driver
52
+ - WebDriverAgentRunner
53
+ - An XCTest test that runs the HTTP server implemented by the WebDriverAgentLib
54
+
55
+ Important conclusions from the above information:
56
+
57
+ - WDA is an HTTP server, which executes API commands by invoking HTTP response handlers
58
+ - WDA uses Apple's XCTest APIs with various custom additions
59
+
60
+ ### Check If WDA Is the Bottleneck
61
+
62
+ Examine the Appium server logs and look for lines similar to the following:
63
+ ```bash
64
+ [3716542a][XCUITestDriver@73bc] Proxying [X] to [Y]
65
+ ```
66
+
67
+ This line indicates an HTTP request being proxied to WDA, and its duration can identify how long it
68
+ takes for the XCUITest driver to receive a response from WDA.
69
+
70
+ For easier debugging, consider enabling server timestamps by providing the `--log-timestamp` Appium
71
+ server parameter.
72
+
73
+ If you observe timestamps between the above log line and the next one differ too much, and the
74
+ difference is an anomaly (e.g. the same step is (much) faster for other apps/environments/parameter
75
+ combinations), then it might serve as a confirmation of a suspicious slowness.
76
+
77
+
78
+ ## Slow Application Startup
79
+
80
+ You observe timeouts or unusual slowness (in comparison to manual execution performance)
81
+ of the application startup on session initialization (if it also includes app startup)
82
+ or mid-session app startup.
83
+
84
+ ### Causes
85
+
86
+ When XCTest starts an app, it checks that the app's accessibility layer is ready for interactions.
87
+ This is done by verifying that the application is idling (e.g. does not perform any actions on the
88
+ main thread), as well as whether all animations have been finished.
89
+
90
+ If this check times out, an exception is thrown, or WDA may try to continue without any guarantees
91
+ the app could be interacted with (a.k.a. best effort strategy).
92
+
93
+ ### Solutions
94
+
95
+ You may try to tune the following capabilities and settings to influence the above timeout:
96
+
97
+ - [`appium:waitForIdleTimeout`](../reference/capabilities.md) capability
98
+ - [`waitForIdleTimeout`](../reference/settings.md#waitforidletimeout) setting
99
+ - [`animationCoolOffTimeout`](../reference/settings.md#animationcoolofftimeout) setting
100
+
101
+ Still, there are known cases where the application under test is constantly running something on
102
+ the main thread in an endless loop. Most likely, such apps are not automatable at all, or hardly
103
+ automatable without fixing the app source code itself.
104
+
105
+
106
+ ## Slow Page Source Retrieval
107
+
108
+ You observe timeouts or unusual slowness while retrieving the page source of the app.
109
+
110
+ ### Causes
111
+
112
+ In order to retrieve the page source, WDA needs to take a snapshot of the whole accessibility
113
+ hierarchy with all element attributes resolved, which is a time-expensive operation. The causes for
114
+ the slowness are commonly the following:
115
+
116
+ - The current app hierarchy is too large (e.g. has hundreds of elements). This is a known
117
+ XCTest limitation.
118
+ - The app is not idling/has active animations
119
+ - It takes too long to determine each element's `visible` or `accessible` attributes, which are
120
+ custom and are not present in the original XCTest implementation
121
+
122
+ ### Solutions
123
+
124
+ - Reduce the size of the app hierarchy using the [`snapshotMaxDepth`](../reference/settings.md#snapshotmaxdepth)
125
+ and/or [`snapshotMaxChildren`](../reference/settings.md#snapshotmaxchildren) settings. The former setting limits how
126
+ deep into the hierarchy WDA will traverse; if the destination element is nested deeper than this
127
+ value, it will not be present in the snapshot. The latter setting limits how many child elements
128
+ are captured for each node; if there are more siblings than this limit, some of them (and any
129
+ elements under them) will be omitted from the snapshot.
130
+ - Retrieve the page source without "expensive" attributes using the [`mobile: source`](../reference/execute-methods.md#mobile-source)
131
+ method with the appropriate `excludedAttributes` argument value, or the [`pageSourceExcludedAttributes` setting](../reference/settings.md#pagesourceexcludedattributes)
132
+ - Retrieve the native XCTest page source using the [`mobile: source`](../reference/execute-methods.md#mobile-source)
133
+ method with the `format=description` argument value. The returned page source will be
134
+ poorly-formatted text, but its retrieval should be fast (at least not slower than XCTest).
135
+ - Reduce various timeouts, same as for the [Slow Application Startup pattern](#solutions)
136
+ - Adjust the source code of the application under test to reduce the amount of accessible elements
137
+ on a single screen
138
+ - Adjust the source code of the application under test to avoid running long operations or
139
+ animations on the main thread
140
+
141
+
142
+ ## Slow Element Search Using XPath
143
+
144
+ You observe timeouts or unusual slowness of XPath locators (in comparison to other location
145
+ strategies).
146
+
147
+ ### Causes
148
+
149
+ The [XPath](../reference/locator-strategies.md) location strategy is not natively supported by
150
+ XCTest, and is a custom addition only available in WDA. Even though such locators have more
151
+ features than others, the price for it is the observed slowness, as the driver cannot rely on native
152
+ XCTest location APIs while looking for elements using XPath.
153
+
154
+ In order to perform XPath lookup, WDA needs to take a snapshot of the whole accessibility
155
+ hierarchy with all element attributes resolved, which is a time-expensive operation.
156
+ The causes for the slowness of this operation are mentioned for the [Slow Page Source Retrieval pattern](#causes_1).
157
+
158
+ ### Solutions
159
+
160
+ In general, the common advice would be to avoid XPath locators where possible, and use locators
161
+ that are natively supported by XCTest (such as `id` or `predicate`), which are also more performant.
162
+ If using XPath locators is the only option, then the following suggestions may help:
163
+
164
+ - Reduce the size of the app hierarchy using the [`snapshotMaxDepth`](../reference/settings.md#snapshotmaxdepth)
165
+ and/or [`snapshotMaxChildren`](../reference/settings.md#snapshotmaxchildren) settings
166
+ - Retrieve the page source without the `visible` and/or `accessible` attributes, using the [`mobile: source`](../reference/execute-methods.md#mobile-source)
167
+ method with the appropriate `excludedAttributes` argument value, or the [`pageSourceExcludedAttributes` setting](../reference/settings.md#pagesourceexcludedattributes)
168
+ - Reduce various timeouts, same as for the [Slow Application Startup pattern](#solutions)
169
+ - Adjust the source code of the application under test to reduce the amount of accessible elements
170
+ on a single screen
171
+ - Adjust the source code of the application under test to avoid running long operations or
172
+ animations on the main thread
173
+
174
+
175
+ ## Slow Element Search Using Non-XPath
176
+
177
+ You observe timeouts or unusual slowness with various non-XPath locators.
178
+
179
+ ### Causes
180
+
181
+ All causes mentioned for the [Slow Page Source Retrieval pattern](#causes_1) also apply here.
182
+
183
+ ### Solutions
184
+
185
+ All suggestions mentioned for the [Slow Element Search Using XPath pattern](#solutions_2) also apply
186
+ here.
187
+
188
+
189
+ ## Slow Element Interactions
190
+
191
+ You observe timeouts or unusual slowness while clicking elements or performing other
192
+ actions on them.
193
+
194
+ ### Causes
195
+
196
+ - The current app hierarchy is too large (e.g. has hundreds of elements). This is a known
197
+ XCTest limitation.
198
+ - The app is not idling/has active animations
199
+
200
+ ### Solutions
201
+
202
+ - Reduce various timeouts, same as for the [Slow Application Startup pattern](#solutions)
203
+ - Adjust the source code of the application under test to reduce the amount of accessible elements
204
+ on a single screen
205
+ - Adjust the source code of the application under test to avoid running long operations or
206
+ animations on the main thread
Binary file