@devicelab/maestro-runner-darwin-x64 1.1.25

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 (562) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +166 -0
  3. package/THIRD_PARTY_LICENSES +186 -0
  4. package/bin/maestro-runner +0 -0
  5. package/drivers/android/appium-uiautomator2-server-debug-androidTest.apk +0 -0
  6. package/drivers/android/appium-uiautomator2-server-v9.11.1.apk +0 -0
  7. package/drivers/android/devicelab-android-driver-test.apk +0 -0
  8. package/drivers/android/devicelab-android-driver.apk +0 -0
  9. package/drivers/android/settings_apk-debug.apk +0 -0
  10. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunner/App.swift +11 -0
  11. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunner.xcodeproj/project.pbxproj +523 -0
  12. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  13. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/ATTRIBUTION.md +73 -0
  14. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/Bridging-Header.h +4 -0
  15. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/PixelDiff.swift +72 -0
  16. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/PrivateHeaders/XCTest/XCPointerEventPath.h +43 -0
  17. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/PrivateHeaders/XCTest/XCSynthesizedEventRecord.h +32 -0
  18. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/PrivateHeaders/XCTest/XCUIApplication+ActiveApp.h +23 -0
  19. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/PrivateHeaders/XCTest/XCUIDevice.h +30 -0
  20. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerObjCExceptionCatcher.h +11 -0
  21. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerObjCExceptionCatcher.m +16 -0
  22. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Alert.swift +155 -0
  23. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+CommandExecution.swift +961 -0
  24. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Environment.swift +37 -0
  25. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Interaction.swift +1864 -0
  26. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Lifecycle.swift +351 -0
  27. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Media.swift +81 -0
  28. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Models.swift +258 -0
  29. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+ScreenRecorder.swift +279 -0
  30. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Snapshot.swift +703 -0
  31. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+SystemModal.swift +230 -0
  32. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Transport.swift +137 -0
  33. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+TvRemote.swift +185 -0
  34. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests.swift +197 -0
  35. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/SnapshotParams.h +28 -0
  36. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/SnapshotParams.m +49 -0
  37. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/SyntheticTyping.h +17 -0
  38. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/SyntheticTyping.m +86 -0
  39. package/drivers/ios/DevicelabIOSRunner/PROTOCOL.md +258 -0
  40. package/drivers/ios/DevicelabIOSRunner/README.md +38 -0
  41. package/drivers/ios/DevicelabIOSRunner/project.yml +49 -0
  42. package/drivers/ios/WebDriverAgent/.github/ISSUE_TEMPLATE.md +4 -0
  43. package/drivers/ios/WebDriverAgent/.github/actions/xcode-setup/action.yml +32 -0
  44. package/drivers/ios/WebDriverAgent/.github/dependabot.yml +22 -0
  45. package/drivers/ios/WebDriverAgent/.github/workflows/functional-test.yml +62 -0
  46. package/drivers/ios/WebDriverAgent/.github/workflows/pr-title.yml +10 -0
  47. package/drivers/ios/WebDriverAgent/.github/workflows/publish.js.yml +105 -0
  48. package/drivers/ios/WebDriverAgent/.github/workflows/unit-test.yml +30 -0
  49. package/drivers/ios/WebDriverAgent/.github/workflows/wda-package.yml +107 -0
  50. package/drivers/ios/WebDriverAgent/.github/workflows/wda-tests.yml +221 -0
  51. package/drivers/ios/WebDriverAgent/.mocharc.js +4 -0
  52. package/drivers/ios/WebDriverAgent/.releaserc +45 -0
  53. package/drivers/ios/WebDriverAgent/CHANGELOG.md +1547 -0
  54. package/drivers/ios/WebDriverAgent/CONTRIBUTING.md +35 -0
  55. package/drivers/ios/WebDriverAgent/Configurations/IOSSettings.xcconfig +31 -0
  56. package/drivers/ios/WebDriverAgent/Configurations/IOSTestSettings.xcconfig +1 -0
  57. package/drivers/ios/WebDriverAgent/Configurations/TVOSSettings.xcconfig +31 -0
  58. package/drivers/ios/WebDriverAgent/Configurations/TVOSTestSettings.xcconfig +1 -0
  59. package/drivers/ios/WebDriverAgent/Fastlane/Fastfile +13 -0
  60. package/drivers/ios/WebDriverAgent/Gemfile +3 -0
  61. package/drivers/ios/WebDriverAgent/LICENSE +30 -0
  62. package/drivers/ios/WebDriverAgent/PrivateHeaders/AccessibilityUtilities/AXSettings.h +15 -0
  63. package/drivers/ios/WebDriverAgent/PrivateHeaders/MobileCoreServices/LSApplicationWorkspace.h +127 -0
  64. package/drivers/ios/WebDriverAgent/PrivateHeaders/TextInput/TIPreferencesController.h +45 -0
  65. package/drivers/ios/WebDriverAgent/PrivateHeaders/UIKitCore/UIKeyboardImpl.h +27 -0
  66. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/CDStructures.h +28 -0
  67. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/NSString-XCTAdditions.h +11 -0
  68. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/NSValue-XCTestAdditions.h +11 -0
  69. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UIGestureRecognizer-RecordingAdditions.h +11 -0
  70. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UILongPressGestureRecognizer-RecordingAdditions.h +11 -0
  71. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UIPanGestureRecognizer-RecordingAdditions.h +11 -0
  72. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UIPinchGestureRecognizer-RecordingAdditions.h +11 -0
  73. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UISwipeGestureRecognizer-RecordingAdditions.h +11 -0
  74. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UITapGestureRecognizer-RecordingAdditions.h +11 -0
  75. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCAXClient_iOS.h +55 -0
  76. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCActivityRecord.h +39 -0
  77. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCApplicationMonitor.h +44 -0
  78. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCApplicationMonitor_iOS.h +18 -0
  79. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCApplicationQuery.h +23 -0
  80. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCDebugLogDelegate-Protocol.h +11 -0
  81. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCDeviceEvent.h +27 -0
  82. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCEventGenerator.h +73 -0
  83. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCKeyMappingPath.h +36 -0
  84. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCKeyboardInputSolver.h +41 -0
  85. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCKeyboardKeyMap.h +101 -0
  86. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCKeyboardLayout.h +35 -0
  87. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCPointerEvent.h +30 -0
  88. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCPointerEventPath.h +43 -0
  89. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSourceCodeRecording.h +42 -0
  90. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSourceCodeTreeNode.h +84 -0
  91. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSourceCodeTreeNodeEnumerator.h +18 -0
  92. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSymbolicationRecord.h +29 -0
  93. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSymbolicatorHolder.h +14 -0
  94. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSynthesizedEventRecord.h +32 -0
  95. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTAXClient-Protocol.h +14 -0
  96. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTAsyncActivity-Protocol.h +16 -0
  97. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTAsyncActivity.h +23 -0
  98. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTAutomationTarget-Protocol.h +12 -0
  99. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTDarwinNotificationExpectation.h +23 -0
  100. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTElementSetTransformer-Protocol.h +18 -0
  101. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTKVOExpectation.h +28 -0
  102. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTMetric.h +29 -0
  103. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTNSNotificationExpectation.h +27 -0
  104. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTNSPredicateExpectation.h +24 -0
  105. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTNSPredicateExpectationObject-Protocol.h +15 -0
  106. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTRunnerAutomationSession.h +21 -0
  107. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTRunnerDaemonSession.h +98 -0
  108. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTRunnerIDESession.h +65 -0
  109. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTTestRunSession.h +25 -0
  110. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTTestRunSessionDelegate-Protocol.h +17 -0
  111. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTUIApplicationMonitor-Protocol.h +17 -0
  112. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTWaiter.h +55 -0
  113. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTWaiterDelegate-Protocol.h +16 -0
  114. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTWaiterDelegatePrivate-Protocol.h +12 -0
  115. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTWaiterManagement-Protocol.h +13 -0
  116. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTWaiterManager.h +28 -0
  117. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTest.h +34 -0
  118. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestCase.h +102 -0
  119. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestCaseRun.h +18 -0
  120. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestCaseSuite.h +19 -0
  121. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestConfiguration.h +66 -0
  122. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestContext.h +26 -0
  123. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestContextScope.h +19 -0
  124. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestDriver.h +38 -0
  125. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestDriverInterface-Protocol.h +14 -0
  126. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestExpectation.h +39 -0
  127. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestExpectationDelegate-Protocol.h +14 -0
  128. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestExpectationWaiter.h +17 -0
  129. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestLog.h +32 -0
  130. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestManager_IDEInterface-Protocol.h +36 -0
  131. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestManager_ManagerInterface-Protocol.h +54 -0
  132. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestManager_TestsInterface-Protocol.h +12 -0
  133. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestMisuseObserver.h +37 -0
  134. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestObservation-Protocol.h +20 -0
  135. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestObservationCenter.h +36 -0
  136. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestObserver.h +20 -0
  137. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestProbe.h +13 -0
  138. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestRun.h +39 -0
  139. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestSuite.h +48 -0
  140. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestSuiteRun.h +28 -0
  141. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestWaiter.h +14 -0
  142. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIApplication.h +60 -0
  143. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIApplicationImpl.h +38 -0
  144. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIApplicationProcess.h +85 -0
  145. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUICoordinate.h +44 -0
  146. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIDevice.h +30 -0
  147. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIElement.h +74 -0
  148. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIElementAsynchronousHandlerWrapper.h +19 -0
  149. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIElementHitPointCoordinate.h +24 -0
  150. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIElementQuery.h +70 -0
  151. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIHitPointResult.h +20 -0
  152. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIRecorderNodeFinder.h +65 -0
  153. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIRecorderNodeFinderMatch.h +25 -0
  154. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIRecorderTimingMessage.h +20 -0
  155. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIRecorderUtilities.h +45 -0
  156. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIScreen.h +27 -0
  157. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIScreenDataSource-Protocol.h +19 -0
  158. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCInternalTestRun.h +43 -0
  159. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCKVOExpectationImplementation.h +32 -0
  160. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTDarwinNotificationExpectationImplementation.h +27 -0
  161. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTNSNotificationExpectationImplementation.h +30 -0
  162. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTNSPredicateExpectationImplementation.h +29 -0
  163. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTWaiterImpl.h +41 -0
  164. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestCaseImplementation.h +70 -0
  165. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestCaseInterruptionException.h +13 -0
  166. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestExpectationImplementation.h +40 -0
  167. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestImplementation.h +14 -0
  168. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestObservationCenterImplementation.h +19 -0
  169. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestSuiteImplementation.h +23 -0
  170. package/drivers/ios/WebDriverAgent/README.md +56 -0
  171. package/drivers/ios/WebDriverAgent/Scripts/build-webdriveragent.mjs +85 -0
  172. package/drivers/ios/WebDriverAgent/Scripts/build.sh +124 -0
  173. package/drivers/ios/WebDriverAgent/Scripts/ci/build-real.sh +24 -0
  174. package/drivers/ios/WebDriverAgent/Scripts/ci/build-sim.sh +15 -0
  175. package/drivers/ios/WebDriverAgent/Scripts/fetch-prebuilt-wda.mjs +69 -0
  176. package/drivers/ios/WebDriverAgent/Scripts/update-wda-version.mjs +42 -0
  177. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/project.pbxproj +4547 -0
  178. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  179. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  180. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/IntegrationApp.xcscheme +87 -0
  181. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/IntegrationTests_1.xcscheme +86 -0
  182. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/IntegrationTests_2.xcscheme +86 -0
  183. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/IntegrationTests_3.xcscheme +86 -0
  184. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentLib.xcscheme +125 -0
  185. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentLib_tvOS.xcscheme +95 -0
  186. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentRunner-nodebug.xcscheme +87 -0
  187. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentRunner.xcscheme +114 -0
  188. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentRunner_tvOS.xcscheme +123 -0
  189. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/FBXCElementSnapshotWrapper+Helpers.h +100 -0
  190. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/FBXCElementSnapshotWrapper+Helpers.m +192 -0
  191. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSDictionary+FBUtf8SafeDictionary.h +39 -0
  192. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSDictionary+FBUtf8SafeDictionary.m +87 -0
  193. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSExpression+FBFormat.h +29 -0
  194. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSExpression+FBFormat.m +34 -0
  195. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSString+FBVisualLength.h +18 -0
  196. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSString+FBVisualLength.m +18 -0
  197. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSString+FBXMLSafeString.h +27 -0
  198. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSString+FBXMLSafeString.m +30 -0
  199. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCAXClient_iOS+FBSnapshotReqParams.h +25 -0
  200. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCAXClient_iOS+FBSnapshotReqParams.m +82 -0
  201. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCTIssue+FBPatcher.h +17 -0
  202. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCTIssue+FBPatcher.m +35 -0
  203. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBAlert.h +23 -0
  204. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBAlert.m +109 -0
  205. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBFocused.h +23 -0
  206. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBHelpers.h +171 -0
  207. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBHelpers.m +645 -0
  208. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBQuiescence.h +24 -0
  209. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBQuiescence.m +28 -0
  210. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBTouchAction.h +29 -0
  211. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBTouchAction.m +75 -0
  212. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBUIInterruptions.h +22 -0
  213. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBUIInterruptions.m +31 -0
  214. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplicationProcess+FBQuiescence.h +27 -0
  215. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplicationProcess+FBQuiescence.m +118 -0
  216. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBHealthCheck.h +30 -0
  217. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBHealthCheck.m +47 -0
  218. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.h +193 -0
  219. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m +388 -0
  220. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.h +38 -0
  221. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.m +68 -0
  222. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBAccessibility.h +29 -0
  223. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBAccessibility.m +50 -0
  224. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBCaching.h +19 -0
  225. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBCaching.m +36 -0
  226. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBClassChain.h +57 -0
  227. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBClassChain.m +98 -0
  228. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBCustomActions.h +27 -0
  229. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBCustomActions.m +127 -0
  230. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBFind.h +75 -0
  231. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBFind.m +133 -0
  232. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBForceTouch.h +38 -0
  233. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBForceTouch.m +52 -0
  234. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBIsVisible.h +28 -0
  235. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBIsVisible.m +78 -0
  236. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBMinMax.h +33 -0
  237. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBMinMax.m +75 -0
  238. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBPickerWheel.h +45 -0
  239. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBPickerWheel.m +58 -0
  240. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBResolve.h +37 -0
  241. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBResolve.m +51 -0
  242. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBScrolling.h +98 -0
  243. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBScrolling.m +342 -0
  244. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBSwiping.h +38 -0
  245. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBSwiping.m +56 -0
  246. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBTVFocuse.h +35 -0
  247. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBTVFocuse.m +71 -0
  248. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBTyping.h +64 -0
  249. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBTyping.m +199 -0
  250. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBUID.h +42 -0
  251. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBUID.m +85 -0
  252. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBUtilities.h +106 -0
  253. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBUtilities.m +170 -0
  254. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBVisibleFrame.h +35 -0
  255. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBVisibleFrame.m +52 -0
  256. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBWebDriverAttributes.h +32 -0
  257. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBWebDriverAttributes.m +294 -0
  258. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElementQuery+FBHelpers.h +28 -0
  259. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElementQuery+FBHelpers.m +46 -0
  260. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBAlertViewCommands.h +19 -0
  261. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBAlertViewCommands.m +130 -0
  262. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBCustomCommands.h +19 -0
  263. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBCustomCommands.m +633 -0
  264. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBDebugCommands.h +19 -0
  265. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBDebugCommands.m +81 -0
  266. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBElementCommands.h +19 -0
  267. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBElementCommands.m +705 -0
  268. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBFindElementCommands.h +18 -0
  269. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBFindElementCommands.m +186 -0
  270. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBOrientationCommands.h +19 -0
  271. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBOrientationCommands.m +185 -0
  272. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBScreenshotCommands.h +19 -0
  273. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBScreenshotCommands.m +40 -0
  274. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBSessionCommands.h +19 -0
  275. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBSessionCommands.m +594 -0
  276. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBTouchActionCommands.h +19 -0
  277. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBTouchActionCommands.m +41 -0
  278. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBTouchIDCommands.h +19 -0
  279. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBTouchIDCommands.m +30 -0
  280. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBUnknownCommands.h +19 -0
  281. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBUnknownCommands.m +39 -0
  282. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBVideoCommands.h +19 -0
  283. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBVideoCommands.m +84 -0
  284. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/FBAlert.h +91 -0
  285. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/FBAlert.m +274 -0
  286. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Info.plist +26 -0
  287. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBCommandHandler.h +38 -0
  288. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBCommandStatus.h +80 -0
  289. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBCommandStatus.m +279 -0
  290. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBElement.h +95 -0
  291. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBElementCache.h +61 -0
  292. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBElementCache.m +100 -0
  293. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBElementUtils.h +76 -0
  294. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBElementUtils.m +153 -0
  295. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBExceptionHandler.h +29 -0
  296. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBExceptionHandler.m +58 -0
  297. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBExceptions.h +60 -0
  298. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBExceptions.m +24 -0
  299. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBHTTPStatusCodes.h +581 -0
  300. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBResponseJSONPayload.h +29 -0
  301. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBResponseJSONPayload.m +59 -0
  302. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBResponsePayload.h +74 -0
  303. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBResponsePayload.m +148 -0
  304. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBRoute.h +77 -0
  305. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBRoute.m +174 -0
  306. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBRouteRequest-Private.h +20 -0
  307. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBRouteRequest.h +39 -0
  308. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBRouteRequest.m +32 -0
  309. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingContainer.h +56 -0
  310. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingContainer.m +72 -0
  311. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingPromise.h +29 -0
  312. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingPromise.m +31 -0
  313. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingRequest.h +39 -0
  314. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingRequest.m +94 -0
  315. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBSession-Private.h +26 -0
  316. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBSession.h +141 -0
  317. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBSession.m +295 -0
  318. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBTCPSocket.h +65 -0
  319. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBTCPSocket.m +85 -0
  320. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBWebServer.h +52 -0
  321. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBWebServer.m +248 -0
  322. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCAccessibilityElement.h +34 -0
  323. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCAccessibilityElement.m +17 -0
  324. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCDeviceEvent.h +34 -0
  325. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCDeviceEvent.m +42 -0
  326. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCElementSnapshot.h +82 -0
  327. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCElementSnapshot.m +9 -0
  328. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCElementSnapshotWrapper.h +29 -0
  329. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCElementSnapshotWrapper.m +114 -0
  330. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBAccessibilityTraits.h +20 -0
  331. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBAccessibilityTraits.m +61 -0
  332. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBActiveAppDetectionPoint.h +56 -0
  333. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBActiveAppDetectionPoint.m +87 -0
  334. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBAlertsMonitor.h +51 -0
  335. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBAlertsMonitor.m +94 -0
  336. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBBaseActionsSynthesizer.h +131 -0
  337. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBBaseActionsSynthesizer.m +165 -0
  338. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBCapabilities.h +45 -0
  339. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBCapabilities.m +25 -0
  340. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBClassChainQueryParser.h +99 -0
  341. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBClassChainQueryParser.m +666 -0
  342. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBConfiguration.h +403 -0
  343. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBConfiguration.m +711 -0
  344. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBDebugLogDelegateDecorator.h +26 -0
  345. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBDebugLogDelegateDecorator.m +49 -0
  346. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBElementHelpers.h +29 -0
  347. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBElementHelpers.m +21 -0
  348. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBElementTypeTransformer.h +45 -0
  349. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBElementTypeTransformer.m +149 -0
  350. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBErrorBuilder.h +64 -0
  351. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBErrorBuilder.m +75 -0
  352. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBFailureProofTestCase.h +19 -0
  353. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBFailureProofTestCase.m +68 -0
  354. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBImageProcessor.h +55 -0
  355. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBImageProcessor.m +170 -0
  356. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBImageUtils.h +25 -0
  357. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBImageUtils.m +80 -0
  358. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBKeyboard.h +37 -0
  359. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBKeyboard.m +123 -0
  360. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBLogger.h +32 -0
  361. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBLogger.m +47 -0
  362. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBMacros.h +57 -0
  363. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBMathUtils.h +36 -0
  364. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBMathUtils.m +63 -0
  365. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBMjpegServer.h +24 -0
  366. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBMjpegServer.m +151 -0
  367. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBNotificationsHelper.h +37 -0
  368. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBNotificationsHelper.m +29 -0
  369. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBPasteboard.h +40 -0
  370. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBPasteboard.m +172 -0
  371. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBProtocolHelpers.h +46 -0
  372. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBProtocolHelpers.m +144 -0
  373. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBReflectionUtils.h +23 -0
  374. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBReflectionUtils.m +31 -0
  375. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBRunLoopSpinner.h +77 -0
  376. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBRunLoopSpinner.m +94 -0
  377. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBRuntimeUtils.h +79 -0
  378. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBRuntimeUtils.m +112 -0
  379. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBScreen.h +22 -0
  380. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBScreen.m +21 -0
  381. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBScreenshot.h +44 -0
  382. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBScreenshot.m +227 -0
  383. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBSettings.h +48 -0
  384. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBSettings.m +42 -0
  385. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBTVNavigationTracker-Private.h +27 -0
  386. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBTVNavigationTracker.h +52 -0
  387. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBTVNavigationTracker.m +142 -0
  388. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBUnattachedAppLauncher.h +26 -0
  389. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBUnattachedAppLauncher.m +21 -0
  390. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBW3CActionsHelpers.h +42 -0
  391. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBW3CActionsHelpers.m +119 -0
  392. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.h +19 -0
  393. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.m +885 -0
  394. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBWebServerParams.h +22 -0
  395. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBWebServerParams.m +23 -0
  396. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCAXClientProxy.h +49 -0
  397. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCAXClientProxy.m +119 -0
  398. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCTestDaemonsProxy.h +45 -0
  399. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCTestDaemonsProxy.m +359 -0
  400. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCodeCompatibility.h +80 -0
  401. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCodeCompatibility.m +99 -0
  402. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXMLGenerationOptions.h +45 -0
  403. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXMLGenerationOptions.m +25 -0
  404. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXPath-Private.h +56 -0
  405. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXPath.h +59 -0
  406. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXPath.m +979 -0
  407. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/LRUCache/LRUCache.h +66 -0
  408. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/LRUCache/LRUCache.m +146 -0
  409. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/LRUCache/LRUCacheNode.h +43 -0
  410. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/LRUCache/LRUCacheNode.m +51 -0
  411. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/NSPredicate+FBFormat.h +42 -0
  412. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/NSPredicate+FBFormat.m +69 -0
  413. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/XCTestPrivateSymbols.h +78 -0
  414. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/XCTestPrivateSymbols.m +107 -0
  415. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/XCUIApplicationProcessDelay.h +37 -0
  416. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/XCUIApplicationProcessDelay.m +83 -0
  417. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaAsyncSocket/GCDAsyncSocket.h +1220 -0
  418. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaAsyncSocket/GCDAsyncSocket.m +8812 -0
  419. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaAsyncSocket/GCDAsyncUdpSocket.h +1036 -0
  420. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaAsyncSocket/GCDAsyncUdpSocket.m +5868 -0
  421. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Categories/DDNumber.h +12 -0
  422. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Categories/DDNumber.m +88 -0
  423. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Categories/DDRange.h +56 -0
  424. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Categories/DDRange.m +106 -0
  425. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPConnection.h +107 -0
  426. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPConnection.m +2238 -0
  427. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPLogging.h +122 -0
  428. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPMessage.h +53 -0
  429. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPMessage.m +357 -0
  430. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPResponse.h +149 -0
  431. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPServer.h +126 -0
  432. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPServer.m +372 -0
  433. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/LICENSE +18 -0
  434. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Responses/HTTPDataResponse.h +13 -0
  435. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Responses/HTTPDataResponse.m +83 -0
  436. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Responses/HTTPErrorResponse.h +9 -0
  437. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Responses/HTTPErrorResponse.m +40 -0
  438. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/HTTPResponseProxy.h +13 -0
  439. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/HTTPResponseProxy.m +84 -0
  440. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/LICENSE +19 -0
  441. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/Route.h +18 -0
  442. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/Route.m +11 -0
  443. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RouteRequest.h +16 -0
  444. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RouteRequest.m +50 -0
  445. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RouteResponse.h +20 -0
  446. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RouteResponse.m +66 -0
  447. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingConnection.h +5 -0
  448. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingConnection.m +142 -0
  449. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingHTTPServer.h +55 -0
  450. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingHTTPServer.m +303 -0
  451. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/WebDriverAgentLib.h +59 -0
  452. package/drivers/ios/WebDriverAgent/WebDriverAgentRunner/Info.plist +30 -0
  453. package/drivers/ios/WebDriverAgent/WebDriverAgentRunner/UITestingUITests.m +58 -0
  454. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/AppDelegate.h +14 -0
  455. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/AppDelegate.m +38 -0
  456. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBAlertViewController.h +14 -0
  457. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBAlertViewController.m +82 -0
  458. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBNavigationController.h +12 -0
  459. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBNavigationController.m +25 -0
  460. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBScrollViewController.h +13 -0
  461. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBScrollViewController.m +39 -0
  462. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBTableDataSource.h +16 -0
  463. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBTableDataSource.m +35 -0
  464. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/SceneDelegate.h +20 -0
  465. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/SceneDelegate.m +48 -0
  466. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchSpotView.h +17 -0
  467. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchSpotView.m +28 -0
  468. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchViewController.h +23 -0
  469. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchViewController.m +29 -0
  470. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchableView.h +29 -0
  471. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchableView.m +108 -0
  472. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/ViewController.h +12 -0
  473. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/ViewController.m +88 -0
  474. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Info.plist +71 -0
  475. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Resources/Base.lproj/Main.storyboard +620 -0
  476. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/main.m +15 -0
  477. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBAlertTests.m +194 -0
  478. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBAutoAlertsHandlerTests.m +73 -0
  479. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBConfigurationTests.m +38 -0
  480. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBElementAttributeTests.m +264 -0
  481. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBElementSwipingTests.m +127 -0
  482. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBElementVisibilityTests.m +73 -0
  483. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBFailureProofTestCaseTests.m +41 -0
  484. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBForceTouchTests.m +85 -0
  485. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBImageProcessorTests.m +82 -0
  486. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBIntegrationTestCase.h +76 -0
  487. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBIntegrationTestCase.m +140 -0
  488. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBKeyboardTests.m +61 -0
  489. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBPasteboardTests.m +91 -0
  490. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBPickerWheelSelectTests.m +55 -0
  491. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBSafariAlertTests.m +73 -0
  492. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBScreenTests.m +31 -0
  493. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBScrollingTests.m +126 -0
  494. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBSessionIntegrationTests.m +131 -0
  495. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBTapTest.m +103 -0
  496. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBTestMacros.h +33 -0
  497. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBTypingTest.m +68 -0
  498. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBVideoRecordingTests.m +64 -0
  499. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBW3CMultiTouchActionsIntegrationTests.m +124 -0
  500. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBW3CTouchActionsIntegrationTests.m +491 -0
  501. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBW3CTypeActionsTests.m +184 -0
  502. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBXPathIntegrationTests.m +157 -0
  503. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/Info.plist +24 -0
  504. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCElementSnapshotHelperTests.m +211 -0
  505. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCElementSnapshotHitPointTests.m +30 -0
  506. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIApplicationHelperTests.m +162 -0
  507. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIDeviceHealthCheckTests.m +27 -0
  508. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIDeviceHelperTests.m +220 -0
  509. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIDeviceRotationTests.m +84 -0
  510. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIElementAttributesTests.m +248 -0
  511. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIElementFBFindTests.m +472 -0
  512. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIElementHelperIntegrationTests.m +51 -0
  513. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCElementSnapshotDouble.h +16 -0
  514. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCElementSnapshotDouble.m +110 -0
  515. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCUIApplicationDouble.h +17 -0
  516. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCUIApplicationDouble.m +66 -0
  517. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCUIElementDouble.h +51 -0
  518. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCUIElementDouble.m +104 -0
  519. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBClassChainTests.m +313 -0
  520. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBConfigurationTests.m +60 -0
  521. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBElementCacheTests.m +124 -0
  522. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBElementTypeTransformerTests.m +45 -0
  523. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBElementUtilitiesTests.m +36 -0
  524. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBErrorBuilderTests.m +61 -0
  525. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBExceptionHandlerTests.m +59 -0
  526. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBLRUCacheTests.m +127 -0
  527. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBMathUtilsTests.m +113 -0
  528. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBProtocolHelpersTests.m +81 -0
  529. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBRouteTests.m +129 -0
  530. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBRunLoopSpinnerTests.m +98 -0
  531. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBRuntimeUtilsTests.m +45 -0
  532. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBSDKVersionTests.m +66 -0
  533. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBSessionTests.m +67 -0
  534. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBXMLSafeStringTests.m +35 -0
  535. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBXPathTests.m +155 -0
  536. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Info.plist +24 -0
  537. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/NSDictionaryFBUtf8SafeTests.m +34 -0
  538. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/NSExpressionFBFormatTests.m +60 -0
  539. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/NSPredicateFBFormatTests.m +72 -0
  540. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/XCUIElementHelpersTests.m +50 -0
  541. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests_tvOS/Doubles/XCUIElementDouble.h +46 -0
  542. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests_tvOS/Doubles/XCUIElementDouble.m +80 -0
  543. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests_tvOS/FBTVNavigationTrackerTests.m +86 -0
  544. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests_tvOS/Info.plist +24 -0
  545. package/drivers/ios/WebDriverAgent/eslint.config.mjs +13 -0
  546. package/drivers/ios/WebDriverAgent/index.ts +7 -0
  547. package/drivers/ios/WebDriverAgent/lib/check-dependencies.ts +34 -0
  548. package/drivers/ios/WebDriverAgent/lib/constants.ts +18 -0
  549. package/drivers/ios/WebDriverAgent/lib/logger.ts +3 -0
  550. package/drivers/ios/WebDriverAgent/lib/no-session-proxy.ts +25 -0
  551. package/drivers/ios/WebDriverAgent/lib/types.ts +139 -0
  552. package/drivers/ios/WebDriverAgent/lib/utils.ts +342 -0
  553. package/drivers/ios/WebDriverAgent/lib/webdriveragent.ts +715 -0
  554. package/drivers/ios/WebDriverAgent/lib/xcodebuild.ts +488 -0
  555. package/drivers/ios/WebDriverAgent/package.json +102 -0
  556. package/drivers/ios/WebDriverAgent/test/functional/desired.ts +7 -0
  557. package/drivers/ios/WebDriverAgent/test/functional/helpers/simulator.ts +34 -0
  558. package/drivers/ios/WebDriverAgent/test/functional/webdriveragent-e2e-specs.ts +119 -0
  559. package/drivers/ios/WebDriverAgent/test/unit/utils-specs.ts +157 -0
  560. package/drivers/ios/WebDriverAgent/test/unit/webdriveragent-specs.ts +446 -0
  561. package/drivers/ios/WebDriverAgent/tsconfig.json +16 -0
  562. package/package.json +16 -0
@@ -0,0 +1,705 @@
1
+ /**
2
+ * Copyright (c) 2015-present, Facebook, Inc.
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under the BSD-style license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
9
+ #import "FBElementCommands.h"
10
+
11
+ #import "FBConfiguration.h"
12
+ #import "FBKeyboard.h"
13
+ #import "FBRoute.h"
14
+ #import "FBRouteRequest.h"
15
+ #import "FBRunLoopSpinner.h"
16
+ #import "FBElementCache.h"
17
+ #import "FBErrorBuilder.h"
18
+ #import "FBSession.h"
19
+ #import "FBElementUtils.h"
20
+ #import "FBMacros.h"
21
+ #import "FBMathUtils.h"
22
+ #import "FBRuntimeUtils.h"
23
+ #import "NSPredicate+FBFormat.h"
24
+ #import "XCTestPrivateSymbols.h"
25
+ #import "XCUICoordinate.h"
26
+ #import "XCUIDevice.h"
27
+ #import "XCUIElement+FBIsVisible.h"
28
+ #import "XCUIElement+FBPickerWheel.h"
29
+ #import "XCUIElement+FBScrolling.h"
30
+ #import "XCUIElement+FBForceTouch.h"
31
+ #import "XCUIElement+FBSwiping.h"
32
+ #import "XCUIElement+FBTyping.h"
33
+ #import "XCUIElement+FBUtilities.h"
34
+ #import "XCUIElement+FBWebDriverAttributes.h"
35
+ #import "XCUIElement+FBTVFocuse.h"
36
+ #import "XCUIElement+FBResolve.h"
37
+ #import "XCUIElement+FBUID.h"
38
+ #import "FBElementTypeTransformer.h"
39
+ #import "XCUIElement.h"
40
+ #import "XCUIElementQuery.h"
41
+ #import "FBXCodeCompatibility.h"
42
+
43
+ @interface FBElementCommands ()
44
+ @end
45
+
46
+ @implementation FBElementCommands
47
+
48
+ #pragma mark - <FBCommandHandler>
49
+
50
+ + (NSArray *)routes
51
+ {
52
+ return
53
+ @[
54
+ [[FBRoute GET:@"/window/size"] respondWithTarget:self action:@selector(handleGetWindowSize:)],
55
+ [[FBRoute GET:@"/window/rect"] respondWithTarget:self action:@selector(handleGetWindowRect:)],
56
+ [[FBRoute GET:@"/window/size"].withoutSession respondWithTarget:self action:@selector(handleGetWindowSize:)],
57
+ [[FBRoute GET:@"/element/:uuid/enabled"] respondWithTarget:self action:@selector(handleGetEnabled:)],
58
+ [[FBRoute GET:@"/element/:uuid/rect"] respondWithTarget:self action:@selector(handleGetRect:)],
59
+ [[FBRoute GET:@"/element/:uuid/attribute/:name"] respondWithTarget:self action:@selector(handleGetAttribute:)],
60
+ [[FBRoute GET:@"/element/:uuid/text"] respondWithTarget:self action:@selector(handleGetText:)],
61
+ [[FBRoute GET:@"/element/:uuid/displayed"] respondWithTarget:self action:@selector(handleGetDisplayed:)],
62
+ [[FBRoute GET:@"/element/:uuid/selected"] respondWithTarget:self action:@selector(handleGetSelected:)],
63
+ [[FBRoute GET:@"/element/:uuid/name"] respondWithTarget:self action:@selector(handleGetName:)],
64
+ [[FBRoute POST:@"/element/:uuid/value"] respondWithTarget:self action:@selector(handleSetValue:)],
65
+ [[FBRoute POST:@"/element/:uuid/click"] respondWithTarget:self action:@selector(handleClick:)],
66
+ [[FBRoute POST:@"/element/:uuid/clear"] respondWithTarget:self action:@selector(handleClear:)],
67
+ // W3C element screenshot
68
+ [[FBRoute GET:@"/element/:uuid/screenshot"] respondWithTarget:self action:@selector(handleElementScreenshot:)],
69
+ // JSONWP element screenshot
70
+ [[FBRoute GET:@"/screenshot/:uuid"] respondWithTarget:self action:@selector(handleElementScreenshot:)],
71
+ [[FBRoute GET:@"/wda/element/:uuid/accessible"] respondWithTarget:self action:@selector(handleGetAccessible:)],
72
+ [[FBRoute GET:@"/wda/element/:uuid/accessibilityContainer"] respondWithTarget:self action:@selector(handleGetIsAccessibilityContainer:)],
73
+ #if TARGET_OS_TV
74
+ [[FBRoute GET:@"/element/:uuid/attribute/focused"] respondWithTarget:self action:@selector(handleGetFocused:)],
75
+ [[FBRoute POST:@"/wda/element/:uuid/focuse"] respondWithTarget:self action:@selector(handleFocuse:)],
76
+ #else
77
+ [[FBRoute POST:@"/wda/element/:uuid/swipe"] respondWithTarget:self action:@selector(handleSwipe:)],
78
+ [[FBRoute POST:@"/wda/swipe"] respondWithTarget:self action:@selector(handleSwipe:)],
79
+
80
+ [[FBRoute POST:@"/wda/element/:uuid/pinch"] respondWithTarget:self action:@selector(handlePinch:)],
81
+ [[FBRoute POST:@"/wda/pinch"] respondWithTarget:self action:@selector(handlePinch:)],
82
+
83
+ [[FBRoute POST:@"/wda/element/:uuid/rotate"] respondWithTarget:self action:@selector(handleRotate:)],
84
+ [[FBRoute POST:@"/wda/rotate"] respondWithTarget:self action:@selector(handleRotate:)],
85
+
86
+ [[FBRoute POST:@"/wda/element/:uuid/doubleTap"] respondWithTarget:self action:@selector(handleDoubleTap:)],
87
+ [[FBRoute POST:@"/wda/doubleTap"] respondWithTarget:self action:@selector(handleDoubleTap:)],
88
+
89
+ [[FBRoute POST:@"/wda/element/:uuid/twoFingerTap"] respondWithTarget:self action:@selector(handleTwoFingerTap:)],
90
+ [[FBRoute POST:@"/wda/twoFingerTap"] respondWithTarget:self action:@selector(handleTwoFingerTap:)],
91
+
92
+ [[FBRoute POST:@"/wda/element/:uuid/tapWithNumberOfTaps"] respondWithTarget:self
93
+ action:@selector(handleTapWithNumberOfTaps:)],
94
+ [[FBRoute POST:@"/wda/tapWithNumberOfTaps"] respondWithTarget:self
95
+ action:@selector(handleTapWithNumberOfTaps:)],
96
+
97
+ [[FBRoute POST:@"/wda/element/:uuid/touchAndHold"] respondWithTarget:self action:@selector(handleTouchAndHold:)],
98
+ [[FBRoute POST:@"/wda/touchAndHold"] respondWithTarget:self action:@selector(handleTouchAndHold:)],
99
+
100
+ [[FBRoute POST:@"/wda/element/:uuid/scroll"] respondWithTarget:self action:@selector(handleScroll:)],
101
+ [[FBRoute POST:@"/wda/scroll"] respondWithTarget:self action:@selector(handleScroll:)],
102
+
103
+ [[FBRoute POST:@"/wda/element/:uuid/scrollTo"] respondWithTarget:self action:@selector(handleScrollTo:)],
104
+
105
+ [[FBRoute POST:@"/wda/element/:uuid/dragfromtoforduration"] respondWithTarget:self action:@selector(handleDrag:)],
106
+ [[FBRoute POST:@"/wda/dragfromtoforduration"] respondWithTarget:self action:@selector(handleDrag:)],
107
+
108
+ [[FBRoute POST:@"/wda/element/:uuid/pressAndDragWithVelocity"] respondWithTarget:self action:@selector(handlePressAndDragWithVelocity:)],
109
+ [[FBRoute POST:@"/wda/pressAndDragWithVelocity"] respondWithTarget:self action:@selector(handlePressAndDragCoordinateWithVelocity:)],
110
+
111
+ [[FBRoute POST:@"/wda/element/:uuid/forceTouch"] respondWithTarget:self action:@selector(handleForceTouch:)],
112
+ [[FBRoute POST:@"/wda/forceTouch"] respondWithTarget:self action:@selector(handleForceTouch:)],
113
+
114
+ [[FBRoute POST:@"/wda/element/:uuid/tap"] respondWithTarget:self action:@selector(handleTap:)],
115
+ [[FBRoute POST:@"/wda/tap"] respondWithTarget:self action:@selector(handleTap:)],
116
+
117
+ [[FBRoute POST:@"/wda/pickerwheel/:uuid/select"] respondWithTarget:self action:@selector(handleWheelSelect:)],
118
+ #endif
119
+ [[FBRoute POST:@"/wda/keys"] respondWithTarget:self action:@selector(handleKeys:)],
120
+ ];
121
+ }
122
+
123
+
124
+ #pragma mark - Commands
125
+
126
+ + (id<FBResponsePayload>)handleGetEnabled:(FBRouteRequest *)request
127
+ {
128
+ FBElementCache *elementCache = request.session.elementCache;
129
+ XCUIElement *element = [elementCache elementForUUID:(NSString *)request.parameters[@"uuid"]];
130
+ return FBResponseWithObject(@(element.isWDEnabled));
131
+ }
132
+
133
+ + (id<FBResponsePayload>)handleGetRect:(FBRouteRequest *)request
134
+ {
135
+ FBElementCache *elementCache = request.session.elementCache;
136
+ XCUIElement *element = [elementCache elementForUUID:(NSString *)request.parameters[@"uuid"]];
137
+ return FBResponseWithObject(element.wdRect);
138
+ }
139
+
140
+ + (id<FBResponsePayload>)handleGetAttribute:(FBRouteRequest *)request
141
+ {
142
+ FBElementCache *elementCache = request.session.elementCache;
143
+ NSString *attributeName = request.parameters[@"name"];
144
+ XCUIElement *element = [elementCache elementForUUID:(NSString *)request.parameters[@"uuid"]];
145
+ id attributeValue = [element fb_valueForWDAttributeName:attributeName];
146
+ return FBResponseWithObject(attributeValue ?: [NSNull null]);
147
+ }
148
+
149
+ + (id<FBResponsePayload>)handleGetText:(FBRouteRequest *)request
150
+ {
151
+ FBElementCache *elementCache = request.session.elementCache;
152
+ XCUIElement *element = [elementCache elementForUUID:(NSString *)request.parameters[@"uuid"]];
153
+ // https://github.com/appium/appium-xcuitest-driver/issues/2552
154
+ id<FBXCElementSnapshot> snapshot = [element fb_customSnapshot];
155
+ FBXCElementSnapshotWrapper *wrappedSnapshot = [FBXCElementSnapshotWrapper ensureWrapped:snapshot];
156
+ id text = FBFirstNonEmptyValue(wrappedSnapshot.wdValue, wrappedSnapshot.wdLabel);
157
+ return FBResponseWithObject(text ?: @"");
158
+ }
159
+
160
+ + (id<FBResponsePayload>)handleGetDisplayed:(FBRouteRequest *)request
161
+ {
162
+ FBElementCache *elementCache = request.session.elementCache;
163
+ XCUIElement *element = [elementCache elementForUUID:(NSString *)request.parameters[@"uuid"]];
164
+ return FBResponseWithObject(@(element.isWDVisible));
165
+ }
166
+
167
+ + (id<FBResponsePayload>)handleGetAccessible:(FBRouteRequest *)request
168
+ {
169
+ FBElementCache *elementCache = request.session.elementCache;
170
+ XCUIElement *element = [elementCache elementForUUID:(NSString *)request.parameters[@"uuid"]];
171
+ return FBResponseWithObject(@(element.isWDAccessible));
172
+ }
173
+
174
+ + (id<FBResponsePayload>)handleGetIsAccessibilityContainer:(FBRouteRequest *)request
175
+ {
176
+ FBElementCache *elementCache = request.session.elementCache;
177
+ XCUIElement *element = [elementCache elementForUUID:(NSString *)request.parameters[@"uuid"]];
178
+ return FBResponseWithObject(@(element.isWDAccessibilityContainer));
179
+ }
180
+
181
+ + (id<FBResponsePayload>)handleGetName:(FBRouteRequest *)request
182
+ {
183
+ FBElementCache *elementCache = request.session.elementCache;
184
+ XCUIElement *element = [elementCache elementForUUID:(NSString *)request.parameters[@"uuid"]];
185
+ return FBResponseWithObject(element.wdType);
186
+ }
187
+
188
+ + (id<FBResponsePayload>)handleGetSelected:(FBRouteRequest *)request
189
+ {
190
+ FBElementCache *elementCache = request.session.elementCache;
191
+ XCUIElement *element = [elementCache elementForUUID:(NSString *)request.parameters[@"uuid"]];
192
+ return FBResponseWithObject(@(element.wdSelected));
193
+ }
194
+
195
+ + (id<FBResponsePayload>)handleSetValue:(FBRouteRequest *)request
196
+ {
197
+ FBElementCache *elementCache = request.session.elementCache;
198
+ XCUIElement *element = [elementCache elementForUUID:(NSString *)request.parameters[@"uuid"]
199
+ checkStaleness:YES];
200
+ id value = request.arguments[@"value"] ?: request.arguments[@"text"];
201
+ if (!value) {
202
+ return FBResponseWithStatus([FBCommandStatus invalidArgumentErrorWithMessage:@"Neither 'value' nor 'text' parameter is provided" traceback:nil]);
203
+ }
204
+ NSString *textToType = [value isKindOfClass:NSArray.class]
205
+ ? [value componentsJoinedByString:@""]
206
+ : value;
207
+ XCUIElementType elementType = [element elementType];
208
+ #if !TARGET_OS_TV
209
+ if (elementType == XCUIElementTypePickerWheel) {
210
+ [element adjustToPickerWheelValue:textToType];
211
+ return FBResponseWithOK();
212
+ }
213
+ #endif
214
+ if (elementType == XCUIElementTypeSlider) {
215
+ CGFloat sliderValue = textToType.floatValue;
216
+ if (sliderValue < 0.0 || sliderValue > 1.0 ) {
217
+ return FBResponseWithStatus([FBCommandStatus invalidArgumentErrorWithMessage:@"Value of slider should be in 0..1 range" traceback:nil]);
218
+ }
219
+ [element adjustToNormalizedSliderPosition:sliderValue];
220
+ return FBResponseWithOK();
221
+ }
222
+ NSUInteger frequency = (NSUInteger)[request.arguments[@"frequency"] longLongValue] ?: [FBConfiguration maxTypingFrequency];
223
+ NSError *error = nil;
224
+ if (![element fb_typeText:textToType
225
+ shouldClear:NO
226
+ frequency:frequency
227
+ error:&error]) {
228
+ return FBResponseWithStatus([FBCommandStatus invalidElementStateErrorWithMessage:error.description traceback:nil]);
229
+ }
230
+ return FBResponseWithOK();
231
+ }
232
+
233
+ + (id<FBResponsePayload>)handleClick:(FBRouteRequest *)request
234
+ {
235
+ FBElementCache *elementCache = request.session.elementCache;
236
+ XCUIElement *element = [elementCache elementForUUID:(NSString *)request.parameters[@"uuid"] checkStaleness:YES];
237
+ #if TARGET_OS_IOS
238
+ [element tap];
239
+ #elif TARGET_OS_TV
240
+ NSError *error = nil;
241
+ if (![element fb_selectWithError:&error]) {
242
+ return FBResponseWithStatus([FBCommandStatus invalidElementStateErrorWithMessage:error.description traceback:nil]);
243
+ }
244
+ #endif
245
+ return FBResponseWithOK();
246
+ }
247
+
248
+ + (id<FBResponsePayload>)handleClear:(FBRouteRequest *)request
249
+ {
250
+ FBElementCache *elementCache = request.session.elementCache;
251
+ XCUIElement *element = [elementCache elementForUUID:(NSString *)request.parameters[@"uuid"]];
252
+ NSError *error;
253
+ if (![element fb_clearTextWithError:&error]) {
254
+ return FBResponseWithStatus([FBCommandStatus invalidElementStateErrorWithMessage:error.description traceback:nil]);
255
+ }
256
+ return FBResponseWithOK();
257
+ }
258
+
259
+ #if TARGET_OS_TV
260
+ + (id<FBResponsePayload>)handleGetFocused:(FBRouteRequest *)request
261
+ {
262
+ // `BOOL isFocused = [elementCache elementForUUID:request.parameters[@"uuid"]];`
263
+ // returns wrong true/false after moving focus by key up/down, for example.
264
+ // Thus, ensure the focus compares the status with `fb_focusedElement`.
265
+ BOOL isFocused = NO;
266
+ XCUIElement *focusedElement = request.session.activeApplication.fb_focusedElement;
267
+ if (focusedElement != nil) {
268
+ FBElementCache *elementCache = request.session.elementCache;
269
+ BOOL useNativeCachingStrategy = request.session.useNativeCachingStrategy;
270
+ NSString *focusedUUID = [elementCache storeElement:(useNativeCachingStrategy
271
+ ? focusedElement
272
+ : [focusedElement fb_stableInstanceWithUid:focusedElement.fb_uid])];
273
+ focusedElement.lastSnapshot = nil;
274
+ if (focusedUUID && [focusedUUID isEqualToString:(id)request.parameters[@"uuid"]]) {
275
+ isFocused = YES;
276
+ }
277
+ }
278
+
279
+ return FBResponseWithObject(@(isFocused));
280
+ }
281
+
282
+ + (id<FBResponsePayload>)handleFocuse:(FBRouteRequest *)request
283
+ {
284
+ FBElementCache *elementCache = request.session.elementCache;
285
+ XCUIElement *element = [elementCache elementForUUID:(NSString *)request.parameters[@"uuid"]];
286
+ NSError *error;
287
+ if (![element fb_setFocusWithError:&error]) {
288
+ return FBResponseWithStatus([FBCommandStatus invalidElementStateErrorWithMessage:error.description traceback:nil]);
289
+ }
290
+ return FBResponseWithStatus([FBCommandStatus okWithValue: FBDictionaryResponseWithElement(element, FBConfiguration.shouldUseCompactResponses)]);
291
+ }
292
+ #else
293
+ + (id<FBResponsePayload>)handleDoubleTap:(FBRouteRequest *)request
294
+ {
295
+ NSError *error;
296
+ id target = [self targetWithXyCoordinatesFromRequest:request error:&error];
297
+ if (nil == target) {
298
+ return FBResponseWithStatus([FBCommandStatus invalidArgumentErrorWithMessage:error.localizedDescription
299
+ traceback:nil]);
300
+ }
301
+ [target doubleTap];
302
+ return FBResponseWithOK();
303
+ }
304
+
305
+ + (id<FBResponsePayload>)handleTwoFingerTap:(FBRouteRequest *)request
306
+ {
307
+ XCUIElement *element = [self targetFromRequest:request];
308
+ [element twoFingerTap];
309
+ return FBResponseWithOK();
310
+ }
311
+
312
+ + (id<FBResponsePayload>)handleTapWithNumberOfTaps:(FBRouteRequest *)request
313
+ {
314
+ if (nil == request.arguments[@"numberOfTaps"] || nil == request.arguments[@"numberOfTouches"]) {
315
+ return FBResponseWithStatus([FBCommandStatus invalidArgumentErrorWithMessage:@"Both 'numberOfTaps' and 'numberOfTouches' arguments must be provided"
316
+ traceback:nil]);
317
+ }
318
+ XCUIElement *element = [self targetFromRequest:request];
319
+ [element tapWithNumberOfTaps:[request.arguments[@"numberOfTaps"] integerValue]
320
+ numberOfTouches:[request.arguments[@"numberOfTouches"] integerValue]];
321
+ return FBResponseWithOK();
322
+ }
323
+
324
+ + (id<FBResponsePayload>)handleTouchAndHold:(FBRouteRequest *)request
325
+ {
326
+ NSError *error;
327
+ id target = [self targetWithXyCoordinatesFromRequest:request error:&error];
328
+ if (nil == target) {
329
+ return FBResponseWithStatus([FBCommandStatus invalidArgumentErrorWithMessage:error.localizedDescription
330
+ traceback:nil]);
331
+ }
332
+ [target pressForDuration:[request.arguments[@"duration"] doubleValue]];
333
+ return FBResponseWithOK();
334
+ }
335
+
336
+ + (id<FBResponsePayload>)handlePressAndDragWithVelocity:(FBRouteRequest *)request
337
+ {
338
+ FBElementCache *elementCache = request.session.elementCache;
339
+ XCUIElement *element = [self targetFromRequest:request];
340
+ [element pressForDuration:[request.arguments[@"pressDuration"] doubleValue]
341
+ thenDragToElement:[elementCache elementForUUID:(NSString *)request.arguments[@"toElement"] checkStaleness:YES]
342
+ withVelocity:[request.arguments[@"velocity"] doubleValue]
343
+ thenHoldForDuration:[request.arguments[@"holdDuration"] doubleValue]];
344
+ return FBResponseWithOK();
345
+ }
346
+
347
+ + (id<FBResponsePayload>)handlePressAndDragCoordinateWithVelocity:(FBRouteRequest *)request
348
+ {
349
+ FBSession *session = request.session;
350
+ CGVector startOffset = CGVectorMake((CGFloat)[request.arguments[@"fromX"] doubleValue],
351
+ (CGFloat)[request.arguments[@"fromY"] doubleValue]);
352
+ XCUICoordinate *startCoordinate = [self.class gestureCoordinateWithOffset:startOffset
353
+ element:session.activeApplication];
354
+ CGVector endOffset = CGVectorMake((CGFloat)[request.arguments[@"toX"] doubleValue],
355
+ (CGFloat)[request.arguments[@"toY"] doubleValue]);
356
+ XCUICoordinate *endCoordinate = [self.class gestureCoordinateWithOffset:endOffset
357
+ element:session.activeApplication];
358
+ [startCoordinate pressForDuration:[request.arguments[@"pressDuration"] doubleValue]
359
+ thenDragToCoordinate:endCoordinate
360
+ withVelocity:[request.arguments[@"velocity"] doubleValue]
361
+ thenHoldForDuration:[request.arguments[@"holdDuration"] doubleValue]];
362
+ return FBResponseWithOK();
363
+ }
364
+
365
+ + (id<FBResponsePayload>)handleScroll:(FBRouteRequest *)request
366
+ {
367
+ XCUIElement *element = [self targetFromRequest:request];
368
+ // Using presence of arguments as a way to convey control flow seems like a pretty bad idea but it's
369
+ // what ios-driver did and sadly, we must copy them.
370
+ NSString *const name = request.arguments[@"name"];
371
+ if (name) {
372
+ XCUIElement *childElement = [[[[element.fb_query descendantsMatchingType:XCUIElementTypeAny]
373
+ matchingIdentifier:name] allElementsBoundByIndex] lastObject];
374
+ if (!childElement) {
375
+ return FBResponseWithStatus([FBCommandStatus noSuchElementErrorWithMessage:[NSString stringWithFormat:@"'%@' identifier didn't match any elements", name]
376
+ traceback:[NSString stringWithFormat:@"%@", NSThread.callStackSymbols]]);
377
+ }
378
+ return [self.class handleScrollElementToVisible:childElement withRequest:request];
379
+ }
380
+
381
+ NSString *const direction = request.arguments[@"direction"];
382
+ if (direction) {
383
+ NSString *const distanceString = request.arguments[@"distance"] ?: @"1.0";
384
+ CGFloat distance = (CGFloat)distanceString.doubleValue;
385
+ if ([direction isEqualToString:@"up"]) {
386
+ [element fb_scrollUpByNormalizedDistance:distance];
387
+ } else if ([direction isEqualToString:@"down"]) {
388
+ [element fb_scrollDownByNormalizedDistance:distance];
389
+ } else if ([direction isEqualToString:@"left"]) {
390
+ [element fb_scrollLeftByNormalizedDistance:distance];
391
+ } else if ([direction isEqualToString:@"right"]) {
392
+ [element fb_scrollRightByNormalizedDistance:distance];
393
+ }
394
+ return FBResponseWithOK();
395
+ }
396
+
397
+ NSString *const predicateString = request.arguments[@"predicateString"];
398
+ if (predicateString) {
399
+ NSPredicate *formattedPredicate = [NSPredicate fb_snapshotBlockPredicateWithPredicate:[NSPredicate
400
+ predicateWithFormat:predicateString]];
401
+ XCUIElement *childElement = [[[[element.fb_query descendantsMatchingType:XCUIElementTypeAny]
402
+ matchingPredicate:formattedPredicate] allElementsBoundByIndex] lastObject];
403
+ if (!childElement) {
404
+ return FBResponseWithStatus([FBCommandStatus noSuchElementErrorWithMessage:[NSString stringWithFormat:@"'%@' predicate didn't match any elements", predicateString]
405
+ traceback:[NSString stringWithFormat:@"%@", NSThread.callStackSymbols]]);
406
+ }
407
+ return [self.class handleScrollElementToVisible:childElement withRequest:request];
408
+ }
409
+
410
+ if (request.arguments[@"toVisible"]) {
411
+ return [self.class handleScrollElementToVisible:element withRequest:request];
412
+ }
413
+ return FBResponseWithStatus([FBCommandStatus invalidArgumentErrorWithMessage:@"Unsupported scroll type" traceback:nil]);
414
+ }
415
+
416
+ + (id<FBResponsePayload>)handleScrollTo:(FBRouteRequest *)request
417
+ {
418
+ FBElementCache *elementCache = request.session.elementCache;
419
+ XCUIElement *element = [elementCache elementForUUID:(NSString *)request.parameters[@"uuid"]];
420
+ NSError *error;
421
+ return [element fb_nativeScrollToVisibleWithError:&error]
422
+ ? FBResponseWithOK()
423
+ : FBResponseWithStatus([FBCommandStatus invalidElementStateErrorWithMessage:error.description
424
+ traceback:nil]);
425
+ }
426
+
427
+ + (id<FBResponsePayload>)handleDrag:(FBRouteRequest *)request
428
+ {
429
+ XCUIElement *target = [self targetFromRequest:request];
430
+ CGVector startOffset = CGVectorMake([request.arguments[@"fromX"] doubleValue],
431
+ [request.arguments[@"fromY"] doubleValue]);
432
+ XCUICoordinate *startCoordinate = [self.class gestureCoordinateWithOffset:startOffset element:target];
433
+ CGVector endOffset = CGVectorMake([request.arguments[@"toX"] doubleValue],
434
+ [request.arguments[@"toY"] doubleValue]);
435
+ XCUICoordinate *endCoordinate = [self.class gestureCoordinateWithOffset:endOffset element:target];
436
+ NSTimeInterval duration = [request.arguments[@"duration"] doubleValue];
437
+ [startCoordinate pressForDuration:duration thenDragToCoordinate:endCoordinate];
438
+ return FBResponseWithOK();
439
+ }
440
+
441
+ + (id<FBResponsePayload>)handleSwipe:(FBRouteRequest *)request
442
+ {
443
+ NSString *const direction = request.arguments[@"direction"];
444
+ if (!direction) {
445
+ return FBResponseWithStatus([FBCommandStatus invalidArgumentErrorWithMessage:@"Missing 'direction' parameter" traceback:nil]);
446
+ }
447
+ NSArray<NSString *> *supportedDirections = @[@"up", @"down", @"left", @"right"];
448
+ if (![supportedDirections containsObject:direction.lowercaseString]) {
449
+ NSString *message = [NSString stringWithFormat:@"Unsupported swipe direction '%@'. Only the following directions are supported: %@", direction, supportedDirections];
450
+ return FBResponseWithStatus([FBCommandStatus invalidArgumentErrorWithMessage:message
451
+ traceback:nil]);
452
+ }
453
+ NSError *error;
454
+ id target = [self targetWithXyCoordinatesFromRequest:request error:&error];
455
+ if (nil == target) {
456
+ return FBResponseWithStatus([FBCommandStatus invalidArgumentErrorWithMessage:error.localizedDescription
457
+ traceback:nil]);
458
+ }
459
+ [target fb_swipeWithDirection:direction velocity:request.arguments[@"velocity"]];
460
+ return FBResponseWithOK();
461
+ }
462
+
463
+ + (id<FBResponsePayload>)handleTap:(FBRouteRequest *)request
464
+ {
465
+ NSError *error;
466
+ id target = [self targetWithXyCoordinatesFromRequest:request error:&error];
467
+ if (nil == target) {
468
+ return FBResponseWithStatus([FBCommandStatus invalidArgumentErrorWithMessage:error.localizedDescription
469
+ traceback:nil]);
470
+ }
471
+ [target tap];
472
+ return FBResponseWithOK();
473
+ }
474
+
475
+ + (id<FBResponsePayload>)handlePinch:(FBRouteRequest *)request
476
+ {
477
+ XCUIElement *element = [self targetFromRequest:request];
478
+ CGFloat scale = (CGFloat)[request.arguments[@"scale"] doubleValue];
479
+ CGFloat velocity = (CGFloat)[request.arguments[@"velocity"] doubleValue];
480
+ [element pinchWithScale:scale velocity:velocity];
481
+ return FBResponseWithOK();
482
+ }
483
+
484
+ + (id<FBResponsePayload>)handleRotate:(FBRouteRequest *)request
485
+ {
486
+ XCUIElement *element = [self targetFromRequest:request];
487
+ CGFloat rotation = (CGFloat)[request.arguments[@"rotation"] doubleValue];
488
+ CGFloat velocity = (CGFloat)[request.arguments[@"velocity"] doubleValue];
489
+ [element rotate:rotation withVelocity:velocity];
490
+ return FBResponseWithOK();
491
+ }
492
+
493
+ + (id<FBResponsePayload>)handleForceTouch:(FBRouteRequest *)request
494
+ {
495
+ XCUIElement *element = [self targetFromRequest:request];
496
+ NSNumber *pressure = request.arguments[@"pressure"];
497
+ NSNumber *duration = request.arguments[@"duration"];
498
+ NSNumber *x = request.arguments[@"x"];
499
+ NSNumber *y = request.arguments[@"y"];
500
+ NSValue *hitPoint = (nil == x || nil == y)
501
+ ? nil
502
+ : [NSValue valueWithCGPoint:CGPointMake((CGFloat)[x doubleValue], (CGFloat)[y doubleValue])];
503
+ NSError *error;
504
+ BOOL didSucceed = [element fb_forceTouchCoordinate:hitPoint
505
+ pressure:pressure
506
+ duration:duration
507
+ error:&error];
508
+ return didSucceed
509
+ ? FBResponseWithOK()
510
+ : FBResponseWithStatus([FBCommandStatus invalidElementStateErrorWithMessage:error.description
511
+ traceback:nil]);
512
+ }
513
+ #endif
514
+
515
+ + (id<FBResponsePayload>)handleKeys:(FBRouteRequest *)request
516
+ {
517
+ NSString *textToType = [request.arguments[@"value"] componentsJoinedByString:@""];
518
+ NSUInteger frequency = [request.arguments[@"frequency"] unsignedIntegerValue] ?: [FBConfiguration maxTypingFrequency];
519
+ NSError *error;
520
+ if (!FBTypeText(textToType, frequency, &error)) {
521
+ return FBResponseWithStatus([FBCommandStatus invalidElementStateErrorWithMessage:error.description
522
+ traceback:nil]);
523
+ }
524
+ return FBResponseWithOK();
525
+ }
526
+
527
+ + (id<FBResponsePayload>)handleGetWindowSize:(FBRouteRequest *)request
528
+ {
529
+ XCUIApplication *app = request.session.activeApplication ?: XCUIApplication.fb_activeApplication;
530
+
531
+ CGRect frame = app.wdFrame;
532
+ #if TARGET_OS_TV
533
+ CGSize screenSize = frame.size;
534
+ #else
535
+ CGSize screenSize = FBAdjustDimensionsForApplication(frame.size, app.interfaceOrientation);
536
+ #endif
537
+ return FBResponseWithObject(@{
538
+ @"width": @(screenSize.width),
539
+ @"height": @(screenSize.height),
540
+ });
541
+ }
542
+
543
+
544
+ + (id<FBResponsePayload>)handleGetWindowRect:(FBRouteRequest *)request
545
+ {
546
+ XCUIApplication *app = request.session.activeApplication ?: XCUIApplication.fb_activeApplication;
547
+
548
+ CGRect frame = app.wdFrame;
549
+ #if TARGET_OS_TV
550
+ CGSize screenSize = frame.size;
551
+ #else
552
+ CGSize screenSize = FBAdjustDimensionsForApplication(frame.size, app.interfaceOrientation);
553
+ #endif
554
+ return FBResponseWithObject(@{
555
+ @"x": @(frame.origin.x),
556
+ @"y": @(frame.origin.y),
557
+ @"width": @(screenSize.width),
558
+ @"height": @(screenSize.height),
559
+ });
560
+ }
561
+
562
+ + (id<FBResponsePayload>)handleElementScreenshot:(FBRouteRequest *)request
563
+ {
564
+ @autoreleasepool {
565
+ FBElementCache *elementCache = request.session.elementCache;
566
+ XCUIElement *element = [elementCache elementForUUID:(NSString *)request.parameters[@"uuid"]
567
+ checkStaleness:YES];
568
+ NSData *screenshotData = nil;
569
+ @autoreleasepool {
570
+ screenshotData = [element.screenshot PNGRepresentation];
571
+ if (nil == screenshotData) {
572
+ NSString *errMsg = [NSString stringWithFormat:@"Cannot take a screenshot of %@", element.description];
573
+ return FBResponseWithStatus([FBCommandStatus unableToCaptureScreenErrorWithMessage:errMsg
574
+ traceback:nil]);
575
+ }
576
+ }
577
+ NSString *screenshot = [screenshotData base64EncodedStringWithOptions:0];
578
+ screenshotData = nil;
579
+ return FBResponseWithObject(screenshot);
580
+ }
581
+ }
582
+
583
+
584
+ #if !TARGET_OS_TV
585
+ static const CGFloat DEFAULT_PICKER_OFFSET = (CGFloat)0.2;
586
+ static const NSInteger DEFAULT_MAX_PICKER_ATTEMPTS = 25;
587
+
588
+
589
+ + (id<FBResponsePayload>)handleWheelSelect:(FBRouteRequest *)request
590
+ {
591
+ FBElementCache *elementCache = request.session.elementCache;
592
+ XCUIElement *element = [elementCache elementForUUID:(NSString *)request.parameters[@"uuid"]
593
+ checkStaleness:YES];
594
+ if ([element elementType] != XCUIElementTypePickerWheel) {
595
+ NSString *errMsg = [NSString stringWithFormat:@"The element is expected to be a valid Picker Wheel control. '%@' was given instead", element.wdType];
596
+ return FBResponseWithStatus([FBCommandStatus invalidArgumentErrorWithMessage:errMsg
597
+ traceback:[NSString stringWithFormat:@"%@", NSThread.callStackSymbols]]);
598
+ }
599
+ NSString* order = [request.arguments[@"order"] lowercaseString];
600
+ CGFloat offset = DEFAULT_PICKER_OFFSET;
601
+ if (request.arguments[@"offset"]) {
602
+ offset = (CGFloat)[request.arguments[@"offset"] doubleValue];
603
+ if (offset <= 0.0 || offset > 0.5) {
604
+ NSString *errMsg = [NSString stringWithFormat:@"'offset' value is expected to be in range (0.0, 0.5]. '%@' was given instead", request.arguments[@"offset"]];
605
+ return FBResponseWithStatus([FBCommandStatus invalidArgumentErrorWithMessage:errMsg
606
+ traceback:[NSString stringWithFormat:@"%@", NSThread.callStackSymbols]]);
607
+ }
608
+ }
609
+ NSNumber *maxAttempts = request.arguments[@"maxAttempts"] ?: @(DEFAULT_MAX_PICKER_ATTEMPTS);
610
+ NSString *expectedValue = request.arguments[@"value"];
611
+ NSInteger attempt = 0;
612
+ while (attempt < [maxAttempts integerValue]) {
613
+ BOOL isSuccessful = false;
614
+ NSError *error;
615
+ if ([order isEqualToString:@"next"]) {
616
+ isSuccessful = [element fb_selectNextOptionWithOffset:offset error:&error];
617
+ } else if ([order isEqualToString:@"previous"]) {
618
+ isSuccessful = [element fb_selectPreviousOptionWithOffset:offset error:&error];
619
+ } else {
620
+ NSString *errMsg = [NSString stringWithFormat:@"Only 'previous' and 'next' order values are supported. '%@' was given instead", request.arguments[@"order"]];
621
+ return FBResponseWithStatus([FBCommandStatus invalidArgumentErrorWithMessage:errMsg
622
+ traceback:[NSString stringWithFormat:@"%@", NSThread.callStackSymbols]]);
623
+ }
624
+ if (!isSuccessful) {
625
+ return FBResponseWithStatus([FBCommandStatus invalidElementStateErrorWithMessage:error.description traceback:nil]);
626
+ }
627
+ if (nil == expectedValue || [element.wdValue isEqualToString:expectedValue]) {
628
+ return FBResponseWithOK();
629
+ }
630
+ attempt++;
631
+ }
632
+ NSString *errMsg = [NSString stringWithFormat:@"Cannot select the expected picker wheel value '%@' after %ld attempts", expectedValue, attempt];
633
+ return FBResponseWithStatus([FBCommandStatus invalidElementStateErrorWithMessage:errMsg traceback:nil]);
634
+ }
635
+
636
+ #pragma mark - Helpers
637
+
638
+ + (id<FBResponsePayload>)handleScrollElementToVisible:(XCUIElement *)element withRequest:(FBRouteRequest *)request
639
+ {
640
+ NSError *error;
641
+ if (!element.exists) {
642
+ return FBResponseWithStatus([FBCommandStatus elementNotVisibleErrorWithMessage:@"Can't scroll to element that does not exist" traceback:[NSString stringWithFormat:@"%@", NSThread.callStackSymbols]]);
643
+ }
644
+ if (![element fb_scrollToVisibleWithError:&error]) {
645
+ return FBResponseWithStatus([FBCommandStatus invalidElementStateErrorWithMessage:error.description
646
+ traceback:[NSString stringWithFormat:@"%@", NSThread.callStackSymbols]]);
647
+ }
648
+ return FBResponseWithOK();
649
+ }
650
+
651
+ /**
652
+ Returns gesture coordinate for the element based on absolute coordinate
653
+
654
+ @param offset absolute screen offset for the given application
655
+ @param element the element instance to perform the gesture on
656
+ @return translated gesture coordinates ready to be passed to XCUICoordinate methods
657
+ */
658
+ + (XCUICoordinate *)gestureCoordinateWithOffset:(CGVector)offset
659
+ element:(XCUIElement *)element
660
+ {
661
+ return [[element coordinateWithNormalizedOffset:CGVectorMake(0, 0)] coordinateWithOffset:offset];
662
+ }
663
+
664
+ /**
665
+ Returns either coordinates or the target element for the given request that expects 'x' and 'y' coordannates
666
+
667
+ @param request HTTP request object
668
+ @param error Error instance if any
669
+ @return Either XCUICoordinate or XCUIElement instance. nil if the input data is invalid
670
+ */
671
+ + (nullable id)targetWithXyCoordinatesFromRequest:(FBRouteRequest *)request error:(NSError **)error
672
+ {
673
+ NSNumber *x = request.arguments[@"x"];
674
+ NSNumber *y = request.arguments[@"y"];
675
+ if (nil == x && nil == y) {
676
+ return [self targetFromRequest:request];
677
+ }
678
+ if ((nil == x && nil != y) || (nil != x && nil == y)) {
679
+ [[[FBErrorBuilder alloc]
680
+ withDescription:@"Both x and y coordinates must be provided"]
681
+ buildError:error];
682
+ return nil;
683
+ }
684
+ return [self gestureCoordinateWithOffset:CGVectorMake(x.doubleValue, y.doubleValue)
685
+ element:[self targetFromRequest:request]];
686
+ }
687
+
688
+ /**
689
+ Returns the target element for the given request
690
+
691
+ @param request HTTP request object
692
+ @return Matching XCUIElement instance
693
+ */
694
+ + (XCUIElement *)targetFromRequest:(FBRouteRequest *)request
695
+ {
696
+ FBElementCache *elementCache = request.session.elementCache;
697
+ NSString *elementUuid = (NSString *)request.parameters[@"uuid"];
698
+ return nil == elementUuid
699
+ ? request.session.activeApplication
700
+ : [elementCache elementForUUID:elementUuid checkStaleness:YES];
701
+ }
702
+
703
+ #endif
704
+
705
+ @end