@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.
- package/LICENSE +191 -0
- package/README.md +166 -0
- package/THIRD_PARTY_LICENSES +186 -0
- package/bin/maestro-runner +0 -0
- package/drivers/android/appium-uiautomator2-server-debug-androidTest.apk +0 -0
- package/drivers/android/appium-uiautomator2-server-v9.11.1.apk +0 -0
- package/drivers/android/devicelab-android-driver-test.apk +0 -0
- package/drivers/android/devicelab-android-driver.apk +0 -0
- package/drivers/android/settings_apk-debug.apk +0 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunner/App.swift +11 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunner.xcodeproj/project.pbxproj +523 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/ATTRIBUTION.md +73 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/Bridging-Header.h +4 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/PixelDiff.swift +72 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/PrivateHeaders/XCTest/XCPointerEventPath.h +43 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/PrivateHeaders/XCTest/XCSynthesizedEventRecord.h +32 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/PrivateHeaders/XCTest/XCUIApplication+ActiveApp.h +23 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/PrivateHeaders/XCTest/XCUIDevice.h +30 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerObjCExceptionCatcher.h +11 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerObjCExceptionCatcher.m +16 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Alert.swift +155 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+CommandExecution.swift +961 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Environment.swift +37 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Interaction.swift +1864 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Lifecycle.swift +351 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Media.swift +81 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Models.swift +258 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+ScreenRecorder.swift +279 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Snapshot.swift +703 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+SystemModal.swift +230 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Transport.swift +137 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+TvRemote.swift +185 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests.swift +197 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/SnapshotParams.h +28 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/SnapshotParams.m +49 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/SyntheticTyping.h +17 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/SyntheticTyping.m +86 -0
- package/drivers/ios/DevicelabIOSRunner/PROTOCOL.md +258 -0
- package/drivers/ios/DevicelabIOSRunner/README.md +38 -0
- package/drivers/ios/DevicelabIOSRunner/project.yml +49 -0
- package/drivers/ios/WebDriverAgent/.github/ISSUE_TEMPLATE.md +4 -0
- package/drivers/ios/WebDriverAgent/.github/actions/xcode-setup/action.yml +32 -0
- package/drivers/ios/WebDriverAgent/.github/dependabot.yml +22 -0
- package/drivers/ios/WebDriverAgent/.github/workflows/functional-test.yml +62 -0
- package/drivers/ios/WebDriverAgent/.github/workflows/pr-title.yml +10 -0
- package/drivers/ios/WebDriverAgent/.github/workflows/publish.js.yml +105 -0
- package/drivers/ios/WebDriverAgent/.github/workflows/unit-test.yml +30 -0
- package/drivers/ios/WebDriverAgent/.github/workflows/wda-package.yml +107 -0
- package/drivers/ios/WebDriverAgent/.github/workflows/wda-tests.yml +221 -0
- package/drivers/ios/WebDriverAgent/.mocharc.js +4 -0
- package/drivers/ios/WebDriverAgent/.releaserc +45 -0
- package/drivers/ios/WebDriverAgent/CHANGELOG.md +1547 -0
- package/drivers/ios/WebDriverAgent/CONTRIBUTING.md +35 -0
- package/drivers/ios/WebDriverAgent/Configurations/IOSSettings.xcconfig +31 -0
- package/drivers/ios/WebDriverAgent/Configurations/IOSTestSettings.xcconfig +1 -0
- package/drivers/ios/WebDriverAgent/Configurations/TVOSSettings.xcconfig +31 -0
- package/drivers/ios/WebDriverAgent/Configurations/TVOSTestSettings.xcconfig +1 -0
- package/drivers/ios/WebDriverAgent/Fastlane/Fastfile +13 -0
- package/drivers/ios/WebDriverAgent/Gemfile +3 -0
- package/drivers/ios/WebDriverAgent/LICENSE +30 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/AccessibilityUtilities/AXSettings.h +15 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/MobileCoreServices/LSApplicationWorkspace.h +127 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/TextInput/TIPreferencesController.h +45 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/UIKitCore/UIKeyboardImpl.h +27 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/CDStructures.h +28 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/NSString-XCTAdditions.h +11 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/NSValue-XCTestAdditions.h +11 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UIGestureRecognizer-RecordingAdditions.h +11 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UILongPressGestureRecognizer-RecordingAdditions.h +11 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UIPanGestureRecognizer-RecordingAdditions.h +11 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UIPinchGestureRecognizer-RecordingAdditions.h +11 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UISwipeGestureRecognizer-RecordingAdditions.h +11 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UITapGestureRecognizer-RecordingAdditions.h +11 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCAXClient_iOS.h +55 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCActivityRecord.h +39 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCApplicationMonitor.h +44 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCApplicationMonitor_iOS.h +18 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCApplicationQuery.h +23 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCDebugLogDelegate-Protocol.h +11 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCDeviceEvent.h +27 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCEventGenerator.h +73 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCKeyMappingPath.h +36 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCKeyboardInputSolver.h +41 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCKeyboardKeyMap.h +101 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCKeyboardLayout.h +35 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCPointerEvent.h +30 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCPointerEventPath.h +43 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSourceCodeRecording.h +42 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSourceCodeTreeNode.h +84 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSourceCodeTreeNodeEnumerator.h +18 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSymbolicationRecord.h +29 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSymbolicatorHolder.h +14 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSynthesizedEventRecord.h +32 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTAXClient-Protocol.h +14 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTAsyncActivity-Protocol.h +16 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTAsyncActivity.h +23 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTAutomationTarget-Protocol.h +12 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTDarwinNotificationExpectation.h +23 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTElementSetTransformer-Protocol.h +18 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTKVOExpectation.h +28 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTMetric.h +29 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTNSNotificationExpectation.h +27 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTNSPredicateExpectation.h +24 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTNSPredicateExpectationObject-Protocol.h +15 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTRunnerAutomationSession.h +21 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTRunnerDaemonSession.h +98 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTRunnerIDESession.h +65 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTTestRunSession.h +25 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTTestRunSessionDelegate-Protocol.h +17 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTUIApplicationMonitor-Protocol.h +17 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTWaiter.h +55 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTWaiterDelegate-Protocol.h +16 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTWaiterDelegatePrivate-Protocol.h +12 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTWaiterManagement-Protocol.h +13 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTWaiterManager.h +28 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTest.h +34 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestCase.h +102 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestCaseRun.h +18 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestCaseSuite.h +19 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestConfiguration.h +66 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestContext.h +26 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestContextScope.h +19 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestDriver.h +38 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestDriverInterface-Protocol.h +14 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestExpectation.h +39 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestExpectationDelegate-Protocol.h +14 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestExpectationWaiter.h +17 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestLog.h +32 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestManager_IDEInterface-Protocol.h +36 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestManager_ManagerInterface-Protocol.h +54 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestManager_TestsInterface-Protocol.h +12 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestMisuseObserver.h +37 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestObservation-Protocol.h +20 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestObservationCenter.h +36 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestObserver.h +20 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestProbe.h +13 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestRun.h +39 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestSuite.h +48 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestSuiteRun.h +28 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestWaiter.h +14 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIApplication.h +60 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIApplicationImpl.h +38 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIApplicationProcess.h +85 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUICoordinate.h +44 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIDevice.h +30 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIElement.h +74 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIElementAsynchronousHandlerWrapper.h +19 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIElementHitPointCoordinate.h +24 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIElementQuery.h +70 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIHitPointResult.h +20 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIRecorderNodeFinder.h +65 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIRecorderNodeFinderMatch.h +25 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIRecorderTimingMessage.h +20 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIRecorderUtilities.h +45 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIScreen.h +27 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIScreenDataSource-Protocol.h +19 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCInternalTestRun.h +43 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCKVOExpectationImplementation.h +32 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTDarwinNotificationExpectationImplementation.h +27 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTNSNotificationExpectationImplementation.h +30 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTNSPredicateExpectationImplementation.h +29 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTWaiterImpl.h +41 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestCaseImplementation.h +70 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestCaseInterruptionException.h +13 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestExpectationImplementation.h +40 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestImplementation.h +14 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestObservationCenterImplementation.h +19 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestSuiteImplementation.h +23 -0
- package/drivers/ios/WebDriverAgent/README.md +56 -0
- package/drivers/ios/WebDriverAgent/Scripts/build-webdriveragent.mjs +85 -0
- package/drivers/ios/WebDriverAgent/Scripts/build.sh +124 -0
- package/drivers/ios/WebDriverAgent/Scripts/ci/build-real.sh +24 -0
- package/drivers/ios/WebDriverAgent/Scripts/ci/build-sim.sh +15 -0
- package/drivers/ios/WebDriverAgent/Scripts/fetch-prebuilt-wda.mjs +69 -0
- package/drivers/ios/WebDriverAgent/Scripts/update-wda-version.mjs +42 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/project.pbxproj +4547 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/IntegrationApp.xcscheme +87 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/IntegrationTests_1.xcscheme +86 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/IntegrationTests_2.xcscheme +86 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/IntegrationTests_3.xcscheme +86 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentLib.xcscheme +125 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentLib_tvOS.xcscheme +95 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentRunner-nodebug.xcscheme +87 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentRunner.xcscheme +114 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentRunner_tvOS.xcscheme +123 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/FBXCElementSnapshotWrapper+Helpers.h +100 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/FBXCElementSnapshotWrapper+Helpers.m +192 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSDictionary+FBUtf8SafeDictionary.h +39 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSDictionary+FBUtf8SafeDictionary.m +87 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSExpression+FBFormat.h +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSExpression+FBFormat.m +34 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSString+FBVisualLength.h +18 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSString+FBVisualLength.m +18 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSString+FBXMLSafeString.h +27 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSString+FBXMLSafeString.m +30 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCAXClient_iOS+FBSnapshotReqParams.h +25 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCAXClient_iOS+FBSnapshotReqParams.m +82 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCTIssue+FBPatcher.h +17 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCTIssue+FBPatcher.m +35 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBAlert.h +23 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBAlert.m +109 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBFocused.h +23 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBHelpers.h +171 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBHelpers.m +645 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBQuiescence.h +24 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBQuiescence.m +28 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBTouchAction.h +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBTouchAction.m +75 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBUIInterruptions.h +22 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBUIInterruptions.m +31 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplicationProcess+FBQuiescence.h +27 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplicationProcess+FBQuiescence.m +118 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBHealthCheck.h +30 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBHealthCheck.m +47 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.h +193 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m +388 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.h +38 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.m +68 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBAccessibility.h +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBAccessibility.m +50 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBCaching.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBCaching.m +36 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBClassChain.h +57 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBClassChain.m +98 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBCustomActions.h +27 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBCustomActions.m +127 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBFind.h +75 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBFind.m +133 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBForceTouch.h +38 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBForceTouch.m +52 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBIsVisible.h +28 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBIsVisible.m +78 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBMinMax.h +33 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBMinMax.m +75 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBPickerWheel.h +45 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBPickerWheel.m +58 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBResolve.h +37 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBResolve.m +51 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBScrolling.h +98 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBScrolling.m +342 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBSwiping.h +38 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBSwiping.m +56 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBTVFocuse.h +35 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBTVFocuse.m +71 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBTyping.h +64 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBTyping.m +199 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBUID.h +42 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBUID.m +85 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBUtilities.h +106 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBUtilities.m +170 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBVisibleFrame.h +35 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBVisibleFrame.m +52 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBWebDriverAttributes.h +32 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBWebDriverAttributes.m +294 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElementQuery+FBHelpers.h +28 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElementQuery+FBHelpers.m +46 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBAlertViewCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBAlertViewCommands.m +130 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBCustomCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBCustomCommands.m +633 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBDebugCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBDebugCommands.m +81 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBElementCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBElementCommands.m +705 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBFindElementCommands.h +18 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBFindElementCommands.m +186 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBOrientationCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBOrientationCommands.m +185 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBScreenshotCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBScreenshotCommands.m +40 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBSessionCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBSessionCommands.m +594 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBTouchActionCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBTouchActionCommands.m +41 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBTouchIDCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBTouchIDCommands.m +30 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBUnknownCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBUnknownCommands.m +39 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBVideoCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBVideoCommands.m +84 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/FBAlert.h +91 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/FBAlert.m +274 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Info.plist +26 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBCommandHandler.h +38 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBCommandStatus.h +80 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBCommandStatus.m +279 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBElement.h +95 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBElementCache.h +61 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBElementCache.m +100 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBElementUtils.h +76 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBElementUtils.m +153 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBExceptionHandler.h +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBExceptionHandler.m +58 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBExceptions.h +60 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBExceptions.m +24 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBHTTPStatusCodes.h +581 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBResponseJSONPayload.h +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBResponseJSONPayload.m +59 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBResponsePayload.h +74 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBResponsePayload.m +148 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBRoute.h +77 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBRoute.m +174 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBRouteRequest-Private.h +20 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBRouteRequest.h +39 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBRouteRequest.m +32 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingContainer.h +56 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingContainer.m +72 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingPromise.h +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingPromise.m +31 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingRequest.h +39 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingRequest.m +94 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBSession-Private.h +26 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBSession.h +141 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBSession.m +295 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBTCPSocket.h +65 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBTCPSocket.m +85 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBWebServer.h +52 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBWebServer.m +248 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCAccessibilityElement.h +34 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCAccessibilityElement.m +17 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCDeviceEvent.h +34 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCDeviceEvent.m +42 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCElementSnapshot.h +82 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCElementSnapshot.m +9 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCElementSnapshotWrapper.h +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCElementSnapshotWrapper.m +114 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBAccessibilityTraits.h +20 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBAccessibilityTraits.m +61 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBActiveAppDetectionPoint.h +56 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBActiveAppDetectionPoint.m +87 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBAlertsMonitor.h +51 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBAlertsMonitor.m +94 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBBaseActionsSynthesizer.h +131 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBBaseActionsSynthesizer.m +165 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBCapabilities.h +45 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBCapabilities.m +25 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBClassChainQueryParser.h +99 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBClassChainQueryParser.m +666 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBConfiguration.h +403 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBConfiguration.m +711 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBDebugLogDelegateDecorator.h +26 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBDebugLogDelegateDecorator.m +49 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBElementHelpers.h +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBElementHelpers.m +21 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBElementTypeTransformer.h +45 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBElementTypeTransformer.m +149 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBErrorBuilder.h +64 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBErrorBuilder.m +75 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBFailureProofTestCase.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBFailureProofTestCase.m +68 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBImageProcessor.h +55 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBImageProcessor.m +170 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBImageUtils.h +25 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBImageUtils.m +80 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBKeyboard.h +37 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBKeyboard.m +123 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBLogger.h +32 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBLogger.m +47 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBMacros.h +57 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBMathUtils.h +36 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBMathUtils.m +63 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBMjpegServer.h +24 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBMjpegServer.m +151 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBNotificationsHelper.h +37 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBNotificationsHelper.m +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBPasteboard.h +40 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBPasteboard.m +172 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBProtocolHelpers.h +46 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBProtocolHelpers.m +144 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBReflectionUtils.h +23 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBReflectionUtils.m +31 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBRunLoopSpinner.h +77 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBRunLoopSpinner.m +94 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBRuntimeUtils.h +79 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBRuntimeUtils.m +112 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBScreen.h +22 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBScreen.m +21 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBScreenshot.h +44 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBScreenshot.m +227 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBSettings.h +48 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBSettings.m +42 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBTVNavigationTracker-Private.h +27 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBTVNavigationTracker.h +52 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBTVNavigationTracker.m +142 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBUnattachedAppLauncher.h +26 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBUnattachedAppLauncher.m +21 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBW3CActionsHelpers.h +42 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBW3CActionsHelpers.m +119 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.m +885 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBWebServerParams.h +22 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBWebServerParams.m +23 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCAXClientProxy.h +49 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCAXClientProxy.m +119 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCTestDaemonsProxy.h +45 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCTestDaemonsProxy.m +359 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCodeCompatibility.h +80 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCodeCompatibility.m +99 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXMLGenerationOptions.h +45 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXMLGenerationOptions.m +25 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXPath-Private.h +56 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXPath.h +59 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXPath.m +979 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/LRUCache/LRUCache.h +66 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/LRUCache/LRUCache.m +146 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/LRUCache/LRUCacheNode.h +43 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/LRUCache/LRUCacheNode.m +51 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/NSPredicate+FBFormat.h +42 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/NSPredicate+FBFormat.m +69 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/XCTestPrivateSymbols.h +78 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/XCTestPrivateSymbols.m +107 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/XCUIApplicationProcessDelay.h +37 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/XCUIApplicationProcessDelay.m +83 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaAsyncSocket/GCDAsyncSocket.h +1220 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaAsyncSocket/GCDAsyncSocket.m +8812 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaAsyncSocket/GCDAsyncUdpSocket.h +1036 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaAsyncSocket/GCDAsyncUdpSocket.m +5868 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Categories/DDNumber.h +12 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Categories/DDNumber.m +88 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Categories/DDRange.h +56 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Categories/DDRange.m +106 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPConnection.h +107 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPConnection.m +2238 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPLogging.h +122 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPMessage.h +53 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPMessage.m +357 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPResponse.h +149 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPServer.h +126 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPServer.m +372 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/LICENSE +18 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Responses/HTTPDataResponse.h +13 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Responses/HTTPDataResponse.m +83 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Responses/HTTPErrorResponse.h +9 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Responses/HTTPErrorResponse.m +40 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/HTTPResponseProxy.h +13 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/HTTPResponseProxy.m +84 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/LICENSE +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/Route.h +18 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/Route.m +11 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RouteRequest.h +16 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RouteRequest.m +50 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RouteResponse.h +20 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RouteResponse.m +66 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingConnection.h +5 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingConnection.m +142 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingHTTPServer.h +55 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingHTTPServer.m +303 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/WebDriverAgentLib.h +59 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentRunner/Info.plist +30 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentRunner/UITestingUITests.m +58 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/AppDelegate.h +14 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/AppDelegate.m +38 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBAlertViewController.h +14 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBAlertViewController.m +82 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBNavigationController.h +12 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBNavigationController.m +25 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBScrollViewController.h +13 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBScrollViewController.m +39 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBTableDataSource.h +16 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBTableDataSource.m +35 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/SceneDelegate.h +20 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/SceneDelegate.m +48 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchSpotView.h +17 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchSpotView.m +28 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchViewController.h +23 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchViewController.m +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchableView.h +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchableView.m +108 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/ViewController.h +12 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/ViewController.m +88 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Info.plist +71 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Resources/Base.lproj/Main.storyboard +620 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/main.m +15 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBAlertTests.m +194 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBAutoAlertsHandlerTests.m +73 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBConfigurationTests.m +38 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBElementAttributeTests.m +264 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBElementSwipingTests.m +127 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBElementVisibilityTests.m +73 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBFailureProofTestCaseTests.m +41 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBForceTouchTests.m +85 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBImageProcessorTests.m +82 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBIntegrationTestCase.h +76 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBIntegrationTestCase.m +140 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBKeyboardTests.m +61 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBPasteboardTests.m +91 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBPickerWheelSelectTests.m +55 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBSafariAlertTests.m +73 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBScreenTests.m +31 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBScrollingTests.m +126 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBSessionIntegrationTests.m +131 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBTapTest.m +103 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBTestMacros.h +33 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBTypingTest.m +68 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBVideoRecordingTests.m +64 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBW3CMultiTouchActionsIntegrationTests.m +124 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBW3CTouchActionsIntegrationTests.m +491 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBW3CTypeActionsTests.m +184 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBXPathIntegrationTests.m +157 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/Info.plist +24 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCElementSnapshotHelperTests.m +211 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCElementSnapshotHitPointTests.m +30 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIApplicationHelperTests.m +162 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIDeviceHealthCheckTests.m +27 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIDeviceHelperTests.m +220 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIDeviceRotationTests.m +84 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIElementAttributesTests.m +248 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIElementFBFindTests.m +472 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIElementHelperIntegrationTests.m +51 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCElementSnapshotDouble.h +16 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCElementSnapshotDouble.m +110 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCUIApplicationDouble.h +17 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCUIApplicationDouble.m +66 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCUIElementDouble.h +51 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCUIElementDouble.m +104 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBClassChainTests.m +313 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBConfigurationTests.m +60 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBElementCacheTests.m +124 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBElementTypeTransformerTests.m +45 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBElementUtilitiesTests.m +36 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBErrorBuilderTests.m +61 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBExceptionHandlerTests.m +59 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBLRUCacheTests.m +127 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBMathUtilsTests.m +113 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBProtocolHelpersTests.m +81 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBRouteTests.m +129 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBRunLoopSpinnerTests.m +98 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBRuntimeUtilsTests.m +45 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBSDKVersionTests.m +66 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBSessionTests.m +67 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBXMLSafeStringTests.m +35 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBXPathTests.m +155 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Info.plist +24 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/NSDictionaryFBUtf8SafeTests.m +34 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/NSExpressionFBFormatTests.m +60 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/NSPredicateFBFormatTests.m +72 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/XCUIElementHelpersTests.m +50 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests_tvOS/Doubles/XCUIElementDouble.h +46 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests_tvOS/Doubles/XCUIElementDouble.m +80 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests_tvOS/FBTVNavigationTrackerTests.m +86 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests_tvOS/Info.plist +24 -0
- package/drivers/ios/WebDriverAgent/eslint.config.mjs +13 -0
- package/drivers/ios/WebDriverAgent/index.ts +7 -0
- package/drivers/ios/WebDriverAgent/lib/check-dependencies.ts +34 -0
- package/drivers/ios/WebDriverAgent/lib/constants.ts +18 -0
- package/drivers/ios/WebDriverAgent/lib/logger.ts +3 -0
- package/drivers/ios/WebDriverAgent/lib/no-session-proxy.ts +25 -0
- package/drivers/ios/WebDriverAgent/lib/types.ts +139 -0
- package/drivers/ios/WebDriverAgent/lib/utils.ts +342 -0
- package/drivers/ios/WebDriverAgent/lib/webdriveragent.ts +715 -0
- package/drivers/ios/WebDriverAgent/lib/xcodebuild.ts +488 -0
- package/drivers/ios/WebDriverAgent/package.json +102 -0
- package/drivers/ios/WebDriverAgent/test/functional/desired.ts +7 -0
- package/drivers/ios/WebDriverAgent/test/functional/helpers/simulator.ts +34 -0
- package/drivers/ios/WebDriverAgent/test/functional/webdriveragent-e2e-specs.ts +119 -0
- package/drivers/ios/WebDriverAgent/test/unit/utils-specs.ts +157 -0
- package/drivers/ios/WebDriverAgent/test/unit/webdriveragent-specs.ts +446 -0
- package/drivers/ios/WebDriverAgent/tsconfig.json +16 -0
- package/package.json +16 -0
|
@@ -0,0 +1,979 @@
|
|
|
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 "FBXPath.h"
|
|
10
|
+
|
|
11
|
+
#import "FBConfiguration.h"
|
|
12
|
+
#import "FBExceptions.h"
|
|
13
|
+
#import "FBElementUtils.h"
|
|
14
|
+
#import "FBLogger.h"
|
|
15
|
+
#import "FBMacros.h"
|
|
16
|
+
#import "FBXMLGenerationOptions.h"
|
|
17
|
+
#import "FBXCElementSnapshotWrapper+Helpers.h"
|
|
18
|
+
#import "NSString+FBXMLSafeString.h"
|
|
19
|
+
#import "XCUIApplication.h"
|
|
20
|
+
#import "XCUIElement.h"
|
|
21
|
+
#import "XCUIElement+FBCaching.h"
|
|
22
|
+
#import "XCUIElement+FBUtilities.h"
|
|
23
|
+
#import "XCUIElement+FBWebDriverAttributes.h"
|
|
24
|
+
#import "XCTestPrivateSymbols.h"
|
|
25
|
+
#import "FBElementHelpers.h"
|
|
26
|
+
#import "FBXCAXClientProxy.h"
|
|
27
|
+
#import "FBXCAccessibilityElement.h"
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@interface FBElementAttribute : NSObject
|
|
31
|
+
|
|
32
|
+
@property (nonatomic, readonly) id<FBElement> element;
|
|
33
|
+
|
|
34
|
+
+ (nonnull NSString *)name;
|
|
35
|
+
+ (nullable NSString *)valueForElement:(id<FBElement>)element;
|
|
36
|
+
|
|
37
|
+
+ (int)recordWithWriter:(xmlTextWriterPtr)writer forElement:(id<FBElement>)element;
|
|
38
|
+
+ (int)recordWithWriter:(xmlTextWriterPtr)writer forValue:(nullable NSString *)value;
|
|
39
|
+
|
|
40
|
+
+ (NSArray<Class> *)supportedAttributes;
|
|
41
|
+
|
|
42
|
+
@end
|
|
43
|
+
|
|
44
|
+
@interface FBTypeAttribute : FBElementAttribute
|
|
45
|
+
|
|
46
|
+
@end
|
|
47
|
+
|
|
48
|
+
@interface FBValueAttribute : FBElementAttribute
|
|
49
|
+
|
|
50
|
+
@end
|
|
51
|
+
|
|
52
|
+
@interface FBNameAttribute : FBElementAttribute
|
|
53
|
+
|
|
54
|
+
@end
|
|
55
|
+
|
|
56
|
+
@interface FBLabelAttribute : FBElementAttribute
|
|
57
|
+
|
|
58
|
+
@end
|
|
59
|
+
|
|
60
|
+
@interface FBEnabledAttribute : FBElementAttribute
|
|
61
|
+
|
|
62
|
+
@end
|
|
63
|
+
|
|
64
|
+
@interface FBVisibleAttribute : FBElementAttribute
|
|
65
|
+
|
|
66
|
+
@end
|
|
67
|
+
|
|
68
|
+
@interface FBAccessibleAttribute : FBElementAttribute
|
|
69
|
+
|
|
70
|
+
@end
|
|
71
|
+
|
|
72
|
+
@interface FBDimensionAttribute : FBElementAttribute
|
|
73
|
+
|
|
74
|
+
@end
|
|
75
|
+
|
|
76
|
+
@interface FBXAttribute : FBDimensionAttribute
|
|
77
|
+
|
|
78
|
+
@end
|
|
79
|
+
|
|
80
|
+
@interface FBYAttribute : FBDimensionAttribute
|
|
81
|
+
|
|
82
|
+
@end
|
|
83
|
+
|
|
84
|
+
@interface FBWidthAttribute : FBDimensionAttribute
|
|
85
|
+
|
|
86
|
+
@end
|
|
87
|
+
|
|
88
|
+
@interface FBHeightAttribute : FBDimensionAttribute
|
|
89
|
+
|
|
90
|
+
@end
|
|
91
|
+
|
|
92
|
+
@interface FBIndexAttribute : FBElementAttribute
|
|
93
|
+
|
|
94
|
+
@end
|
|
95
|
+
|
|
96
|
+
@interface FBHittableAttribute : FBElementAttribute
|
|
97
|
+
|
|
98
|
+
@end
|
|
99
|
+
|
|
100
|
+
@interface FBInternalIndexAttribute : FBElementAttribute
|
|
101
|
+
|
|
102
|
+
@property (nonatomic, nonnull, readonly) NSString* indexValue;
|
|
103
|
+
|
|
104
|
+
@end
|
|
105
|
+
|
|
106
|
+
@interface FBApplicationBundleIdAttribute : FBElementAttribute
|
|
107
|
+
|
|
108
|
+
@end
|
|
109
|
+
|
|
110
|
+
@interface FBApplicationPidAttribute : FBElementAttribute
|
|
111
|
+
|
|
112
|
+
@end
|
|
113
|
+
|
|
114
|
+
@interface FBPlaceholderValueAttribute : FBElementAttribute
|
|
115
|
+
|
|
116
|
+
@end
|
|
117
|
+
|
|
118
|
+
@interface FBNativeFrameAttribute : FBElementAttribute
|
|
119
|
+
|
|
120
|
+
@end
|
|
121
|
+
|
|
122
|
+
@interface FBTraitsAttribute : FBElementAttribute
|
|
123
|
+
|
|
124
|
+
@end
|
|
125
|
+
|
|
126
|
+
@interface FBMinValueAttribute : FBElementAttribute
|
|
127
|
+
|
|
128
|
+
@end
|
|
129
|
+
|
|
130
|
+
@interface FBMaxValueAttribute : FBElementAttribute
|
|
131
|
+
|
|
132
|
+
@end
|
|
133
|
+
|
|
134
|
+
@interface FBCustomActionsAttribute : FBElementAttribute
|
|
135
|
+
|
|
136
|
+
@end
|
|
137
|
+
|
|
138
|
+
#if TARGET_OS_TV
|
|
139
|
+
|
|
140
|
+
@interface FBFocusedAttribute : FBElementAttribute
|
|
141
|
+
|
|
142
|
+
@end
|
|
143
|
+
|
|
144
|
+
#endif
|
|
145
|
+
|
|
146
|
+
const static char *_UTF8Encoding = "UTF-8";
|
|
147
|
+
|
|
148
|
+
static NSString *const kXMLIndexPathKey = @"private_indexPath";
|
|
149
|
+
static NSString *const topNodeIndexPath = @"top";
|
|
150
|
+
|
|
151
|
+
@implementation FBXPath
|
|
152
|
+
|
|
153
|
+
+ (id)throwException:(NSString *)name forQuery:(NSString *)xpathQuery
|
|
154
|
+
{
|
|
155
|
+
NSString *reason = [NSString stringWithFormat:@"Cannot evaluate results for XPath expression \"%@\"", xpathQuery];
|
|
156
|
+
@throw [NSException exceptionWithName:name reason:reason userInfo:@{}];
|
|
157
|
+
return nil;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
+ (nullable NSString *)xmlStringWithRootElement:(id<FBElement>)root
|
|
161
|
+
options:(nullable FBXMLGenerationOptions *)options
|
|
162
|
+
{
|
|
163
|
+
xmlDocPtr doc;
|
|
164
|
+
xmlTextWriterPtr writer = xmlNewTextWriterDoc(&doc, 0);
|
|
165
|
+
int rc = xmlTextWriterStartDocument(writer, NULL, _UTF8Encoding, NULL);
|
|
166
|
+
if (rc < 0) {
|
|
167
|
+
[FBLogger logFmt:@"Failed to invoke libxml2>xmlTextWriterStartDocument. Error code: %d", rc];
|
|
168
|
+
} else {
|
|
169
|
+
BOOL hasScope = nil != options.scope && [options.scope length] > 0;
|
|
170
|
+
if (hasScope) {
|
|
171
|
+
rc = xmlTextWriterStartElement(writer,
|
|
172
|
+
(xmlChar *)[[self safeXmlStringWithString:options.scope] UTF8String]);
|
|
173
|
+
if (rc < 0) {
|
|
174
|
+
[FBLogger logFmt:@"Failed to invoke libxml2>xmlTextWriterStartElement for the tag value '%@'. Error code: %d", options.scope, rc];
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if (rc >= 0) {
|
|
179
|
+
[self waitUntilStableWithElement:root];
|
|
180
|
+
// If 'includeHittableInPageSource' setting is enabled, then use native snapshots
|
|
181
|
+
// to calculate a more accurate value for the 'hittable' attribute.
|
|
182
|
+
rc = [self xmlRepresentationWithRootElement:[self snapshotWithRoot:root
|
|
183
|
+
useNative:FBConfiguration.includeHittableInPageSource]
|
|
184
|
+
writer:writer
|
|
185
|
+
elementStore:nil
|
|
186
|
+
query:nil
|
|
187
|
+
excludingAttributes:options.excludedAttributes];
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
if (rc >= 0 && hasScope) {
|
|
191
|
+
rc = xmlTextWriterEndElement(writer);
|
|
192
|
+
if (rc < 0) {
|
|
193
|
+
[FBLogger logFmt:@"Failed to invoke libxml2>xmlTextWriterEndElement. Error code: %d", rc];
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
if (rc >= 0) {
|
|
198
|
+
rc = xmlTextWriterEndDocument(writer);
|
|
199
|
+
if (rc < 0) {
|
|
200
|
+
[FBLogger logFmt:@"Failed to invoke libxml2>xmlXPathNewContext. Error code: %d", rc];
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
if (rc < 0) {
|
|
205
|
+
xmlFreeTextWriter(writer);
|
|
206
|
+
xmlFreeDoc(doc);
|
|
207
|
+
return nil;
|
|
208
|
+
}
|
|
209
|
+
int buffersize;
|
|
210
|
+
xmlChar *xmlbuff;
|
|
211
|
+
xmlDocDumpFormatMemory(doc, &xmlbuff, &buffersize, 1);
|
|
212
|
+
xmlFreeTextWriter(writer);
|
|
213
|
+
xmlFreeDoc(doc);
|
|
214
|
+
NSString *result = [NSString stringWithCString:(const char *)xmlbuff encoding:NSUTF8StringEncoding];
|
|
215
|
+
xmlFree(xmlbuff);
|
|
216
|
+
return result;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
+ (NSArray<id<FBXCElementSnapshot>> *)matchesWithRootElement:(id<FBElement>)root
|
|
220
|
+
forQuery:(NSString *)xpathQuery
|
|
221
|
+
{
|
|
222
|
+
xmlDocPtr doc;
|
|
223
|
+
|
|
224
|
+
xmlTextWriterPtr writer = xmlNewTextWriterDoc(&doc, 0);
|
|
225
|
+
if (NULL == writer) {
|
|
226
|
+
[FBLogger logFmt:@"Failed to invoke libxml2>xmlNewTextWriterDoc for XPath query \"%@\"", xpathQuery];
|
|
227
|
+
return [self throwException:FBXPathQueryEvaluationException forQuery:xpathQuery];
|
|
228
|
+
}
|
|
229
|
+
NSMutableDictionary *elementStore = [NSMutableDictionary dictionary];
|
|
230
|
+
int rc = xmlTextWriterStartDocument(writer, NULL, _UTF8Encoding, NULL);
|
|
231
|
+
id<FBXCElementSnapshot> lookupScopeSnapshot = nil;
|
|
232
|
+
id<FBXCElementSnapshot> contextRootSnapshot = nil;
|
|
233
|
+
BOOL useNativeSnapshot = nil == xpathQuery
|
|
234
|
+
? NO
|
|
235
|
+
: [[self.class elementAttributesWithXPathQuery:xpathQuery] containsObject:FBHittableAttribute.class];
|
|
236
|
+
if (rc < 0) {
|
|
237
|
+
[FBLogger logFmt:@"Failed to invoke libxml2>xmlTextWriterStartDocument. Error code: %d", rc];
|
|
238
|
+
} else {
|
|
239
|
+
[self waitUntilStableWithElement:root];
|
|
240
|
+
if (FBConfiguration.limitXpathContextScope) {
|
|
241
|
+
lookupScopeSnapshot = [self snapshotWithRoot:root useNative:useNativeSnapshot];
|
|
242
|
+
} else {
|
|
243
|
+
if ([root isKindOfClass:XCUIElement.class]) {
|
|
244
|
+
lookupScopeSnapshot = [self snapshotWithRoot:[(XCUIElement *)root application]
|
|
245
|
+
useNative:useNativeSnapshot];
|
|
246
|
+
contextRootSnapshot = [root isKindOfClass:XCUIApplication.class]
|
|
247
|
+
? nil
|
|
248
|
+
: ([(XCUIElement *)root lastSnapshot] ?: [self snapshotWithRoot:(XCUIElement *)root
|
|
249
|
+
useNative:useNativeSnapshot]);
|
|
250
|
+
} else {
|
|
251
|
+
lookupScopeSnapshot = (id<FBXCElementSnapshot>)root;
|
|
252
|
+
contextRootSnapshot = nil == lookupScopeSnapshot.parent ? nil : (id<FBXCElementSnapshot>)root;
|
|
253
|
+
while (nil != lookupScopeSnapshot.parent) {
|
|
254
|
+
lookupScopeSnapshot = lookupScopeSnapshot.parent;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
rc = [self xmlRepresentationWithRootElement:lookupScopeSnapshot
|
|
260
|
+
writer:writer
|
|
261
|
+
elementStore:elementStore
|
|
262
|
+
query:xpathQuery
|
|
263
|
+
excludingAttributes:nil];
|
|
264
|
+
if (rc >= 0) {
|
|
265
|
+
rc = xmlTextWriterEndDocument(writer);
|
|
266
|
+
if (rc < 0) {
|
|
267
|
+
[FBLogger logFmt:@"Failed to invoke libxml2>xmlTextWriterEndDocument. Error code: %d", rc];
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
if (rc < 0) {
|
|
272
|
+
xmlFreeTextWriter(writer);
|
|
273
|
+
xmlFreeDoc(doc);
|
|
274
|
+
return [self throwException:FBXPathQueryEvaluationException forQuery:xpathQuery];
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
xmlXPathObjectPtr contextNodeQueryResult = [self matchNodeInDocument:doc
|
|
278
|
+
elementStore:elementStore.copy
|
|
279
|
+
forSnapshot:contextRootSnapshot];
|
|
280
|
+
xmlNodePtr contextNode = NULL;
|
|
281
|
+
if (NULL != contextNodeQueryResult) {
|
|
282
|
+
xmlNodeSetPtr nodeSet = contextNodeQueryResult->nodesetval;
|
|
283
|
+
if (!xmlXPathNodeSetIsEmpty(nodeSet)) {
|
|
284
|
+
contextNode = nodeSet->nodeTab[0];
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
xmlXPathObjectPtr queryResult = [self evaluate:xpathQuery
|
|
288
|
+
document:doc
|
|
289
|
+
contextNode:contextNode];
|
|
290
|
+
if (NULL != contextNodeQueryResult) {
|
|
291
|
+
xmlXPathFreeObject(contextNodeQueryResult);
|
|
292
|
+
}
|
|
293
|
+
if (NULL == queryResult) {
|
|
294
|
+
xmlFreeTextWriter(writer);
|
|
295
|
+
xmlFreeDoc(doc);
|
|
296
|
+
return [self throwException:FBInvalidXPathException forQuery:xpathQuery];
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
NSArray *matchingSnapshots = [self collectMatchingSnapshots:queryResult->nodesetval
|
|
300
|
+
elementStore:elementStore];
|
|
301
|
+
xmlXPathFreeObject(queryResult);
|
|
302
|
+
xmlFreeTextWriter(writer);
|
|
303
|
+
xmlFreeDoc(doc);
|
|
304
|
+
if (nil == matchingSnapshots) {
|
|
305
|
+
return [self throwException:FBXPathQueryEvaluationException forQuery:xpathQuery];
|
|
306
|
+
}
|
|
307
|
+
return matchingSnapshots;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
+ (NSArray *)collectMatchingSnapshots:(xmlNodeSetPtr)nodeSet
|
|
311
|
+
elementStore:(NSMutableDictionary *)elementStore
|
|
312
|
+
{
|
|
313
|
+
if (xmlXPathNodeSetIsEmpty(nodeSet)) {
|
|
314
|
+
return @[];
|
|
315
|
+
}
|
|
316
|
+
NSMutableArray *matchingSnapshots = [NSMutableArray array];
|
|
317
|
+
const xmlChar *indexPathKeyName = (xmlChar *)[kXMLIndexPathKey UTF8String];
|
|
318
|
+
for (NSInteger i = 0; i < nodeSet->nodeNr; i++) {
|
|
319
|
+
xmlNodePtr currentNode = nodeSet->nodeTab[i];
|
|
320
|
+
xmlChar *attrValue = xmlGetProp(currentNode, indexPathKeyName);
|
|
321
|
+
if (NULL == attrValue) {
|
|
322
|
+
[FBLogger log:@"Failed to invoke libxml2>xmlGetProp"];
|
|
323
|
+
return nil;
|
|
324
|
+
}
|
|
325
|
+
id<FBXCElementSnapshot> element = [elementStore objectForKey:(id)[NSString stringWithCString:(const char *)attrValue encoding:NSUTF8StringEncoding]];
|
|
326
|
+
if (element) {
|
|
327
|
+
[matchingSnapshots addObject:element];
|
|
328
|
+
}
|
|
329
|
+
xmlFree(attrValue);
|
|
330
|
+
}
|
|
331
|
+
return matchingSnapshots.copy;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
+ (nullable xmlXPathObjectPtr)matchNodeInDocument:(xmlDocPtr)doc
|
|
335
|
+
elementStore:(NSDictionary<NSString *, id<FBXCElementSnapshot>> *)elementStore
|
|
336
|
+
forSnapshot:(nullable id<FBXCElementSnapshot>)snapshot
|
|
337
|
+
{
|
|
338
|
+
if (nil == snapshot) {
|
|
339
|
+
return NULL;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
NSString *contextRootUid = [FBElementUtils uidWithAccessibilityElement:[(id)snapshot accessibilityElement]];
|
|
343
|
+
if (nil == contextRootUid) {
|
|
344
|
+
return NULL;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
for (NSString *key in elementStore) {
|
|
348
|
+
id<FBXCElementSnapshot> value = [elementStore objectForKey:key];
|
|
349
|
+
NSString *snapshotUid = [FBElementUtils uidWithAccessibilityElement:[value accessibilityElement]];
|
|
350
|
+
if (nil == snapshotUid || ![snapshotUid isEqualToString:contextRootUid]) {
|
|
351
|
+
continue;
|
|
352
|
+
}
|
|
353
|
+
NSString *indexQuery = [NSString stringWithFormat:@"//*[@%@=\"%@\"]", kXMLIndexPathKey, key];
|
|
354
|
+
xmlXPathObjectPtr queryResult = [self evaluate:indexQuery
|
|
355
|
+
document:doc
|
|
356
|
+
contextNode:NULL];
|
|
357
|
+
if (NULL != queryResult) {
|
|
358
|
+
return queryResult;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
return NULL;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
+ (NSSet<Class> *)elementAttributesWithXPathQuery:(NSString *)query
|
|
365
|
+
{
|
|
366
|
+
if ([query rangeOfString:@"[^\\w@]@\\*[^\\w]" options:NSRegularExpressionSearch].location != NSNotFound) {
|
|
367
|
+
// read all element attributes if 'star' attribute name pattern is used in xpath query
|
|
368
|
+
return [NSSet setWithArray:FBElementAttribute.supportedAttributes];
|
|
369
|
+
}
|
|
370
|
+
NSMutableSet<Class> *result = [NSMutableSet set];
|
|
371
|
+
for (Class attributeCls in FBElementAttribute.supportedAttributes) {
|
|
372
|
+
if ([query rangeOfString:[NSString stringWithFormat:@"[^\\w@]@%@[^\\w]", [attributeCls name]] options:NSRegularExpressionSearch].location != NSNotFound) {
|
|
373
|
+
[result addObject:attributeCls];
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
return result.copy;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
+ (int)xmlRepresentationWithRootElement:(id<FBXCElementSnapshot>)root
|
|
380
|
+
writer:(xmlTextWriterPtr)writer
|
|
381
|
+
elementStore:(nullable NSMutableDictionary *)elementStore
|
|
382
|
+
query:(nullable NSString*)query
|
|
383
|
+
excludingAttributes:(nullable NSArray<NSString *> *)excludedAttributes
|
|
384
|
+
{
|
|
385
|
+
// Trying to be smart here and only including attributes, that were asked in the query, to the resulting document.
|
|
386
|
+
// This may speed up the lookup significantly in some cases
|
|
387
|
+
NSMutableSet<Class> *includedAttributes;
|
|
388
|
+
if (nil == query) {
|
|
389
|
+
includedAttributes = [NSMutableSet setWithArray:FBElementAttribute.supportedAttributes];
|
|
390
|
+
if (!FBConfiguration.includeHittableInPageSource) {
|
|
391
|
+
// The hittable attribute is expensive to calculate for each snapshot item
|
|
392
|
+
// thus we only include it when requested explicitly
|
|
393
|
+
[includedAttributes removeObject:FBHittableAttribute.class];
|
|
394
|
+
}
|
|
395
|
+
if (!FBConfiguration.includeNativeFrameInPageSource) {
|
|
396
|
+
// Include nativeFrame only when requested
|
|
397
|
+
[includedAttributes removeObject:FBNativeFrameAttribute.class];
|
|
398
|
+
}
|
|
399
|
+
if (!FBConfiguration.includeMinMaxValueInPageSource) {
|
|
400
|
+
// minValue/maxValue are retrieved from private APIs and may be slow on deep trees
|
|
401
|
+
[includedAttributes removeObject:FBMinValueAttribute.class];
|
|
402
|
+
[includedAttributes removeObject:FBMaxValueAttribute.class];
|
|
403
|
+
}
|
|
404
|
+
if (!FBConfiguration.includeCustomActionsInPageSource) {
|
|
405
|
+
// customActions are retrieved from accessibility attributes and may be slow on deep trees
|
|
406
|
+
[includedAttributes removeObject:FBCustomActionsAttribute.class];
|
|
407
|
+
}
|
|
408
|
+
if (nil != excludedAttributes) {
|
|
409
|
+
for (NSString *excludedAttributeName in excludedAttributes) {
|
|
410
|
+
for (Class supportedAttribute in FBElementAttribute.supportedAttributes) {
|
|
411
|
+
if ([[supportedAttribute name] caseInsensitiveCompare:excludedAttributeName] == NSOrderedSame) {
|
|
412
|
+
[includedAttributes removeObject:supportedAttribute];
|
|
413
|
+
break;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
} else {
|
|
419
|
+
includedAttributes = [self.class elementAttributesWithXPathQuery:query].mutableCopy;
|
|
420
|
+
}
|
|
421
|
+
[FBLogger logFmt:@"The following attributes were requested to be included into the XML: %@", includedAttributes];
|
|
422
|
+
|
|
423
|
+
int rc = [self writeXmlWithRootElement:root
|
|
424
|
+
indexPath:(elementStore != nil ? topNodeIndexPath : nil)
|
|
425
|
+
elementStore:elementStore
|
|
426
|
+
includedAttributes:includedAttributes.copy
|
|
427
|
+
writer:writer];
|
|
428
|
+
if (rc < 0) {
|
|
429
|
+
[FBLogger log:@"Failed to generate XML presentation of a screen element"];
|
|
430
|
+
return rc;
|
|
431
|
+
}
|
|
432
|
+
return 0;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
+ (xmlXPathObjectPtr)evaluate:(NSString *)xpathQuery
|
|
436
|
+
document:(xmlDocPtr)doc
|
|
437
|
+
contextNode:(nullable xmlNodePtr)contextNode
|
|
438
|
+
{
|
|
439
|
+
xmlXPathContextPtr xpathCtx = xmlXPathNewContext(doc);
|
|
440
|
+
if (NULL == xpathCtx) {
|
|
441
|
+
[FBLogger logFmt:@"Failed to invoke libxml2>xmlXPathNewContext for XPath query \"%@\"", xpathQuery];
|
|
442
|
+
return NULL;
|
|
443
|
+
}
|
|
444
|
+
xpathCtx->node = NULL == contextNode ? doc->children : contextNode;
|
|
445
|
+
|
|
446
|
+
xmlXPathObjectPtr xpathObj = xmlXPathEvalExpression((const xmlChar *)[xpathQuery UTF8String], xpathCtx);
|
|
447
|
+
if (NULL == xpathObj) {
|
|
448
|
+
xmlXPathFreeContext(xpathCtx);
|
|
449
|
+
[FBLogger logFmt:@"Failed to invoke libxml2>xmlXPathEvalExpression for XPath query \"%@\"", xpathQuery];
|
|
450
|
+
return NULL;
|
|
451
|
+
}
|
|
452
|
+
xmlXPathFreeContext(xpathCtx);
|
|
453
|
+
return xpathObj;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
+ (nullable NSString *)safeXmlStringWithString:(NSString *)str
|
|
457
|
+
{
|
|
458
|
+
return [str fb_xmlSafeStringWithReplacement:@""];
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
+ (int)recordElementAttributes:(xmlTextWriterPtr)writer
|
|
462
|
+
forElement:(id<FBXCElementSnapshot>)element
|
|
463
|
+
indexPath:(nullable NSString *)indexPath
|
|
464
|
+
includedAttributes:(nullable NSSet<Class> *)includedAttributes
|
|
465
|
+
{
|
|
466
|
+
for (Class attributeCls in FBElementAttribute.supportedAttributes) {
|
|
467
|
+
// include all supported attributes by default unless enumerated explicitly
|
|
468
|
+
if (includedAttributes && ![includedAttributes containsObject:attributeCls]) {
|
|
469
|
+
continue;
|
|
470
|
+
}
|
|
471
|
+
// Text-input placeholder (only for elements that support inner text)
|
|
472
|
+
if ((attributeCls == FBPlaceholderValueAttribute.class) &&
|
|
473
|
+
!FBDoesElementSupportInnerText(element.elementType)) {
|
|
474
|
+
continue;
|
|
475
|
+
}
|
|
476
|
+
// Only for elements that support min/max value
|
|
477
|
+
if ((attributeCls == FBMinValueAttribute.class || attributeCls == FBMaxValueAttribute.class) &&
|
|
478
|
+
!FBDoesElementSupportMinMaxValue(element.elementType)) {
|
|
479
|
+
continue;
|
|
480
|
+
}
|
|
481
|
+
int rc = [attributeCls recordWithWriter:writer
|
|
482
|
+
forElement:[FBXCElementSnapshotWrapper ensureWrapped:element]];
|
|
483
|
+
if (rc < 0) {
|
|
484
|
+
return rc;
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
if (nil != indexPath) {
|
|
489
|
+
// index path is the special case
|
|
490
|
+
return [FBInternalIndexAttribute recordWithWriter:writer forValue:indexPath];
|
|
491
|
+
}
|
|
492
|
+
if (element.elementType == XCUIElementTypeApplication) {
|
|
493
|
+
// only record process identifier and bundle identifier for the application element
|
|
494
|
+
int pid = [element.accessibilityElement processIdentifier];
|
|
495
|
+
if (pid > 0) {
|
|
496
|
+
int rc = [FBApplicationPidAttribute recordWithWriter:writer
|
|
497
|
+
forValue:[NSString stringWithFormat:@"%d", pid]];
|
|
498
|
+
if (rc < 0) {
|
|
499
|
+
return rc;
|
|
500
|
+
}
|
|
501
|
+
XCUIApplication *app = [[FBXCAXClientProxy sharedClient]
|
|
502
|
+
monitoredApplicationWithProcessIdentifier:pid];
|
|
503
|
+
NSString *bundleID = [app bundleID];
|
|
504
|
+
if (nil != bundleID) {
|
|
505
|
+
rc = [FBApplicationBundleIdAttribute recordWithWriter:writer
|
|
506
|
+
forValue:bundleID];
|
|
507
|
+
if (rc < 0) {
|
|
508
|
+
return rc;
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
return 0;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
+ (int)writeXmlWithRootElement:(id<FBXCElementSnapshot>)root
|
|
517
|
+
indexPath:(nullable NSString *)indexPath
|
|
518
|
+
elementStore:(nullable NSMutableDictionary *)elementStore
|
|
519
|
+
includedAttributes:(nullable NSSet<Class> *)includedAttributes
|
|
520
|
+
writer:(xmlTextWriterPtr)writer
|
|
521
|
+
{
|
|
522
|
+
NSAssert((indexPath == nil && elementStore == nil) || (indexPath != nil && elementStore != nil), @"Either both or none of indexPath and elementStore arguments should be equal to nil", nil);
|
|
523
|
+
|
|
524
|
+
NSArray<id<FBXCElementSnapshot>> *children = root.children;
|
|
525
|
+
|
|
526
|
+
if (elementStore != nil && indexPath != nil && [indexPath isEqualToString:topNodeIndexPath]) {
|
|
527
|
+
[elementStore setObject:root forKey:topNodeIndexPath];
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
FBXCElementSnapshotWrapper *wrappedSnapshot = [FBXCElementSnapshotWrapper ensureWrapped:root];
|
|
531
|
+
int rc = xmlTextWriterStartElement(writer, (xmlChar *)[wrappedSnapshot.wdType UTF8String]);
|
|
532
|
+
if (rc < 0) {
|
|
533
|
+
[FBLogger logFmt:@"Failed to invoke libxml2>xmlTextWriterStartElement for the tag value '%@'. Error code: %d", wrappedSnapshot.wdType, rc];
|
|
534
|
+
return rc;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
rc = [self recordElementAttributes:writer
|
|
538
|
+
forElement:root
|
|
539
|
+
indexPath:indexPath
|
|
540
|
+
includedAttributes:includedAttributes];
|
|
541
|
+
if (rc < 0) {
|
|
542
|
+
return rc;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
for (NSUInteger i = 0; i < [children count]; i++) {
|
|
546
|
+
@autoreleasepool {
|
|
547
|
+
id<FBXCElementSnapshot> childSnapshot = [children objectAtIndex:i];
|
|
548
|
+
NSString *newIndexPath = (indexPath != nil) ? [indexPath stringByAppendingFormat:@",%lu", (unsigned long)i] : nil;
|
|
549
|
+
if (elementStore != nil && newIndexPath != nil) {
|
|
550
|
+
[elementStore setObject:childSnapshot forKey:(id)newIndexPath];
|
|
551
|
+
}
|
|
552
|
+
rc = [self writeXmlWithRootElement:[FBXCElementSnapshotWrapper ensureWrapped:childSnapshot]
|
|
553
|
+
indexPath:newIndexPath
|
|
554
|
+
elementStore:elementStore
|
|
555
|
+
includedAttributes:includedAttributes
|
|
556
|
+
writer:writer];
|
|
557
|
+
if (rc < 0) {
|
|
558
|
+
return rc;
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
rc = xmlTextWriterEndElement(writer);
|
|
564
|
+
if (rc < 0) {
|
|
565
|
+
[FBLogger logFmt:@"Failed to invoke libxml2>xmlTextWriterEndElement. Error code: %d", rc];
|
|
566
|
+
return rc;
|
|
567
|
+
}
|
|
568
|
+
return 0;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
+ (id<FBXCElementSnapshot>)snapshotWithRoot:(id<FBElement>)root
|
|
572
|
+
useNative:(BOOL)useNative
|
|
573
|
+
{
|
|
574
|
+
if (![root isKindOfClass:XCUIElement.class]) {
|
|
575
|
+
return (id<FBXCElementSnapshot>)root;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
// https://github.com/appium/appium-xcuitest-driver/pull/2565
|
|
579
|
+
if (useNative) {
|
|
580
|
+
return [(XCUIElement *)root fb_nativeSnapshot];
|
|
581
|
+
}
|
|
582
|
+
// https://github.com/appium/WebDriverAgent/issues/1085
|
|
583
|
+
return [root isKindOfClass:XCUIApplication.class] && !FBConfiguration.enforceCustomSnapshots
|
|
584
|
+
? [(XCUIElement *)root fb_standardSnapshot]
|
|
585
|
+
: [(XCUIElement *)root fb_customSnapshot];
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
+ (void)waitUntilStableWithElement:(id<FBElement>)root
|
|
589
|
+
{
|
|
590
|
+
if ([root isKindOfClass:XCUIElement.class]) {
|
|
591
|
+
// If the app is not idle state while we retrieve the visiblity state
|
|
592
|
+
// then the snapshot retrieval operation might freeze and time out
|
|
593
|
+
[[(XCUIElement *)root application] fb_waitUntilStableWithTimeout:FBConfiguration.animationCoolOffTimeout];
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
@end
|
|
598
|
+
|
|
599
|
+
|
|
600
|
+
static NSString *const FBAbstractMethodInvocationException = @"AbstractMethodInvocationException";
|
|
601
|
+
|
|
602
|
+
@implementation FBElementAttribute
|
|
603
|
+
|
|
604
|
+
- (instancetype)initWithElement:(id<FBElement>)element
|
|
605
|
+
{
|
|
606
|
+
self = [super init];
|
|
607
|
+
if (self) {
|
|
608
|
+
_element = element;
|
|
609
|
+
}
|
|
610
|
+
return self;
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
+ (NSString *)name
|
|
614
|
+
{
|
|
615
|
+
NSString *errMsg = [NSString stringWithFormat:@"The abstract method +(NSString *)name is expected to be overriden by %@", NSStringFromClass(self.class)];
|
|
616
|
+
@throw [NSException exceptionWithName:FBAbstractMethodInvocationException reason:errMsg userInfo:nil];
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
+ (NSString *)valueForElement:(id<FBElement>)element
|
|
620
|
+
{
|
|
621
|
+
NSString *errMsg = [NSString stringWithFormat:@"The abstract method -(NSString *)value is expected to be overriden by %@", NSStringFromClass(self.class)];
|
|
622
|
+
@throw [NSException exceptionWithName:FBAbstractMethodInvocationException reason:errMsg userInfo:nil];
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
+ (int)recordWithWriter:(xmlTextWriterPtr)writer forElement:(id<FBElement>)element
|
|
626
|
+
{
|
|
627
|
+
NSString *value = [self valueForElement:element];
|
|
628
|
+
return [self recordWithWriter:writer forValue:value];
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
+ (int)recordWithWriter:(xmlTextWriterPtr)writer forValue:(nullable NSString *)value
|
|
632
|
+
{
|
|
633
|
+
if (nil == value) {
|
|
634
|
+
// Skip the attribute if the value equals to nil
|
|
635
|
+
return 0;
|
|
636
|
+
}
|
|
637
|
+
int rc = xmlTextWriterWriteAttribute(writer,
|
|
638
|
+
(xmlChar *)[[FBXPath safeXmlStringWithString:[self name]] UTF8String],
|
|
639
|
+
(xmlChar *)[[FBXPath safeXmlStringWithString:value] UTF8String]);
|
|
640
|
+
if (rc < 0) {
|
|
641
|
+
[FBLogger logFmt:@"Failed to invoke libxml2>xmlTextWriterWriteAttribute(%@='%@'). Error code: %d", [self name], value, rc];
|
|
642
|
+
}
|
|
643
|
+
return rc;
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
+ (NSArray<Class> *)supportedAttributes
|
|
647
|
+
{
|
|
648
|
+
// The list of attributes to be written for each XML node
|
|
649
|
+
// The enumeration order does matter here
|
|
650
|
+
return @[FBTypeAttribute.class,
|
|
651
|
+
FBValueAttribute.class,
|
|
652
|
+
FBNameAttribute.class,
|
|
653
|
+
FBLabelAttribute.class,
|
|
654
|
+
FBEnabledAttribute.class,
|
|
655
|
+
FBVisibleAttribute.class,
|
|
656
|
+
FBAccessibleAttribute.class,
|
|
657
|
+
#if TARGET_OS_TV
|
|
658
|
+
FBFocusedAttribute.class,
|
|
659
|
+
#endif
|
|
660
|
+
FBXAttribute.class,
|
|
661
|
+
FBYAttribute.class,
|
|
662
|
+
FBWidthAttribute.class,
|
|
663
|
+
FBHeightAttribute.class,
|
|
664
|
+
FBIndexAttribute.class,
|
|
665
|
+
FBHittableAttribute.class,
|
|
666
|
+
FBPlaceholderValueAttribute.class,
|
|
667
|
+
FBTraitsAttribute.class,
|
|
668
|
+
FBNativeFrameAttribute.class,
|
|
669
|
+
FBMinValueAttribute.class,
|
|
670
|
+
FBMaxValueAttribute.class,
|
|
671
|
+
FBCustomActionsAttribute.class,
|
|
672
|
+
];
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
@end
|
|
676
|
+
|
|
677
|
+
@implementation FBTypeAttribute
|
|
678
|
+
|
|
679
|
+
+ (NSString *)name
|
|
680
|
+
{
|
|
681
|
+
return @"type";
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
+ (NSString *)valueForElement:(id<FBElement>)element
|
|
685
|
+
{
|
|
686
|
+
return element.wdType;
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
@end
|
|
690
|
+
|
|
691
|
+
@implementation FBValueAttribute
|
|
692
|
+
|
|
693
|
+
+ (NSString *)name
|
|
694
|
+
{
|
|
695
|
+
return @"value";
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
+ (NSString *)valueForElement:(id<FBElement>)element
|
|
699
|
+
{
|
|
700
|
+
id idValue = element.wdValue;
|
|
701
|
+
if ([idValue isKindOfClass:[NSValue class]]) {
|
|
702
|
+
return [idValue stringValue];
|
|
703
|
+
} else if ([idValue isKindOfClass:[NSString class]]) {
|
|
704
|
+
return idValue;
|
|
705
|
+
}
|
|
706
|
+
return [idValue description];
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
@end
|
|
710
|
+
|
|
711
|
+
@implementation FBNameAttribute
|
|
712
|
+
|
|
713
|
+
+ (NSString *)name
|
|
714
|
+
{
|
|
715
|
+
return @"name";
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
+ (NSString *)valueForElement:(id<FBElement>)element
|
|
719
|
+
{
|
|
720
|
+
return element.wdName;
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
@end
|
|
724
|
+
|
|
725
|
+
@implementation FBLabelAttribute
|
|
726
|
+
|
|
727
|
+
+ (NSString *)name
|
|
728
|
+
{
|
|
729
|
+
return @"label";
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
+ (NSString *)valueForElement:(id<FBElement>)element
|
|
733
|
+
{
|
|
734
|
+
return element.wdLabel;
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
@end
|
|
738
|
+
|
|
739
|
+
@implementation FBEnabledAttribute
|
|
740
|
+
|
|
741
|
+
+ (NSString *)name
|
|
742
|
+
{
|
|
743
|
+
return @"enabled";
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
+ (NSString *)valueForElement:(id<FBElement>)element
|
|
747
|
+
{
|
|
748
|
+
return FBBoolToString(element.wdEnabled);
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
@end
|
|
752
|
+
|
|
753
|
+
@implementation FBVisibleAttribute
|
|
754
|
+
|
|
755
|
+
+ (NSString *)name
|
|
756
|
+
{
|
|
757
|
+
return @"visible";
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
+ (NSString *)valueForElement:(id<FBElement>)element
|
|
761
|
+
{
|
|
762
|
+
return FBBoolToString(element.wdVisible);
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
@end
|
|
766
|
+
|
|
767
|
+
@implementation FBAccessibleAttribute
|
|
768
|
+
|
|
769
|
+
+ (NSString *)name
|
|
770
|
+
{
|
|
771
|
+
return @"accessible";
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
+ (NSString *)valueForElement:(id<FBElement>)element
|
|
775
|
+
{
|
|
776
|
+
return FBBoolToString(element.wdAccessible);
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
@end
|
|
780
|
+
|
|
781
|
+
#if TARGET_OS_TV
|
|
782
|
+
|
|
783
|
+
@implementation FBFocusedAttribute
|
|
784
|
+
|
|
785
|
+
+ (NSString *)name
|
|
786
|
+
{
|
|
787
|
+
return @"focused";
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
+ (NSString *)valueForElement:(id<FBElement>)element
|
|
791
|
+
{
|
|
792
|
+
return FBBoolToString(element.wdFocused);
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
@end
|
|
796
|
+
|
|
797
|
+
#endif
|
|
798
|
+
|
|
799
|
+
@implementation FBDimensionAttribute
|
|
800
|
+
|
|
801
|
+
+ (NSString *)valueForElement:(id<FBElement>)element
|
|
802
|
+
{
|
|
803
|
+
return [NSString stringWithFormat:@"%@", [element.wdRect objectForKey:[self name]]];
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
@end
|
|
807
|
+
|
|
808
|
+
@implementation FBXAttribute
|
|
809
|
+
|
|
810
|
+
+ (NSString *)name
|
|
811
|
+
{
|
|
812
|
+
return @"x";
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
@end
|
|
816
|
+
|
|
817
|
+
@implementation FBYAttribute
|
|
818
|
+
|
|
819
|
+
+ (NSString *)name
|
|
820
|
+
{
|
|
821
|
+
return @"y";
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
@end
|
|
825
|
+
|
|
826
|
+
@implementation FBWidthAttribute
|
|
827
|
+
|
|
828
|
+
+ (NSString *)name
|
|
829
|
+
{
|
|
830
|
+
return @"width";
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
@end
|
|
834
|
+
|
|
835
|
+
@implementation FBHeightAttribute
|
|
836
|
+
|
|
837
|
+
+ (NSString *)name
|
|
838
|
+
{
|
|
839
|
+
return @"height";
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
@end
|
|
843
|
+
|
|
844
|
+
@implementation FBIndexAttribute
|
|
845
|
+
|
|
846
|
+
+ (NSString *)name
|
|
847
|
+
{
|
|
848
|
+
return @"index";
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
+ (NSString *)valueForElement:(id<FBElement>)element
|
|
852
|
+
{
|
|
853
|
+
return [NSString stringWithFormat:@"%lu", element.wdIndex];
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
@end
|
|
857
|
+
|
|
858
|
+
@implementation FBHittableAttribute
|
|
859
|
+
|
|
860
|
+
+ (NSString *)name
|
|
861
|
+
{
|
|
862
|
+
return @"hittable";
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
+ (NSString *)valueForElement:(id<FBElement>)element
|
|
866
|
+
{
|
|
867
|
+
return FBBoolToString(element.wdHittable);
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
@end
|
|
871
|
+
|
|
872
|
+
@implementation FBInternalIndexAttribute
|
|
873
|
+
|
|
874
|
+
+ (NSString *)name
|
|
875
|
+
{
|
|
876
|
+
return kXMLIndexPathKey;
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
@end
|
|
880
|
+
|
|
881
|
+
@implementation FBApplicationBundleIdAttribute : FBElementAttribute
|
|
882
|
+
|
|
883
|
+
+ (NSString *)name
|
|
884
|
+
{
|
|
885
|
+
return @"bundleId";
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
@end
|
|
889
|
+
|
|
890
|
+
@implementation FBApplicationPidAttribute : FBElementAttribute
|
|
891
|
+
|
|
892
|
+
+ (NSString *)name
|
|
893
|
+
{
|
|
894
|
+
return @"processId";
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
@end
|
|
898
|
+
|
|
899
|
+
@implementation FBPlaceholderValueAttribute
|
|
900
|
+
|
|
901
|
+
+ (NSString *)name
|
|
902
|
+
{
|
|
903
|
+
return @"placeholderValue";
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
+ (NSString *)valueForElement:(id<FBElement>)element
|
|
907
|
+
{
|
|
908
|
+
return element.wdPlaceholderValue;
|
|
909
|
+
}
|
|
910
|
+
@end
|
|
911
|
+
|
|
912
|
+
@implementation FBNativeFrameAttribute
|
|
913
|
+
|
|
914
|
+
+ (NSString *)name
|
|
915
|
+
{
|
|
916
|
+
return @"nativeFrame";
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
+ (NSString *)valueForElement:(id<FBElement>)element
|
|
920
|
+
{
|
|
921
|
+
return NSStringFromCGRect(element.wdNativeFrame);
|
|
922
|
+
}
|
|
923
|
+
@end
|
|
924
|
+
|
|
925
|
+
@implementation FBTraitsAttribute
|
|
926
|
+
|
|
927
|
+
+ (NSString *)name
|
|
928
|
+
{
|
|
929
|
+
return @"traits";
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
+ (NSString *)valueForElement:(id<FBElement>)element
|
|
933
|
+
{
|
|
934
|
+
return element.wdTraits;
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
@end
|
|
938
|
+
|
|
939
|
+
@implementation FBMinValueAttribute
|
|
940
|
+
|
|
941
|
+
+ (NSString *)name
|
|
942
|
+
{
|
|
943
|
+
return @"minValue";
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
+ (NSString *)valueForElement:(id<FBElement>)element
|
|
947
|
+
{
|
|
948
|
+
return [element.wdMinValue stringValue];
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
@end
|
|
952
|
+
|
|
953
|
+
@implementation FBMaxValueAttribute
|
|
954
|
+
|
|
955
|
+
+ (NSString *)name
|
|
956
|
+
{
|
|
957
|
+
return @"maxValue";
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
+ (NSString *)valueForElement:(id<FBElement>)element
|
|
961
|
+
{
|
|
962
|
+
return [element.wdMaxValue stringValue];
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
@end
|
|
966
|
+
|
|
967
|
+
@implementation FBCustomActionsAttribute
|
|
968
|
+
|
|
969
|
+
+ (NSString *)name
|
|
970
|
+
{
|
|
971
|
+
return @"customActions";
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
+ (NSString *)valueForElement:(id<FBElement>)element
|
|
975
|
+
{
|
|
976
|
+
return element.wdCustomActions;
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
@end
|