appium-webdriveragent 5.15.5 → 5.15.7
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/CHANGELOG.md +19 -0
- package/PrivateHeaders/XCTest/XCSynthesizedEventRecord.h +1 -0
- package/PrivateHeaders/XCTest/XCUIApplication.h +0 -1
- package/WebDriverAgent.xcodeproj/project.pbxproj +6 -18
- package/WebDriverAgentLib/Categories/XCUIApplication+FBHelpers.h +38 -0
- package/WebDriverAgentLib/Categories/XCUIApplication+FBHelpers.m +148 -5
- package/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m +1 -1
- package/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.h +0 -1
- package/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.m +5 -3
- package/WebDriverAgentLib/Categories/XCUIElement+FBTVFocuse.m +2 -2
- package/WebDriverAgentLib/Categories/XCUIElement+FBTyping.h +10 -0
- package/WebDriverAgentLib/Categories/XCUIElement+FBTyping.m +31 -15
- package/WebDriverAgentLib/Commands/FBAlertViewCommands.m +4 -4
- package/WebDriverAgentLib/Commands/FBCustomCommands.m +2 -2
- package/WebDriverAgentLib/Commands/FBDebugCommands.m +2 -3
- package/WebDriverAgentLib/Commands/FBElementCommands.m +3 -5
- package/WebDriverAgentLib/Commands/FBFindElementCommands.m +0 -1
- package/WebDriverAgentLib/Commands/FBOrientationCommands.m +9 -8
- package/WebDriverAgentLib/Commands/FBSessionCommands.m +7 -9
- package/WebDriverAgentLib/Commands/FBTouchActionCommands.m +0 -1
- package/WebDriverAgentLib/FBAlert.m +3 -3
- package/WebDriverAgentLib/Routing/FBSession.h +13 -14
- package/WebDriverAgentLib/Routing/FBSession.m +49 -46
- package/WebDriverAgentLib/Utilities/FBAlertsMonitor.m +3 -3
- package/WebDriverAgentLib/Utilities/FBConfiguration.h +1 -0
- package/WebDriverAgentLib/Utilities/FBConfiguration.m +16 -4
- package/WebDriverAgentLib/Utilities/FBKeyboard.h +0 -27
- package/WebDriverAgentLib/Utilities/FBKeyboard.m +6 -30
- package/WebDriverAgentLib/Utilities/FBMjpegServer.m +0 -1
- package/WebDriverAgentLib/Utilities/FBPasteboard.m +2 -2
- package/WebDriverAgentLib/Utilities/FBScreen.m +1 -2
- package/WebDriverAgentLib/Utilities/FBTVNavigationTracker.m +1 -2
- package/WebDriverAgentLib/Utilities/FBXCodeCompatibility.h +0 -33
- package/WebDriverAgentLib/Utilities/FBXCodeCompatibility.m +2 -40
- package/WebDriverAgentLib/WebDriverAgentLib.h +0 -1
- package/WebDriverAgentTests/IntegrationTests/FBAlertTests.m +5 -1
- package/WebDriverAgentTests/IntegrationTests/FBAppiumTouchActionsIntegrationTests.m +3 -0
- package/WebDriverAgentTests/IntegrationTests/FBAutoAlertsHandlerTests.m +2 -3
- package/WebDriverAgentTests/IntegrationTests/FBElementSwipingTests.m +6 -0
- package/WebDriverAgentTests/IntegrationTests/FBElementVisibilityTests.m +0 -1
- package/WebDriverAgentTests/IntegrationTests/FBIntegrationTestCase.h +1 -3
- package/WebDriverAgentTests/IntegrationTests/FBIntegrationTestCase.m +5 -5
- package/WebDriverAgentTests/IntegrationTests/FBKeyboardTests.m +0 -22
- package/WebDriverAgentTests/IntegrationTests/FBSafariAlertTests.m +1 -2
- package/WebDriverAgentTests/IntegrationTests/FBSessionIntegrationTests.m +11 -10
- package/WebDriverAgentTests/IntegrationTests/FBTapTest.m +10 -6
- package/WebDriverAgentTests/IntegrationTests/FBTypingTest.m +4 -0
- package/WebDriverAgentTests/IntegrationTests/FBW3CMultiTouchActionsIntegrationTests.m +0 -1
- package/WebDriverAgentTests/IntegrationTests/FBW3CTouchActionsIntegrationTests.m +3 -0
- package/WebDriverAgentTests/IntegrationTests/XCUIApplicationHelperTests.m +8 -8
- package/WebDriverAgentTests/IntegrationTests/XCUIDeviceHelperTests.m +5 -4
- package/WebDriverAgentTests/IntegrationTests/XCUIElementHelperIntegrationTests.m +0 -1
- package/WebDriverAgentTests/UnitTests/Doubles/{FBApplicationDouble.h → XCUIApplicationDouble.h} +1 -1
- package/WebDriverAgentTests/UnitTests/Doubles/{FBApplicationDouble.m → XCUIApplicationDouble.m} +3 -3
- package/WebDriverAgentTests/UnitTests/FBSessionTests.m +3 -3
- package/package.json +2 -2
- package/WebDriverAgentLib/FBApplication.h +0 -49
- package/WebDriverAgentLib/FBApplication.m +0 -185
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
## [5.15.7](https://github.com/appium/WebDriverAgent/compare/v5.15.6...v5.15.7) (2024-01-16)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Miscellaneous Chores
|
|
5
|
+
|
|
6
|
+
* **deps-dev:** bump semantic-release from 22.0.12 to 23.0.0 ([#836](https://github.com/appium/WebDriverAgent/issues/836)) ([a3ac2c5](https://github.com/appium/WebDriverAgent/commit/a3ac2c58786955507a34d0adcc4a53cd30f55014))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Code Refactoring
|
|
10
|
+
|
|
11
|
+
* Ditch FBApplication in favour of XCUIApplication extensions ([#834](https://github.com/appium/WebDriverAgent/issues/834)) ([70a8d98](https://github.com/appium/WebDriverAgent/commit/70a8d98bc15d8fc615455be07fad9c37ff8d430b))
|
|
12
|
+
|
|
13
|
+
## [5.15.6](https://github.com/appium/WebDriverAgent/compare/v5.15.5...v5.15.6) (2024-01-06)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Miscellaneous Chores
|
|
17
|
+
|
|
18
|
+
* Update keyboard typing implementation ([#832](https://github.com/appium/WebDriverAgent/issues/832)) ([06cfb3b](https://github.com/appium/WebDriverAgent/commit/06cfb3b2b895a0bec681218fce658bdfcb4d13e9))
|
|
19
|
+
|
|
1
20
|
## [5.15.5](https://github.com/appium/WebDriverAgent/compare/v5.15.4...v5.15.5) (2023-12-13)
|
|
2
21
|
|
|
3
22
|
|
|
@@ -109,7 +109,6 @@
|
|
|
109
109
|
641EE61E2240C5CA00173FCB /* FBExceptionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = EEC088E71CB56DA400B65968 /* FBExceptionHandler.m */; };
|
|
110
110
|
641EE61F2240C5CA00173FCB /* FBXCodeCompatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = EE5A24411F136C8D0078B1D9 /* FBXCodeCompatibility.m */; };
|
|
111
111
|
641EE6212240C5CA00173FCB /* FBElementTypeTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7901CAEDF0C008C271F /* FBElementTypeTransformer.m */; };
|
|
112
|
-
641EE6222240C5CA00173FCB /* FBApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7671CAEDF0C008C271F /* FBApplication.m */; };
|
|
113
112
|
641EE6232240C5CA00173FCB /* FBScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = 715AFAC01FFA29180053896D /* FBScreen.m */; };
|
|
114
113
|
641EE6242240C5CA00173FCB /* FBXCTestDaemonsProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = EE35AD7A1E3B80C000A02D78 /* FBXCTestDaemonsProxy.m */; };
|
|
115
114
|
641EE6262240C5CA00173FCB /* FBMathUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = EE1888391DA661C400307AA8 /* FBMathUtils.m */; };
|
|
@@ -142,7 +141,6 @@
|
|
|
142
141
|
641EE64B2240C5CA00173FCB /* XCTAsyncActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACCB1E3B77D600A02D78 /* XCTAsyncActivity.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
|
143
142
|
641EE64C2240C5CA00173FCB /* XCTestMisuseObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACDF1E3B77D600A02D78 /* XCTestMisuseObserver.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
|
144
143
|
641EE64D2240C5CA00173FCB /* XCTRunnerDaemonSession.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACEF1E3B77D600A02D78 /* XCTRunnerDaemonSession.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
|
145
|
-
641EE64E2240C5CA00173FCB /* FBApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7661CAEDF0C008C271F /* FBApplication.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
|
146
144
|
641EE64F2240C5CA00173FCB /* XCTestExpectationWaiter.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACDA1E3B77D600A02D78 /* XCTestExpectationWaiter.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
|
147
145
|
641EE6502240C5CA00173FCB /* UIGestureRecognizer-RecordingAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACAD1E3B77D600A02D78 /* UIGestureRecognizer-RecordingAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
|
148
146
|
641EE6512240C5CA00173FCB /* XCKeyboardKeyMap.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACBF1E3B77D600A02D78 /* XCKeyboardKeyMap.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
|
@@ -619,8 +617,6 @@
|
|
|
619
617
|
EE158AE91CBD456F00A3E3F0 /* FBElementTypeTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7901CAEDF0C008C271F /* FBElementTypeTransformer.m */; };
|
|
620
618
|
EE158AEA1CBD456F00A3E3F0 /* FBRuntimeUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7911CAEDF0C008C271F /* FBRuntimeUtils.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
|
621
619
|
EE158AEB1CBD456F00A3E3F0 /* FBRuntimeUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7921CAEDF0C008C271F /* FBRuntimeUtils.m */; };
|
|
622
|
-
EE158AF51CBD456F00A3E3F0 /* FBApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7661CAEDF0C008C271F /* FBApplication.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
|
623
|
-
EE158AF61CBD456F00A3E3F0 /* FBApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7671CAEDF0C008C271F /* FBApplication.m */; };
|
|
624
620
|
EE158B5A1CBD462100A3E3F0 /* WebDriverAgentLib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE158A991CBD452B00A3E3F0 /* WebDriverAgentLib.framework */; };
|
|
625
621
|
EE158B5F1CBD47A000A3E3F0 /* WebDriverAgentLib.h in Headers */ = {isa = PBXBuildFile; fileRef = EE158B5E1CBD47A000A3E3F0 /* WebDriverAgentLib.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
|
626
622
|
EE18883A1DA661C400307AA8 /* FBMathUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = EE1888381DA661C400307AA8 /* FBMathUtils.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
|
@@ -756,7 +752,7 @@
|
|
|
756
752
|
EE55B3271D1D54CF003AAAEC /* FBScrollingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EE55B3261D1D54CF003AAAEC /* FBScrollingTests.m */; };
|
|
757
753
|
EE5A24421F136D360078B1D9 /* FBXCodeCompatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = EE5A24411F136C8D0078B1D9 /* FBXCodeCompatibility.m */; };
|
|
758
754
|
EE6A89261D0B19E60083E92B /* FBSessionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EE6A89251D0B19E60083E92B /* FBSessionTests.m */; };
|
|
759
|
-
EE6A892B1D0B25820083E92B /*
|
|
755
|
+
EE6A892B1D0B25820083E92B /* XCUIApplicationDouble.m in Sources */ = {isa = PBXBuildFile; fileRef = EE6A89281D0B257B0083E92B /* XCUIApplicationDouble.m */; };
|
|
760
756
|
EE6A892D1D0B2AF40083E92B /* FBErrorBuilderTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EE6A892C1D0B2AF40083E92B /* FBErrorBuilderTests.m */; };
|
|
761
757
|
EE6A89371D0B35920083E92B /* FBFailureProofTestCaseTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EE6A89361D0B35920083E92B /* FBFailureProofTestCaseTests.m */; };
|
|
762
758
|
EE6A893A1D0B38640083E92B /* FBFailureProofTestCase.h in Headers */ = {isa = PBXBuildFile; fileRef = EE6A89381D0B38640083E92B /* FBFailureProofTestCase.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
|
@@ -1254,8 +1250,8 @@
|
|
|
1254
1250
|
EE5A24401F136C8D0078B1D9 /* FBXCodeCompatibility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FBXCodeCompatibility.h; sourceTree = "<group>"; };
|
|
1255
1251
|
EE5A24411F136C8D0078B1D9 /* FBXCodeCompatibility.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FBXCodeCompatibility.m; sourceTree = "<group>"; };
|
|
1256
1252
|
EE6A89251D0B19E60083E92B /* FBSessionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBSessionTests.m; sourceTree = "<group>"; };
|
|
1257
|
-
EE6A89271D0B257B0083E92B /*
|
|
1258
|
-
EE6A89281D0B257B0083E92B /*
|
|
1253
|
+
EE6A89271D0B257B0083E92B /* XCUIApplicationDouble.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XCUIApplicationDouble.h; sourceTree = "<group>"; };
|
|
1254
|
+
EE6A89281D0B257B0083E92B /* XCUIApplicationDouble.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XCUIApplicationDouble.m; sourceTree = "<group>"; };
|
|
1259
1255
|
EE6A892C1D0B2AF40083E92B /* FBErrorBuilderTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBErrorBuilderTests.m; sourceTree = "<group>"; };
|
|
1260
1256
|
EE6A89361D0B35920083E92B /* FBFailureProofTestCaseTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBFailureProofTestCaseTests.m; sourceTree = "<group>"; };
|
|
1261
1257
|
EE6A89381D0B38640083E92B /* FBFailureProofTestCase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBFailureProofTestCase.h; sourceTree = "<group>"; };
|
|
@@ -1296,8 +1292,6 @@
|
|
|
1296
1292
|
EE9AB7631CAEDF0C008C271F /* FBTouchIDCommands.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBTouchIDCommands.m; sourceTree = "<group>"; };
|
|
1297
1293
|
EE9AB7641CAEDF0C008C271F /* FBUnknownCommands.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBUnknownCommands.h; sourceTree = "<group>"; };
|
|
1298
1294
|
EE9AB7651CAEDF0C008C271F /* FBUnknownCommands.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBUnknownCommands.m; sourceTree = "<group>"; };
|
|
1299
|
-
EE9AB7661CAEDF0C008C271F /* FBApplication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FBApplication.h; path = WebDriverAgentLib/FBApplication.h; sourceTree = SOURCE_ROOT; };
|
|
1300
|
-
EE9AB7671CAEDF0C008C271F /* FBApplication.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FBApplication.m; path = WebDriverAgentLib/FBApplication.m; sourceTree = SOURCE_ROOT; };
|
|
1301
1295
|
EE9AB7731CAEDF0C008C271F /* WebDriverAgent.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = WebDriverAgent.bundle; sourceTree = "<group>"; };
|
|
1302
1296
|
EE9AB7751CAEDF0C008C271F /* FBCommandHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBCommandHandler.h; sourceTree = "<group>"; };
|
|
1303
1297
|
EE9AB7761CAEDF0C008C271F /* FBCommandStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBCommandStatus.h; sourceTree = "<group>"; };
|
|
@@ -1615,8 +1609,8 @@
|
|
|
1615
1609
|
13FFF2F1287DBEE600E561E4 /* XCElementSnapshotDouble.m */,
|
|
1616
1610
|
ADBC39961D07842800327304 /* XCUIElementDouble.h */,
|
|
1617
1611
|
ADBC39971D07842800327304 /* XCUIElementDouble.m */,
|
|
1618
|
-
EE6A89271D0B257B0083E92B /*
|
|
1619
|
-
EE6A89281D0B257B0083E92B /*
|
|
1612
|
+
EE6A89271D0B257B0083E92B /* XCUIApplicationDouble.h */,
|
|
1613
|
+
EE6A89281D0B257B0083E92B /* XCUIApplicationDouble.m */,
|
|
1620
1614
|
);
|
|
1621
1615
|
path = Doubles;
|
|
1622
1616
|
sourceTree = "<group>";
|
|
@@ -2096,8 +2090,6 @@
|
|
|
2096
2090
|
EE158B5E1CBD47A000A3E3F0 /* WebDriverAgentLib.h */,
|
|
2097
2091
|
AD6C26921CF2379700F8B5FF /* FBAlert.h */,
|
|
2098
2092
|
AD6C26931CF2379700F8B5FF /* FBAlert.m */,
|
|
2099
|
-
EE9AB7661CAEDF0C008C271F /* FBApplication.h */,
|
|
2100
|
-
EE9AB7671CAEDF0C008C271F /* FBApplication.m */,
|
|
2101
2093
|
EE3A18641CDE734B00DE4205 /* FBKeyboard.h */,
|
|
2102
2094
|
EE3A18651CDE734B00DE4205 /* FBKeyboard.m */,
|
|
2103
2095
|
EE158B5D1CBD479000A3E3F0 /* Info.plist */,
|
|
@@ -2283,7 +2275,6 @@
|
|
|
2283
2275
|
641EE64D2240C5CA00173FCB /* XCTRunnerDaemonSession.h in Headers */,
|
|
2284
2276
|
714E14B929805CAE00375DD7 /* XCAXClient_iOS+FBSnapshotReqParams.h in Headers */,
|
|
2285
2277
|
64B2650B228CE4FF002A5025 /* FBTVNavigationTracker-Private.h in Headers */,
|
|
2286
|
-
641EE64E2240C5CA00173FCB /* FBApplication.h in Headers */,
|
|
2287
2278
|
641EE64F2240C5CA00173FCB /* XCTestExpectationWaiter.h in Headers */,
|
|
2288
2279
|
13DE7A5C287CA444003243C6 /* FBXCElementSnapshotWrapper+Helpers.h in Headers */,
|
|
2289
2280
|
641EE6502240C5CA00173FCB /* UIGestureRecognizer-RecordingAdditions.h in Headers */,
|
|
@@ -2515,7 +2506,6 @@
|
|
|
2515
2506
|
EE35AD601E3B77D600A02D78 /* XCTRunnerDaemonSession.h in Headers */,
|
|
2516
2507
|
71414ED62670A1EE003A8C5D /* LRUCacheNode.h in Headers */,
|
|
2517
2508
|
64B2650A228CE4FF002A5025 /* FBTVNavigationTracker-Private.h in Headers */,
|
|
2518
|
-
EE158AF51CBD456F00A3E3F0 /* FBApplication.h in Headers */,
|
|
2519
2509
|
71B155DF23080CA600646AFB /* FBProtocolHelpers.h in Headers */,
|
|
2520
2510
|
EE35AD4B1E3B77D600A02D78 /* XCTestExpectationWaiter.h in Headers */,
|
|
2521
2511
|
EE35AD1E1E3B77D600A02D78 /* UIGestureRecognizer-RecordingAdditions.h in Headers */,
|
|
@@ -3158,7 +3148,6 @@
|
|
|
3158
3148
|
641EE61F2240C5CA00173FCB /* FBXCodeCompatibility.m in Sources */,
|
|
3159
3149
|
71E75E70254824230099FC87 /* XCUIElementQuery+FBHelpers.m in Sources */,
|
|
3160
3150
|
641EE6212240C5CA00173FCB /* FBElementTypeTransformer.m in Sources */,
|
|
3161
|
-
641EE6222240C5CA00173FCB /* FBApplication.m in Sources */,
|
|
3162
3151
|
13DE7A5E287CA444003243C6 /* FBXCElementSnapshotWrapper+Helpers.m in Sources */,
|
|
3163
3152
|
641EE6232240C5CA00173FCB /* FBScreen.m in Sources */,
|
|
3164
3153
|
71D04DCB25356C43008A052C /* XCUIElement+FBCaching.m in Sources */,
|
|
@@ -3292,7 +3281,6 @@
|
|
|
3292
3281
|
E444DC9D249131D40060D7EB /* HTTPMessage.m in Sources */,
|
|
3293
3282
|
E444DCB024913C220060D7EB /* RouteResponse.m in Sources */,
|
|
3294
3283
|
71D3B3D7267FC7260076473D /* XCUIElement+FBResolve.m in Sources */,
|
|
3295
|
-
EE158AF61CBD456F00A3E3F0 /* FBApplication.m in Sources */,
|
|
3296
3284
|
715AFAC21FFA29180053896D /* FBScreen.m in Sources */,
|
|
3297
3285
|
71B155DC230711E900646AFB /* FBCommandStatus.m in Sources */,
|
|
3298
3286
|
EE35AD7C1E3B80C000A02D78 /* FBXCTestDaemonsProxy.m in Sources */,
|
|
@@ -3360,7 +3348,7 @@
|
|
|
3360
3348
|
EE9B76591CF7987800275851 /* FBRouteTests.m in Sources */,
|
|
3361
3349
|
7139145C1DF01A12005896C2 /* NSExpressionFBFormatTests.m in Sources */,
|
|
3362
3350
|
71A224E81DE326C500844D55 /* NSPredicateFBFormatTests.m in Sources */,
|
|
3363
|
-
EE6A892B1D0B25820083E92B /*
|
|
3351
|
+
EE6A892B1D0B25820083E92B /* XCUIApplicationDouble.m in Sources */,
|
|
3364
3352
|
716F0DA62A17323300CDD977 /* NSDictionaryFBUtf8SafeTests.m in Sources */,
|
|
3365
3353
|
EE6A892D1D0B2AF40083E92B /* FBErrorBuilderTests.m in Sources */,
|
|
3366
3354
|
712A0C851DA3E459007D02E5 /* FBXPathTests.m in Sources */,
|
|
@@ -122,6 +122,44 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
122
122
|
*/
|
|
123
123
|
- (nullable NSArray<NSDictionary<NSString *, NSString*> *> *)fb_performAccessibilityAuditWithAuditTypes:(uint64_t)auditTypes
|
|
124
124
|
error:(NSError **)error;
|
|
125
|
+
/**
|
|
126
|
+
Constructor used to get current active application
|
|
127
|
+
*/
|
|
128
|
+
+ (instancetype)fb_activeApplication;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
Constructor used to get current active application
|
|
132
|
+
|
|
133
|
+
@param bundleId The bundle identifier of an app, which should be selected as active by default
|
|
134
|
+
if it is present in the list of active applications
|
|
135
|
+
*/
|
|
136
|
+
+ (instancetype)fb_activeApplicationWithDefaultBundleId:(nullable NSString *)bundleId;
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
Constructor used to get the system application (e.g. Springboard on iOS)
|
|
140
|
+
*/
|
|
141
|
+
+ (instancetype)fb_systemApplication;
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
Retrieves the list of all currently active applications
|
|
145
|
+
*/
|
|
146
|
+
+ (NSArray<XCUIApplication *> *)fb_activeApplications;
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
Switch to system app (called Springboard on iOS)
|
|
150
|
+
|
|
151
|
+
@param error If there is an error, upon return contains an NSError object that describes the problem.
|
|
152
|
+
@return YES if the operation succeeds, otherwise NO.
|
|
153
|
+
*/
|
|
154
|
+
+ (BOOL)fb_switchToSystemApplicationWithError:(NSError **)error;
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
Determines whether the other app is the same as the current one
|
|
158
|
+
|
|
159
|
+
@param otherApp Other app instance
|
|
160
|
+
@return YES if the other app has the same identifier
|
|
161
|
+
*/
|
|
162
|
+
- (BOOL)fb_isSameAppAs:(nullable XCUIApplication *)otherApp;
|
|
125
163
|
|
|
126
164
|
@end
|
|
127
165
|
|
|
@@ -9,13 +9,14 @@
|
|
|
9
9
|
|
|
10
10
|
#import "XCUIApplication+FBHelpers.h"
|
|
11
11
|
|
|
12
|
+
#import "FBActiveAppDetectionPoint.h"
|
|
12
13
|
#import "FBElementTypeTransformer.h"
|
|
13
14
|
#import "FBKeyboard.h"
|
|
14
15
|
#import "FBLogger.h"
|
|
15
16
|
#import "FBExceptions.h"
|
|
16
17
|
#import "FBMacros.h"
|
|
17
18
|
#import "FBMathUtils.h"
|
|
18
|
-
#import "
|
|
19
|
+
#import "FBRunLoopSpinner.h"
|
|
19
20
|
#import "FBXCodeCompatibility.h"
|
|
20
21
|
#import "FBXPath.h"
|
|
21
22
|
#import "FBXCAccessibilityElement.h"
|
|
@@ -23,14 +24,19 @@
|
|
|
23
24
|
#import "FBXCElementSnapshotWrapper+Helpers.h"
|
|
24
25
|
#import "FBXCAXClientProxy.h"
|
|
25
26
|
#import "FBXMLGenerationOptions.h"
|
|
27
|
+
#import "XCTestManager_ManagerInterface-Protocol.h"
|
|
28
|
+
#import "XCTestPrivateSymbols.h"
|
|
29
|
+
#import "XCTRunnerDaemonSession.h"
|
|
30
|
+
#import "XCUIApplication.h"
|
|
31
|
+
#import "XCUIApplicationImpl.h"
|
|
32
|
+
#import "XCUIApplicationProcess.h"
|
|
26
33
|
#import "XCUIDevice+FBHelpers.h"
|
|
34
|
+
#import "XCUIElement.h"
|
|
27
35
|
#import "XCUIElement+FBCaching.h"
|
|
28
36
|
#import "XCUIElement+FBIsVisible.h"
|
|
29
37
|
#import "XCUIElement+FBUtilities.h"
|
|
30
38
|
#import "XCUIElement+FBWebDriverAttributes.h"
|
|
31
|
-
#import "
|
|
32
|
-
#import "XCTestPrivateSymbols.h"
|
|
33
|
-
#import "XCTRunnerDaemonSession.h"
|
|
39
|
+
#import "XCUIElementQuery.h"
|
|
34
40
|
|
|
35
41
|
static NSString* const FBUnknownBundleId = @"unknown";
|
|
36
42
|
|
|
@@ -141,7 +147,7 @@ NSDictionary<NSNumber *, NSString *> *auditTypeValuesToNames(void) {
|
|
|
141
147
|
return NO;
|
|
142
148
|
}
|
|
143
149
|
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:MAX(duration, .0)]];
|
|
144
|
-
[self
|
|
150
|
+
[self activate];
|
|
145
151
|
return YES;
|
|
146
152
|
}
|
|
147
153
|
|
|
@@ -393,4 +399,141 @@ NSDictionary<NSNumber *, NSString *> *auditTypeValuesToNames(void) {
|
|
|
393
399
|
return isSuccessful ? resultArray.copy : nil;
|
|
394
400
|
}
|
|
395
401
|
|
|
402
|
+
+ (instancetype)fb_activeApplication
|
|
403
|
+
{
|
|
404
|
+
return [self fb_activeApplicationWithDefaultBundleId:nil];
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
+ (NSArray<XCUIApplication *> *)fb_activeApplications
|
|
408
|
+
{
|
|
409
|
+
NSArray<id<FBXCAccessibilityElement>> *activeApplicationElements = [FBXCAXClientProxy.sharedClient activeApplications];
|
|
410
|
+
NSMutableArray<XCUIApplication *> *result = [NSMutableArray array];
|
|
411
|
+
if (activeApplicationElements.count > 0) {
|
|
412
|
+
for (id<FBXCAccessibilityElement> applicationElement in activeApplicationElements) {
|
|
413
|
+
XCUIApplication *app = [XCUIApplication fb_applicationWithPID:applicationElement.processIdentifier];
|
|
414
|
+
if (nil != app) {
|
|
415
|
+
[result addObject:app];
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
return result.count > 0 ? result.copy : @[self.class.fb_systemApplication];
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
+ (instancetype)fb_activeApplicationWithDefaultBundleId:(nullable NSString *)bundleId
|
|
423
|
+
{
|
|
424
|
+
NSArray<id<FBXCAccessibilityElement>> *activeApplicationElements = [FBXCAXClientProxy.sharedClient activeApplications];
|
|
425
|
+
id<FBXCAccessibilityElement> activeApplicationElement = nil;
|
|
426
|
+
id<FBXCAccessibilityElement> currentElement = nil;
|
|
427
|
+
if (nil != bundleId) {
|
|
428
|
+
currentElement = FBActiveAppDetectionPoint.sharedInstance.axElement;
|
|
429
|
+
if (nil != currentElement) {
|
|
430
|
+
NSArray<NSDictionary *> *appInfos = [self fb_appsInfoWithAxElements:@[currentElement]];
|
|
431
|
+
[FBLogger logFmt:@"Detected on-screen application: %@", appInfos.firstObject[@"bundleId"]];
|
|
432
|
+
if ([[appInfos.firstObject objectForKey:@"bundleId"] isEqualToString:(id)bundleId]) {
|
|
433
|
+
activeApplicationElement = currentElement;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
if (nil == activeApplicationElement && activeApplicationElements.count > 1) {
|
|
438
|
+
if (nil != bundleId) {
|
|
439
|
+
NSArray<NSDictionary *> *appInfos = [self fb_appsInfoWithAxElements:activeApplicationElements];
|
|
440
|
+
NSMutableArray<NSString *> *bundleIds = [NSMutableArray array];
|
|
441
|
+
for (NSDictionary *appInfo in appInfos) {
|
|
442
|
+
[bundleIds addObject:(NSString *)appInfo[@"bundleId"]];
|
|
443
|
+
}
|
|
444
|
+
[FBLogger logFmt:@"Detected system active application(s): %@", bundleIds];
|
|
445
|
+
// Try to select the desired application first
|
|
446
|
+
for (NSUInteger appIdx = 0; appIdx < appInfos.count; appIdx++) {
|
|
447
|
+
if ([[[appInfos objectAtIndex:appIdx] objectForKey:@"bundleId"] isEqualToString:(id)bundleId]) {
|
|
448
|
+
activeApplicationElement = [activeApplicationElements objectAtIndex:appIdx];
|
|
449
|
+
break;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
// Fall back to the "normal" algorithm if the desired application is either
|
|
454
|
+
// not set or is not active
|
|
455
|
+
if (nil == activeApplicationElement) {
|
|
456
|
+
if (nil == currentElement) {
|
|
457
|
+
currentElement = FBActiveAppDetectionPoint.sharedInstance.axElement;
|
|
458
|
+
}
|
|
459
|
+
if (nil == currentElement) {
|
|
460
|
+
[FBLogger log:@"Cannot precisely detect the current application. Will use the system's recently active one"];
|
|
461
|
+
if (nil == bundleId) {
|
|
462
|
+
[FBLogger log:@"Consider changing the 'defaultActiveApplication' setting to the bundle identifier of the desired application under test"];
|
|
463
|
+
}
|
|
464
|
+
} else {
|
|
465
|
+
for (id<FBXCAccessibilityElement> appElement in activeApplicationElements) {
|
|
466
|
+
if (appElement.processIdentifier == currentElement.processIdentifier) {
|
|
467
|
+
activeApplicationElement = appElement;
|
|
468
|
+
break;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
if (nil != activeApplicationElement) {
|
|
476
|
+
XCUIApplication *application = [XCUIApplication fb_applicationWithPID:activeApplicationElement.processIdentifier];
|
|
477
|
+
if (nil != application) {
|
|
478
|
+
return application;
|
|
479
|
+
}
|
|
480
|
+
[FBLogger log:@"Cannot translate the active process identifier into an application object"];
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
if (activeApplicationElements.count > 0) {
|
|
484
|
+
[FBLogger logFmt:@"Getting the most recent active application (out of %@ total items)", @(activeApplicationElements.count)];
|
|
485
|
+
for (id<FBXCAccessibilityElement> appElement in activeApplicationElements) {
|
|
486
|
+
XCUIApplication *application = [XCUIApplication fb_applicationWithPID:appElement.processIdentifier];
|
|
487
|
+
if (nil != application) {
|
|
488
|
+
return application;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
[FBLogger log:@"Cannot retrieve any active applications. Assuming the system application is the active one"];
|
|
494
|
+
return [self fb_systemApplication];
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
+ (instancetype)fb_systemApplication
|
|
498
|
+
{
|
|
499
|
+
return [self fb_applicationWithPID:
|
|
500
|
+
[[FBXCAXClientProxy.sharedClient systemApplication] processIdentifier]];
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
+ (instancetype)fb_applicationWithPID:(pid_t)processID
|
|
504
|
+
{
|
|
505
|
+
return [FBXCAXClientProxy.sharedClient monitoredApplicationWithProcessIdentifier:processID];
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
+ (BOOL)fb_switchToSystemApplicationWithError:(NSError **)error
|
|
509
|
+
{
|
|
510
|
+
XCUIApplication *systemApp = self.fb_systemApplication;
|
|
511
|
+
@try {
|
|
512
|
+
if (!systemApp.running) {
|
|
513
|
+
[systemApp launch];
|
|
514
|
+
} else {
|
|
515
|
+
[systemApp activate];
|
|
516
|
+
}
|
|
517
|
+
} @catch (NSException *e) {
|
|
518
|
+
return [[[FBErrorBuilder alloc]
|
|
519
|
+
withDescription:nil == e ? @"Cannot open the home screen" : e.reason]
|
|
520
|
+
buildError:error];
|
|
521
|
+
}
|
|
522
|
+
return [[[[FBRunLoopSpinner new]
|
|
523
|
+
timeout:5]
|
|
524
|
+
timeoutErrorMessage:@"Timeout waiting until the home screen is visible"]
|
|
525
|
+
spinUntilTrue:^BOOL{
|
|
526
|
+
return [systemApp fb_isSameAppAs:self.fb_activeApplication];
|
|
527
|
+
}
|
|
528
|
+
error:error];
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
- (BOOL)fb_isSameAppAs:(nullable XCUIApplication *)otherApp
|
|
532
|
+
{
|
|
533
|
+
if (nil == otherApp) {
|
|
534
|
+
return NO;
|
|
535
|
+
}
|
|
536
|
+
return [self.bundleID isEqualToString:(NSString *)otherApp.bundleID];
|
|
537
|
+
}
|
|
538
|
+
|
|
396
539
|
@end
|
|
@@ -56,7 +56,7 @@ static bool fb_isLocked;
|
|
|
56
56
|
|
|
57
57
|
- (BOOL)fb_goToHomescreenWithError:(NSError **)error
|
|
58
58
|
{
|
|
59
|
-
return [
|
|
59
|
+
return [XCUIApplication fb_switchToSystemApplicationWithError:error];
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
- (BOOL)fb_lockScreen:(NSError **)error
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
#import "XCUIDevice+FBRotation.h"
|
|
11
11
|
|
|
12
12
|
#import "FBConfiguration.h"
|
|
13
|
+
#import "XCUIApplication.h"
|
|
14
|
+
#import "XCUIApplication+FBHelpers.h"
|
|
13
15
|
#import "XCUIElement+FBUtilities.h"
|
|
14
16
|
|
|
15
17
|
# if !TARGET_OS_TV
|
|
@@ -18,7 +20,7 @@
|
|
|
18
20
|
|
|
19
21
|
- (BOOL)fb_setDeviceInterfaceOrientation:(UIDeviceOrientation)orientation
|
|
20
22
|
{
|
|
21
|
-
|
|
23
|
+
XCUIApplication *application = XCUIApplication.fb_activeApplication;
|
|
22
24
|
[XCUIDevice sharedDevice].orientation = orientation;
|
|
23
25
|
return [self waitUntilInterfaceIsAtOrientation:orientation application:application];
|
|
24
26
|
}
|
|
@@ -30,12 +32,12 @@
|
|
|
30
32
|
return NO;
|
|
31
33
|
}
|
|
32
34
|
NSInteger orientation = keysForRotationObj.firstObject.integerValue;
|
|
33
|
-
|
|
35
|
+
XCUIApplication *application = XCUIApplication.fb_activeApplication;
|
|
34
36
|
[XCUIDevice sharedDevice].orientation = orientation;
|
|
35
37
|
return [self waitUntilInterfaceIsAtOrientation:orientation application:application];
|
|
36
38
|
}
|
|
37
39
|
|
|
38
|
-
- (BOOL)waitUntilInterfaceIsAtOrientation:(NSInteger)orientation application:(
|
|
40
|
+
- (BOOL)waitUntilInterfaceIsAtOrientation:(NSInteger)orientation application:(XCUIApplication *)application
|
|
39
41
|
{
|
|
40
42
|
// Tapping elements immediately after rotation may fail due to way UIKit is handling touches.
|
|
41
43
|
// We should wait till UI cools off, before continuing
|
|
@@ -10,10 +10,10 @@
|
|
|
10
10
|
#import "XCUIElement+FBTVFocuse.h"
|
|
11
11
|
|
|
12
12
|
#import <XCTest/XCUIRemote.h>
|
|
13
|
-
#import "FBApplication.h"
|
|
14
13
|
#import "FBConfiguration.h"
|
|
15
14
|
#import "FBErrorBuilder.h"
|
|
16
15
|
#import <FBTVNavigationTracker.h>
|
|
16
|
+
#import "XCUIApplication+FBHelpers.h"
|
|
17
17
|
#import "XCUIElement+FBUtilities.h"
|
|
18
18
|
#import "XCUIElement+FBWebDriverAttributes.h"
|
|
19
19
|
|
|
@@ -25,7 +25,7 @@ int const MAX_ITERATIONS_COUNT = 100;
|
|
|
25
25
|
|
|
26
26
|
- (BOOL)fb_setFocusWithError:(NSError**) error
|
|
27
27
|
{
|
|
28
|
-
[
|
|
28
|
+
[XCUIApplication.fb_activeApplication fb_waitUntilStableWithTimeout:FBConfiguration.animationCoolOffTimeout];
|
|
29
29
|
|
|
30
30
|
if (!self.wdEnabled) {
|
|
31
31
|
if (error) {
|
|
@@ -11,6 +11,16 @@
|
|
|
11
11
|
|
|
12
12
|
NS_ASSUME_NONNULL_BEGIN
|
|
13
13
|
|
|
14
|
+
/**
|
|
15
|
+
Types a text into the currently focused element.
|
|
16
|
+
|
|
17
|
+
@param text text that should be typed
|
|
18
|
+
@param typingSpeed Frequency of typing (letters per sec)
|
|
19
|
+
@param error If there is an error, upon return contains an NSError object that describes the problem.
|
|
20
|
+
@return YES if the operation succeeds, otherwise NO.
|
|
21
|
+
*/
|
|
22
|
+
BOOL FBTypeText(NSString *text, NSUInteger typingSpeed, NSError **error);
|
|
23
|
+
|
|
14
24
|
@interface XCUIElement (FBTyping)
|
|
15
25
|
|
|
16
26
|
/**
|
|
@@ -11,17 +11,34 @@
|
|
|
11
11
|
|
|
12
12
|
#import "FBConfiguration.h"
|
|
13
13
|
#import "FBErrorBuilder.h"
|
|
14
|
-
#import "FBKeyboard.h"
|
|
15
|
-
#import "NSString+FBVisualLength.h"
|
|
16
14
|
#import "FBXCElementSnapshotWrapper.h"
|
|
17
15
|
#import "FBXCElementSnapshotWrapper+Helpers.h"
|
|
16
|
+
#import "FBXCodeCompatibility.h"
|
|
17
|
+
#import "FBXCTestDaemonsProxy.h"
|
|
18
|
+
#import "NSString+FBVisualLength.h"
|
|
18
19
|
#import "XCUIDevice+FBHelpers.h"
|
|
19
20
|
#import "XCUIElement+FBCaching.h"
|
|
20
21
|
#import "XCUIElement+FBUtilities.h"
|
|
21
|
-
#import "
|
|
22
|
+
#import "XCSynthesizedEventRecord.h"
|
|
23
|
+
#import "XCPointerEventPath.h"
|
|
22
24
|
|
|
25
|
+
#define MAX_TEXT_ABBR_LEN 12
|
|
23
26
|
#define MAX_CLEAR_RETRIES 3
|
|
24
27
|
|
|
28
|
+
BOOL FBTypeText(NSString *text, NSUInteger typingSpeed, NSError **error)
|
|
29
|
+
{
|
|
30
|
+
NSString *name = text.length <= MAX_TEXT_ABBR_LEN
|
|
31
|
+
? [NSString stringWithFormat:@"Type '%@'", text]
|
|
32
|
+
: [NSString stringWithFormat:@"Type '%@…'", [text substringToIndex:MAX_TEXT_ABBR_LEN]];
|
|
33
|
+
XCSynthesizedEventRecord *eventRecord = [[XCSynthesizedEventRecord alloc] initWithName:name];
|
|
34
|
+
XCPointerEventPath *ep = [[XCPointerEventPath alloc] initForTextInput];
|
|
35
|
+
[ep typeText:text
|
|
36
|
+
atOffset:0.0
|
|
37
|
+
typingSpeed:typingSpeed
|
|
38
|
+
shouldRedact:NO];
|
|
39
|
+
[eventRecord addPointerEventPath:ep];
|
|
40
|
+
return [FBXCTestDaemonsProxy synthesizeEventWithRecord:eventRecord error:error];
|
|
41
|
+
}
|
|
25
42
|
|
|
26
43
|
@interface NSString (FBRepeat)
|
|
27
44
|
|
|
@@ -96,13 +113,12 @@
|
|
|
96
113
|
id<FBXCElementSnapshot> snapshot = self.fb_isResolvedFromCache.boolValue
|
|
97
114
|
? self.lastSnapshot
|
|
98
115
|
: self.fb_takeSnapshot;
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
error:error]) {
|
|
116
|
+
FBXCElementSnapshotWrapper *wrapped = [FBXCElementSnapshotWrapper ensureWrapped:snapshot];
|
|
117
|
+
[self fb_prepareForTextInputWithSnapshot:wrapped];
|
|
118
|
+
if (shouldClear && ![self fb_clearTextWithSnapshot:wrapped shouldPrepareForInput:NO error:error]) {
|
|
103
119
|
return NO;
|
|
104
120
|
}
|
|
105
|
-
return
|
|
121
|
+
return FBTypeText(text, frequency, error);
|
|
106
122
|
}
|
|
107
123
|
|
|
108
124
|
- (BOOL)fb_clearTextWithError:(NSError **)error
|
|
@@ -122,15 +138,15 @@
|
|
|
122
138
|
id currentValue = snapshot.value;
|
|
123
139
|
if (nil != currentValue && ![currentValue isKindOfClass:NSString.class]) {
|
|
124
140
|
return [[[FBErrorBuilder builder]
|
|
125
|
-
|
|
126
|
-
|
|
141
|
+
withDescriptionFormat:@"The value of '%@' is not a string and thus cannot be edited", snapshot.fb_description]
|
|
142
|
+
buildError:error];
|
|
127
143
|
}
|
|
128
|
-
|
|
144
|
+
|
|
129
145
|
if (nil == currentValue || 0 == [currentValue fb_visualLength]) {
|
|
130
146
|
// Short circuit if the content is not present
|
|
131
147
|
return YES;
|
|
132
148
|
}
|
|
133
|
-
|
|
149
|
+
|
|
134
150
|
static NSString *backspaceDeleteSequence;
|
|
135
151
|
static dispatch_once_t onceToken;
|
|
136
152
|
dispatch_once(&onceToken, ^{
|
|
@@ -160,8 +176,8 @@
|
|
|
160
176
|
} else if (retry >= MAX_CLEAR_RETRIES - 1) {
|
|
161
177
|
// Last chance retry. Tripple-tap the field to select its content
|
|
162
178
|
[self tapWithNumberOfTaps:3 numberOfTouches:1];
|
|
163
|
-
return
|
|
164
|
-
} else if (!
|
|
179
|
+
return FBTypeText(backspaceDeleteSequence, FBConfiguration.defaultTypingFrequency, error);
|
|
180
|
+
} else if (!FBTypeText(backspacesToType, FBConfiguration.defaultTypingFrequency, error)) {
|
|
165
181
|
// 2nd operation
|
|
166
182
|
return NO;
|
|
167
183
|
}
|
|
@@ -181,7 +197,7 @@
|
|
|
181
197
|
// kHIDPage_KeyboardOrKeypad did not work for tvOS's search field. (tvOS 17 at least)
|
|
182
198
|
// Tested XCUIElementTypeSearchField and XCUIElementTypeTextView whch were
|
|
183
199
|
// common search field and email/passowrd input in tvOS apps.
|
|
184
|
-
return
|
|
200
|
+
return FBTypeText(backspacesToType, FBConfiguration.defaultTypingFrequency, error);
|
|
185
201
|
#endif
|
|
186
202
|
}
|
|
187
203
|
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
#import "FBAlertViewCommands.h"
|
|
11
11
|
|
|
12
12
|
#import "FBAlert.h"
|
|
13
|
-
#import "FBApplication.h"
|
|
14
13
|
#import "FBRouteRequest.h"
|
|
15
14
|
#import "FBSession.h"
|
|
15
|
+
#import "XCUIApplication+FBHelpers.h"
|
|
16
16
|
|
|
17
17
|
@implementation FBAlertViewCommands
|
|
18
18
|
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
|
|
39
39
|
+ (id<FBResponsePayload>)handleAlertGetTextCommand:(FBRouteRequest *)request
|
|
40
40
|
{
|
|
41
|
-
|
|
41
|
+
XCUIApplication *application = request.session.activeApplication ?: XCUIApplication.fb_activeApplication;
|
|
42
42
|
NSString *alertText = [FBAlert alertWithApplication:application].text;
|
|
43
43
|
if (!alertText) {
|
|
44
44
|
return FBResponseWithStatus([FBCommandStatus noAlertOpenErrorWithMessage:nil
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
|
|
74
74
|
+ (id<FBResponsePayload>)handleAlertAcceptCommand:(FBRouteRequest *)request
|
|
75
75
|
{
|
|
76
|
-
|
|
76
|
+
XCUIApplication *application = request.session.activeApplication ?: XCUIApplication.fb_activeApplication;
|
|
77
77
|
NSString *name = request.arguments[@"name"];
|
|
78
78
|
FBAlert *alert = [FBAlert alertWithApplication:application];
|
|
79
79
|
NSError *error;
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
|
|
97
97
|
+ (id<FBResponsePayload>)handleAlertDismissCommand:(FBRouteRequest *)request
|
|
98
98
|
{
|
|
99
|
-
|
|
99
|
+
XCUIApplication *application = request.session.activeApplication ?: XCUIApplication.fb_activeApplication;
|
|
100
100
|
NSString *name = request.arguments[@"name"];
|
|
101
101
|
FBAlert *alert = [FBAlert alertWithApplication:application];
|
|
102
102
|
NSError *error;
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
#import <XCTest/XCUIDevice.h>
|
|
13
13
|
#import <CoreLocation/CoreLocation.h>
|
|
14
14
|
|
|
15
|
-
#import "FBApplication.h"
|
|
16
15
|
#import "FBConfiguration.h"
|
|
17
16
|
#import "FBKeyboard.h"
|
|
18
17
|
#import "FBNotificationsHelper.h"
|
|
@@ -24,6 +23,7 @@
|
|
|
24
23
|
#import "FBScreen.h"
|
|
25
24
|
#import "FBSession.h"
|
|
26
25
|
#import "FBXCodeCompatibility.h"
|
|
26
|
+
#import "XCUIApplication.h"
|
|
27
27
|
#import "XCUIApplication+FBHelpers.h"
|
|
28
28
|
#import "XCUIDevice+FBHelpers.h"
|
|
29
29
|
#import "XCUIElement.h"
|
|
@@ -171,7 +171,7 @@
|
|
|
171
171
|
|
|
172
172
|
+ (id<FBResponsePayload>)handleActiveAppInfo:(FBRouteRequest *)request
|
|
173
173
|
{
|
|
174
|
-
XCUIApplication *app = request.session.activeApplication ?:
|
|
174
|
+
XCUIApplication *app = request.session.activeApplication ?: XCUIApplication.fb_activeApplication;
|
|
175
175
|
return FBResponseWithObject(@{
|
|
176
176
|
@"pid": @(app.processID),
|
|
177
177
|
@"bundleId": app.bundleID,
|