appium-webdriveragent 16.2.2 → 16.3.0
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 +6 -0
- package/PrivateHeaders/XCTest/XCSynthesizedEventRecord.h +3 -3
- package/PrivateHeaders/XCTest/XCUIApplication.h +1 -1
- package/PrivateHeaders/XCTest/XCUIElement.h +1 -1
- package/Scripts/build.sh +6 -0
- package/WebDriverAgent.xcodeproj/project.pbxproj +1482 -2
- package/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/IntegrationApp_watchOS.xcscheme +76 -0
- package/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/IntegrationTests_watchOS.xcscheme +86 -0
- package/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentLib_watchOS.xcscheme +85 -0
- package/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentRunner.xcscheme +1 -1
- package/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentRunner_watchOS.xcscheme +128 -0
- package/WebDriverAgentLib/Categories/XCUIApplication+FBAlert.m +5 -0
- package/WebDriverAgentLib/Categories/XCUIApplication+FBHelpers.m +2 -0
- package/WebDriverAgentLib/Categories/XCUIApplication+FBTouchAction.m +1 -1
- package/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m +4 -4
- package/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.h +1 -1
- package/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.m +1 -1
- package/WebDriverAgentLib/Categories/XCUIElement+FBPickerWheel.m +1 -1
- package/WebDriverAgentLib/Categories/XCUIElement+FBTyping.m +11 -0
- package/WebDriverAgentLib/Commands/FBCustomCommands.m +19 -4
- package/WebDriverAgentLib/Commands/FBElementCommands.m +6 -5
- package/WebDriverAgentLib/Commands/FBOrientationCommands.m +1 -1
- package/WebDriverAgentLib/Commands/FBSessionCommands.m +29 -5
- package/WebDriverAgentLib/Info.plist +2 -2
- package/WebDriverAgentLib/Routing/FBTCPSocket.h +70 -0
- package/WebDriverAgentLib/Routing/FBTCPSocket.m +199 -0
- package/WebDriverAgentLib/Routing/FBWebServer.m +33 -3
- package/WebDriverAgentLib/Routing/WatchOS/FBWatchHTTPServer.h +68 -0
- package/WebDriverAgentLib/Routing/WatchOS/FBWatchHTTPServer.m +376 -0
- package/WebDriverAgentLib/Routing/WatchOS/RouteRequest.h +30 -0
- package/WebDriverAgentLib/Routing/WatchOS/RouteRequest.m +25 -0
- package/WebDriverAgentLib/Routing/WatchOS/RouteResponse.h +30 -0
- package/WebDriverAgentLib/Routing/WatchOS/RouteResponse.m +54 -0
- package/WebDriverAgentLib/Utilities/FBActiveAppDetectionPoint.m +8 -0
- package/WebDriverAgentLib/Utilities/FBBaseActionsSynthesizer.h +1 -1
- package/WebDriverAgentLib/Utilities/FBBaseActionsSynthesizer.m +1 -1
- package/WebDriverAgentLib/Utilities/FBConfiguration.h +1 -1
- package/WebDriverAgentLib/Utilities/FBConfiguration.m +3 -3
- package/WebDriverAgentLib/Utilities/FBImageProcessor.m +7 -2
- package/WebDriverAgentLib/Utilities/FBMacros.h +14 -5
- package/WebDriverAgentLib/Utilities/FBMathUtils.h +1 -1
- package/WebDriverAgentLib/Utilities/FBMathUtils.m +1 -1
- package/WebDriverAgentLib/Utilities/FBPasteboard.h +1 -1
- package/WebDriverAgentLib/Utilities/FBPasteboard.m +1 -1
- package/WebDriverAgentLib/Utilities/FBSettingsHandler.m +2 -2
- package/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.h +1 -1
- package/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.m +1 -1
- package/WebDriverAgentTests/IntegrationApp_watchOS/ContentView.swift +31 -0
- package/WebDriverAgentTests/IntegrationApp_watchOS/WatchSpikeApp.swift +18 -0
- package/WebDriverAgentTests/IntegrationTests/FBForceTouchTests.m +3 -0
- package/WebDriverAgentTests/IntegrationTests/FBPasteboardTests.m +3 -2
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDAAlertIntegrationTests.swift +23 -0
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDAAppLifecycleIntegrationTests.swift +57 -0
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDAClickIntegrationTests.swift +31 -0
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDADeviceIntegrationTests.swift +50 -0
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDAElementAttributeIntegrationTests.swift +57 -0
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDAFindIntegrationTests.swift +126 -0
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDAScreenshotAndSourceIntegrationTests.swift +52 -0
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDASessionIntegrationTests.swift +72 -0
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDATypingIntegrationTests.swift +57 -0
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDAUnknownCommandIntegrationTests.swift +24 -0
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDAWatchHTTPClient.swift +95 -0
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDAWatchIntegrationTestCase.swift +61 -0
- package/package.json +1 -1
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<Scheme
|
|
3
|
+
LastUpgradeVersion = "2600"
|
|
4
|
+
version = "1.3">
|
|
5
|
+
<BuildAction
|
|
6
|
+
parallelizeBuildables = "YES"
|
|
7
|
+
buildImplicitDependencies = "YES">
|
|
8
|
+
<BuildActionEntries>
|
|
9
|
+
<BuildActionEntry
|
|
10
|
+
buildForTesting = "YES"
|
|
11
|
+
buildForRunning = "YES"
|
|
12
|
+
buildForProfiling = "YES"
|
|
13
|
+
buildForArchiving = "YES"
|
|
14
|
+
buildForAnalyzing = "YES">
|
|
15
|
+
<BuildableReference
|
|
16
|
+
BuildableIdentifier = "primary"
|
|
17
|
+
BlueprintIdentifier = "9D6B02D8FC050BAF7159284F"
|
|
18
|
+
BuildableName = "IntegrationApp_watchOS.app"
|
|
19
|
+
BlueprintName = "IntegrationApp_watchOS"
|
|
20
|
+
ReferencedContainer = "container:WebDriverAgent.xcodeproj">
|
|
21
|
+
</BuildableReference>
|
|
22
|
+
</BuildActionEntry>
|
|
23
|
+
</BuildActionEntries>
|
|
24
|
+
</BuildAction>
|
|
25
|
+
<TestAction
|
|
26
|
+
buildConfiguration = "Debug"
|
|
27
|
+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
28
|
+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
29
|
+
shouldUseLaunchSchemeArgsEnv = "YES">
|
|
30
|
+
<Testables>
|
|
31
|
+
</Testables>
|
|
32
|
+
</TestAction>
|
|
33
|
+
<LaunchAction
|
|
34
|
+
buildConfiguration = "Debug"
|
|
35
|
+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
36
|
+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
37
|
+
launchStyle = "0"
|
|
38
|
+
useCustomWorkingDirectory = "NO"
|
|
39
|
+
ignoresPersistentStateOnLaunch = "NO"
|
|
40
|
+
debugDocumentVersioning = "YES"
|
|
41
|
+
debugServiceExtension = "internal"
|
|
42
|
+
allowLocationSimulation = "YES">
|
|
43
|
+
<BuildableProductRunnable
|
|
44
|
+
runnableDebuggingMode = "0">
|
|
45
|
+
<BuildableReference
|
|
46
|
+
BuildableIdentifier = "primary"
|
|
47
|
+
BlueprintIdentifier = "9D6B02D8FC050BAF7159284F"
|
|
48
|
+
BuildableName = "IntegrationApp_watchOS.app"
|
|
49
|
+
ReferencedContainer = "container:WebDriverAgent.xcodeproj">
|
|
50
|
+
</BuildableReference>
|
|
51
|
+
</BuildableProductRunnable>
|
|
52
|
+
</LaunchAction>
|
|
53
|
+
<ProfileAction
|
|
54
|
+
buildConfiguration = "Release"
|
|
55
|
+
shouldUseLaunchSchemeArgsEnv = "YES"
|
|
56
|
+
savedToolIdentifier = ""
|
|
57
|
+
useCustomWorkingDirectory = "NO"
|
|
58
|
+
debugDocumentVersioning = "YES">
|
|
59
|
+
<BuildableProductRunnable
|
|
60
|
+
runnableDebuggingMode = "0">
|
|
61
|
+
<BuildableReference
|
|
62
|
+
BuildableIdentifier = "primary"
|
|
63
|
+
BlueprintIdentifier = "9D6B02D8FC050BAF7159284F"
|
|
64
|
+
BuildableName = "IntegrationApp_watchOS.app"
|
|
65
|
+
ReferencedContainer = "container:WebDriverAgent.xcodeproj">
|
|
66
|
+
</BuildableReference>
|
|
67
|
+
</BuildableProductRunnable>
|
|
68
|
+
</ProfileAction>
|
|
69
|
+
<AnalyzeAction
|
|
70
|
+
buildConfiguration = "Debug">
|
|
71
|
+
</AnalyzeAction>
|
|
72
|
+
<ArchiveAction
|
|
73
|
+
buildConfiguration = "Release"
|
|
74
|
+
revealArchiveInOrganizer = "YES">
|
|
75
|
+
</ArchiveAction>
|
|
76
|
+
</Scheme>
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<Scheme
|
|
3
|
+
LastUpgradeVersion = "2600"
|
|
4
|
+
version = "1.3">
|
|
5
|
+
<BuildAction
|
|
6
|
+
parallelizeBuildables = "YES"
|
|
7
|
+
buildImplicitDependencies = "YES">
|
|
8
|
+
<BuildActionEntries>
|
|
9
|
+
<BuildActionEntry
|
|
10
|
+
buildForTesting = "YES"
|
|
11
|
+
buildForRunning = "YES"
|
|
12
|
+
buildForProfiling = "NO"
|
|
13
|
+
buildForArchiving = "NO"
|
|
14
|
+
buildForAnalyzing = "NO">
|
|
15
|
+
<BuildableReference
|
|
16
|
+
BuildableIdentifier = "primary"
|
|
17
|
+
BlueprintIdentifier = "4632809915F58C9095914E85"
|
|
18
|
+
BuildableName = "IntegrationTests_watchOS.xctest"
|
|
19
|
+
BlueprintName = "IntegrationTests_watchOS"
|
|
20
|
+
ReferencedContainer = "container:WebDriverAgent.xcodeproj">
|
|
21
|
+
</BuildableReference>
|
|
22
|
+
</BuildActionEntry>
|
|
23
|
+
</BuildActionEntries>
|
|
24
|
+
</BuildAction>
|
|
25
|
+
<TestAction
|
|
26
|
+
buildConfiguration = "Debug"
|
|
27
|
+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
28
|
+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
29
|
+
shouldUseLaunchSchemeArgsEnv = "YES">
|
|
30
|
+
<Testables>
|
|
31
|
+
<TestableReference
|
|
32
|
+
skipped = "NO">
|
|
33
|
+
<BuildableReference
|
|
34
|
+
BuildableIdentifier = "primary"
|
|
35
|
+
BlueprintIdentifier = "4632809915F58C9095914E85"
|
|
36
|
+
BuildableName = "IntegrationTests_watchOS.xctest"
|
|
37
|
+
BlueprintName = "IntegrationTests_watchOS"
|
|
38
|
+
ReferencedContainer = "container:WebDriverAgent.xcodeproj">
|
|
39
|
+
</BuildableReference>
|
|
40
|
+
</TestableReference>
|
|
41
|
+
</Testables>
|
|
42
|
+
</TestAction>
|
|
43
|
+
<LaunchAction
|
|
44
|
+
buildConfiguration = "Debug"
|
|
45
|
+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
46
|
+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
47
|
+
launchStyle = "0"
|
|
48
|
+
useCustomWorkingDirectory = "NO"
|
|
49
|
+
ignoresPersistentStateOnLaunch = "NO"
|
|
50
|
+
debugDocumentVersioning = "YES"
|
|
51
|
+
debugServiceExtension = "internal"
|
|
52
|
+
allowLocationSimulation = "YES">
|
|
53
|
+
<MacroExpansion>
|
|
54
|
+
<BuildableReference
|
|
55
|
+
BuildableIdentifier = "primary"
|
|
56
|
+
BlueprintIdentifier = "4632809915F58C9095914E85"
|
|
57
|
+
BuildableName = "IntegrationTests_watchOS.xctest"
|
|
58
|
+
BlueprintName = "IntegrationTests_watchOS"
|
|
59
|
+
ReferencedContainer = "container:WebDriverAgent.xcodeproj">
|
|
60
|
+
</BuildableReference>
|
|
61
|
+
</MacroExpansion>
|
|
62
|
+
</LaunchAction>
|
|
63
|
+
<ProfileAction
|
|
64
|
+
buildConfiguration = "Release"
|
|
65
|
+
shouldUseLaunchSchemeArgsEnv = "YES"
|
|
66
|
+
savedToolIdentifier = ""
|
|
67
|
+
useCustomWorkingDirectory = "NO"
|
|
68
|
+
debugDocumentVersioning = "YES">
|
|
69
|
+
<MacroExpansion>
|
|
70
|
+
<BuildableReference
|
|
71
|
+
BuildableIdentifier = "primary"
|
|
72
|
+
BlueprintIdentifier = "4632809915F58C9095914E85"
|
|
73
|
+
BuildableName = "IntegrationTests_watchOS.xctest"
|
|
74
|
+
BlueprintName = "IntegrationTests_watchOS"
|
|
75
|
+
ReferencedContainer = "container:WebDriverAgent.xcodeproj">
|
|
76
|
+
</BuildableReference>
|
|
77
|
+
</MacroExpansion>
|
|
78
|
+
</ProfileAction>
|
|
79
|
+
<AnalyzeAction
|
|
80
|
+
buildConfiguration = "Debug">
|
|
81
|
+
</AnalyzeAction>
|
|
82
|
+
<ArchiveAction
|
|
83
|
+
buildConfiguration = "Release"
|
|
84
|
+
revealArchiveInOrganizer = "YES">
|
|
85
|
+
</ArchiveAction>
|
|
86
|
+
</Scheme>
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<Scheme
|
|
3
|
+
LastUpgradeVersion = "2600"
|
|
4
|
+
version = "1.3">
|
|
5
|
+
<BuildAction
|
|
6
|
+
parallelizeBuildables = "YES"
|
|
7
|
+
buildImplicitDependencies = "YES">
|
|
8
|
+
<BuildActionEntries>
|
|
9
|
+
<BuildActionEntry
|
|
10
|
+
buildForTesting = "YES"
|
|
11
|
+
buildForRunning = "YES"
|
|
12
|
+
buildForProfiling = "YES"
|
|
13
|
+
buildForArchiving = "YES"
|
|
14
|
+
buildForAnalyzing = "YES">
|
|
15
|
+
<BuildableReference
|
|
16
|
+
BuildableIdentifier = "primary"
|
|
17
|
+
BlueprintIdentifier = "95186DE2383671DFA81D7FCB"
|
|
18
|
+
BuildableName = "WebDriverAgentLib_watchOS.framework"
|
|
19
|
+
BlueprintName = "WebDriverAgentLib_watchOS"
|
|
20
|
+
ReferencedContainer = "container:WebDriverAgent.xcodeproj">
|
|
21
|
+
</BuildableReference>
|
|
22
|
+
</BuildActionEntry>
|
|
23
|
+
</BuildActionEntries>
|
|
24
|
+
</BuildAction>
|
|
25
|
+
<TestAction
|
|
26
|
+
buildConfiguration = "Debug"
|
|
27
|
+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
28
|
+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
29
|
+
shouldUseLaunchSchemeArgsEnv = "YES">
|
|
30
|
+
<MacroExpansion>
|
|
31
|
+
<BuildableReference
|
|
32
|
+
BuildableIdentifier = "primary"
|
|
33
|
+
BlueprintIdentifier = "95186DE2383671DFA81D7FCB"
|
|
34
|
+
BuildableName = "WebDriverAgentLib_watchOS.framework"
|
|
35
|
+
BlueprintName = "WebDriverAgentLib_watchOS"
|
|
36
|
+
ReferencedContainer = "container:WebDriverAgent.xcodeproj">
|
|
37
|
+
</BuildableReference>
|
|
38
|
+
</MacroExpansion>
|
|
39
|
+
<Testables>
|
|
40
|
+
</Testables>
|
|
41
|
+
</TestAction>
|
|
42
|
+
<LaunchAction
|
|
43
|
+
buildConfiguration = "Debug"
|
|
44
|
+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
45
|
+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
46
|
+
launchStyle = "0"
|
|
47
|
+
useCustomWorkingDirectory = "NO"
|
|
48
|
+
ignoresPersistentStateOnLaunch = "NO"
|
|
49
|
+
debugDocumentVersioning = "YES"
|
|
50
|
+
debugServiceExtension = "internal"
|
|
51
|
+
allowLocationSimulation = "YES">
|
|
52
|
+
<MacroExpansion>
|
|
53
|
+
<BuildableReference
|
|
54
|
+
BuildableIdentifier = "primary"
|
|
55
|
+
BlueprintIdentifier = "95186DE2383671DFA81D7FCB"
|
|
56
|
+
BuildableName = "WebDriverAgentLib_watchOS.framework"
|
|
57
|
+
BlueprintName = "WebDriverAgentLib_watchOS"
|
|
58
|
+
ReferencedContainer = "container:WebDriverAgent.xcodeproj">
|
|
59
|
+
</BuildableReference>
|
|
60
|
+
</MacroExpansion>
|
|
61
|
+
</LaunchAction>
|
|
62
|
+
<ProfileAction
|
|
63
|
+
buildConfiguration = "Release"
|
|
64
|
+
shouldUseLaunchSchemeArgsEnv = "YES"
|
|
65
|
+
savedToolIdentifier = ""
|
|
66
|
+
useCustomWorkingDirectory = "NO"
|
|
67
|
+
debugDocumentVersioning = "YES">
|
|
68
|
+
<MacroExpansion>
|
|
69
|
+
<BuildableReference
|
|
70
|
+
BuildableIdentifier = "primary"
|
|
71
|
+
BlueprintIdentifier = "95186DE2383671DFA81D7FCB"
|
|
72
|
+
BuildableName = "WebDriverAgentLib_watchOS.framework"
|
|
73
|
+
BlueprintName = "WebDriverAgentLib_watchOS"
|
|
74
|
+
ReferencedContainer = "container:WebDriverAgent.xcodeproj">
|
|
75
|
+
</BuildableReference>
|
|
76
|
+
</MacroExpansion>
|
|
77
|
+
</ProfileAction>
|
|
78
|
+
<AnalyzeAction
|
|
79
|
+
buildConfiguration = "Debug">
|
|
80
|
+
</AnalyzeAction>
|
|
81
|
+
<ArchiveAction
|
|
82
|
+
buildConfiguration = "Release"
|
|
83
|
+
revealArchiveInOrganizer = "YES">
|
|
84
|
+
</ArchiveAction>
|
|
85
|
+
</Scheme>
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<Scheme
|
|
3
|
+
LastUpgradeVersion = "2600"
|
|
4
|
+
version = "1.3">
|
|
5
|
+
<BuildAction
|
|
6
|
+
parallelizeBuildables = "YES"
|
|
7
|
+
buildImplicitDependencies = "YES">
|
|
8
|
+
<BuildActionEntries>
|
|
9
|
+
<BuildActionEntry
|
|
10
|
+
buildForTesting = "YES"
|
|
11
|
+
buildForRunning = "YES"
|
|
12
|
+
buildForProfiling = "YES"
|
|
13
|
+
buildForArchiving = "YES"
|
|
14
|
+
buildForAnalyzing = "YES">
|
|
15
|
+
<BuildableReference
|
|
16
|
+
BuildableIdentifier = "primary"
|
|
17
|
+
BlueprintIdentifier = "C0A58256FB8AD3E976C8F8D2"
|
|
18
|
+
BuildableName = "WebDriverAgentRunner_watchOS.xctest"
|
|
19
|
+
BlueprintName = "WebDriverAgentRunner_watchOS"
|
|
20
|
+
ReferencedContainer = "container:WebDriverAgent.xcodeproj">
|
|
21
|
+
</BuildableReference>
|
|
22
|
+
</BuildActionEntry>
|
|
23
|
+
</BuildActionEntries>
|
|
24
|
+
</BuildAction>
|
|
25
|
+
<TestAction
|
|
26
|
+
buildConfiguration = "Debug"
|
|
27
|
+
selectedDebuggerIdentifier = ""
|
|
28
|
+
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
|
|
29
|
+
shouldUseLaunchSchemeArgsEnv = "YES"
|
|
30
|
+
systemAttachmentLifetime = "keepNever">
|
|
31
|
+
<MacroExpansion>
|
|
32
|
+
<BuildableReference
|
|
33
|
+
BuildableIdentifier = "primary"
|
|
34
|
+
BlueprintIdentifier = "C0A58256FB8AD3E976C8F8D2"
|
|
35
|
+
BuildableName = "WebDriverAgentRunner_watchOS.xctest"
|
|
36
|
+
BlueprintName = "WebDriverAgentRunner_watchOS"
|
|
37
|
+
ReferencedContainer = "container:WebDriverAgent.xcodeproj">
|
|
38
|
+
</BuildableReference>
|
|
39
|
+
</MacroExpansion>
|
|
40
|
+
<Testables>
|
|
41
|
+
<TestableReference
|
|
42
|
+
skipped = "NO">
|
|
43
|
+
<BuildableReference
|
|
44
|
+
BuildableIdentifier = "primary"
|
|
45
|
+
BlueprintIdentifier = "C0A58256FB8AD3E976C8F8D2"
|
|
46
|
+
BuildableName = "WebDriverAgentRunner_watchOS.xctest"
|
|
47
|
+
BlueprintName = "WebDriverAgentRunner_watchOS"
|
|
48
|
+
ReferencedContainer = "container:WebDriverAgent.xcodeproj">
|
|
49
|
+
</BuildableReference>
|
|
50
|
+
</TestableReference>
|
|
51
|
+
</Testables>
|
|
52
|
+
</TestAction>
|
|
53
|
+
<LaunchAction
|
|
54
|
+
buildConfiguration = "Debug"
|
|
55
|
+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
56
|
+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
57
|
+
launchStyle = "0"
|
|
58
|
+
useCustomWorkingDirectory = "NO"
|
|
59
|
+
ignoresPersistentStateOnLaunch = "NO"
|
|
60
|
+
debugDocumentVersioning = "YES"
|
|
61
|
+
debugServiceExtension = "internal"
|
|
62
|
+
allowLocationSimulation = "YES">
|
|
63
|
+
<MacroExpansion>
|
|
64
|
+
<BuildableReference
|
|
65
|
+
BuildableIdentifier = "primary"
|
|
66
|
+
BlueprintIdentifier = "C0A58256FB8AD3E976C8F8D2"
|
|
67
|
+
BuildableName = "WebDriverAgentRunner_watchOS.xctest"
|
|
68
|
+
BlueprintName = "WebDriverAgentRunner_watchOS"
|
|
69
|
+
ReferencedContainer = "container:WebDriverAgent.xcodeproj">
|
|
70
|
+
</BuildableReference>
|
|
71
|
+
</MacroExpansion>
|
|
72
|
+
<EnvironmentVariables>
|
|
73
|
+
<EnvironmentVariable
|
|
74
|
+
key = "USE_PORT"
|
|
75
|
+
value = "$(USE_PORT)"
|
|
76
|
+
isEnabled = "YES">
|
|
77
|
+
</EnvironmentVariable>
|
|
78
|
+
<EnvironmentVariable
|
|
79
|
+
key = "USE_IP"
|
|
80
|
+
value = "$(USE_IP)"
|
|
81
|
+
isEnabled = "YES">
|
|
82
|
+
</EnvironmentVariable>
|
|
83
|
+
<EnvironmentVariable
|
|
84
|
+
key = "UPGRADE_TIMESTAMP"
|
|
85
|
+
value = "$(UPGRADE_TIMESTAMP)"
|
|
86
|
+
isEnabled = "YES">
|
|
87
|
+
</EnvironmentVariable>
|
|
88
|
+
<EnvironmentVariable
|
|
89
|
+
key = "WDA_PRODUCT_BUNDLE_IDENTIFIER"
|
|
90
|
+
value = "$(WDA_PRODUCT_BUNDLE_IDENTIFIER)"
|
|
91
|
+
isEnabled = "YES">
|
|
92
|
+
</EnvironmentVariable>
|
|
93
|
+
<EnvironmentVariable
|
|
94
|
+
key = "MAX_HTTP_REQUEST_BODY_SIZE"
|
|
95
|
+
value = "$(MAX_HTTP_REQUEST_BODY_SIZE)"
|
|
96
|
+
isEnabled = "YES">
|
|
97
|
+
</EnvironmentVariable>
|
|
98
|
+
<EnvironmentVariable
|
|
99
|
+
key = "VERBOSE_LOGGING"
|
|
100
|
+
value = "$(VERBOSE_LOGGING)"
|
|
101
|
+
isEnabled = "YES">
|
|
102
|
+
</EnvironmentVariable>
|
|
103
|
+
</EnvironmentVariables>
|
|
104
|
+
</LaunchAction>
|
|
105
|
+
<ProfileAction
|
|
106
|
+
buildConfiguration = "Release"
|
|
107
|
+
shouldUseLaunchSchemeArgsEnv = "YES"
|
|
108
|
+
savedToolIdentifier = ""
|
|
109
|
+
useCustomWorkingDirectory = "NO"
|
|
110
|
+
debugDocumentVersioning = "YES">
|
|
111
|
+
<MacroExpansion>
|
|
112
|
+
<BuildableReference
|
|
113
|
+
BuildableIdentifier = "primary"
|
|
114
|
+
BlueprintIdentifier = "C0A58256FB8AD3E976C8F8D2"
|
|
115
|
+
BuildableName = "WebDriverAgentRunner_watchOS.xctest"
|
|
116
|
+
BlueprintName = "WebDriverAgentRunner_watchOS"
|
|
117
|
+
ReferencedContainer = "container:WebDriverAgent.xcodeproj">
|
|
118
|
+
</BuildableReference>
|
|
119
|
+
</MacroExpansion>
|
|
120
|
+
</ProfileAction>
|
|
121
|
+
<AnalyzeAction
|
|
122
|
+
buildConfiguration = "Debug">
|
|
123
|
+
</AnalyzeAction>
|
|
124
|
+
<ArchiveAction
|
|
125
|
+
buildConfiguration = "Release"
|
|
126
|
+
revealArchiveInOrganizer = "YES">
|
|
127
|
+
</ArchiveAction>
|
|
128
|
+
</Scheme>
|
|
@@ -123,7 +123,12 @@ static NSString *const FB_LIMITED_ACCESS_PROMPT_BUNDLE_ID = @"com.apple.Contacts
|
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
125
|
|
|
126
|
+
#if TARGET_OS_WATCH
|
|
127
|
+
// No popover concept or UIUserInterfaceIdiom on watchOS - treat sheets like phone sheets.
|
|
128
|
+
BOOL isPhone = YES;
|
|
129
|
+
#else
|
|
126
130
|
BOOL isPhone = [UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone;
|
|
131
|
+
#endif
|
|
127
132
|
for (XCUIElement *sheet in sheets) {
|
|
128
133
|
if (isPhone) {
|
|
129
134
|
return sheet;
|
|
@@ -435,6 +435,7 @@ NSDictionary<NSString *, NSString *> *customExclusionAttributesMap(void) {
|
|
|
435
435
|
}
|
|
436
436
|
}
|
|
437
437
|
|
|
438
|
+
#if !TARGET_OS_WATCH
|
|
438
439
|
if ([UIDevice.currentDevice userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
|
|
439
440
|
NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"elementType IN %@",
|
|
440
441
|
@[@(XCUIElementTypeKey), @(XCUIElementTypeButton)]];
|
|
@@ -443,6 +444,7 @@ NSDictionary<NSString *, NSString *> *customExclusionAttributesMap(void) {
|
|
|
443
444
|
[matchedKeys[matchedKeys.count - 1] tap];
|
|
444
445
|
}
|
|
445
446
|
}
|
|
447
|
+
#endif
|
|
446
448
|
#endif
|
|
447
449
|
NSString *errorDescription = @"Did not know how to dismiss the keyboard. Try to dismiss it in the way supported by your application under test.";
|
|
448
450
|
return [[[[FBRunLoopSpinner new]
|
|
@@ -68,13 +68,13 @@ NSDictionary<NSString *, NSNumber *> *fb_availableButtonNames(void) {
|
|
|
68
68
|
buttons[@"volumeup"] = @(XCUIDeviceButtonVolumeUp); // 2
|
|
69
69
|
buttons[@"volumedown"] = @(XCUIDeviceButtonVolumeDown); // 3
|
|
70
70
|
#endif
|
|
71
|
-
if (@available(iOS 16.0, *)) {
|
|
71
|
+
if (@available(iOS 16.0, watchOS 9.0, *)) {
|
|
72
72
|
#if __clang_major__ >= 15 // likely Xcode 15+
|
|
73
73
|
if ([XCUIDevice.sharedDevice hasHardwareButton:XCUIDeviceButtonAction]) {
|
|
74
74
|
buttons[@"action"] = @(XCUIDeviceButtonAction); // 4
|
|
75
75
|
}
|
|
76
76
|
#endif
|
|
77
|
-
#if (!TARGET_OS_SIMULATOR && __clang_major__ >= 16) // likely Xcode 16
|
|
77
|
+
#if (!TARGET_OS_SIMULATOR && !TARGET_OS_WATCH && __clang_major__ >= 16) // likely Xcode 16+; camera button does not exist on watchOS
|
|
78
78
|
if ([XCUIDevice.sharedDevice hasHardwareButton:XCUIDeviceButtonCamera]) {
|
|
79
79
|
buttons[@"camera"] = @(XCUIDeviceButtonCamera);
|
|
80
80
|
}
|
|
@@ -357,9 +357,9 @@ static bool fb_isLocked;
|
|
|
357
357
|
return YES;
|
|
358
358
|
}
|
|
359
359
|
|
|
360
|
-
#if __clang_major__ >= 15 || (__clang_major__ >= 14 && __clang_minor__ >= 0 && __clang_patchlevel__ >= 3)
|
|
360
|
+
#if !TARGET_OS_WATCH && (__clang_major__ >= 15 || (__clang_major__ >= 14 && __clang_minor__ >= 0 && __clang_patchlevel__ >= 3))
|
|
361
361
|
// Xcode 14.3.1 can build these values.
|
|
362
|
-
// For iOS 17
|
|
362
|
+
// For iOS 17+; the `appearance` property does not exist on watchOS
|
|
363
363
|
if ([self respondsToSelector:NSSelectorFromString(@"appearance")]) {
|
|
364
364
|
self.appearance = (XCUIDeviceAppearance) appearance;
|
|
365
365
|
return YES;
|
|
@@ -89,6 +89,10 @@ BOOL FBTypeText(NSString *text, NSUInteger typingSpeed, NSError **error)
|
|
|
89
89
|
#if !TARGET_OS_TV
|
|
90
90
|
[FBLogger logFmt:@"Trying to tap the \"%@\" element to have it focused", snapshot.fb_description];
|
|
91
91
|
[self tap];
|
|
92
|
+
#if TARGET_OS_WATCH
|
|
93
|
+
// watchOS presents a full-screen keyboard sheet (a modal transition) - wait for it.
|
|
94
|
+
[self fb_waitUntilStableWithTimeout:2.0];
|
|
95
|
+
#endif
|
|
92
96
|
// It might take some time to update the UI
|
|
93
97
|
[self fb_standardSnapshot];
|
|
94
98
|
#endif
|
|
@@ -130,7 +134,14 @@ BOOL FBTypeText(NSString *text, NSUInteger typingSpeed, NSError **error)
|
|
|
130
134
|
if (shouldClear && ![self fb_clearTextWithSnapshot:wrapped shouldPrepareForInput:NO error:error]) {
|
|
131
135
|
return NO;
|
|
132
136
|
}
|
|
137
|
+
#if TARGET_OS_WATCH
|
|
138
|
+
// FBTypeText's low-level key synthesis never reaches watchOS's keyboard; -typeText: is a
|
|
139
|
+
// partial workaround (keystrokes still don't always land - a known limitation).
|
|
140
|
+
[self typeText:text];
|
|
141
|
+
return YES;
|
|
142
|
+
#else
|
|
133
143
|
return FBTypeText(text, frequency, error);
|
|
144
|
+
#endif
|
|
134
145
|
}
|
|
135
146
|
|
|
136
147
|
- (BOOL)fb_clearTextWithError:(NSError **)error
|
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
|
|
9
9
|
#import "FBCustomCommands.h"
|
|
10
10
|
|
|
11
|
+
#if TARGET_OS_WATCH
|
|
12
|
+
@import WatchKit;
|
|
13
|
+
#endif
|
|
11
14
|
#import <XCTest/XCUIDevice.h>
|
|
12
15
|
#import <CoreLocation/CoreLocation.h>
|
|
13
16
|
|
|
@@ -52,7 +55,7 @@
|
|
|
52
55
|
[[FBRoute GET:@"/wda/screen"].withoutSession respondWithTarget:self action:@selector(handleGetScreen:)],
|
|
53
56
|
[[FBRoute GET:@"/wda/activeAppInfo"] respondWithTarget:self action:@selector(handleActiveAppInfo:)],
|
|
54
57
|
[[FBRoute GET:@"/wda/activeAppInfo"].withoutSession respondWithTarget:self action:@selector(handleActiveAppInfo:)],
|
|
55
|
-
#if !TARGET_OS_TV // tvOS
|
|
58
|
+
#if !TARGET_OS_TV && !TARGET_OS_WATCH // tvOS/watchOS do not provide relevant APIs
|
|
56
59
|
[[FBRoute POST:@"/wda/setPasteboard"] respondWithTarget:self action:@selector(handleSetPasteboard:)],
|
|
57
60
|
[[FBRoute POST:@"/wda/setPasteboard"].withoutSession respondWithTarget:self action:@selector(handleSetPasteboard:)],
|
|
58
61
|
[[FBRoute POST:@"/wda/getPasteboard"] respondWithTarget:self action:@selector(handleGetPasteboard:)],
|
|
@@ -72,8 +75,10 @@
|
|
|
72
75
|
[[FBRoute GET:@"/wda/device/location"] respondWithTarget:self action:@selector(handleGetLocation:)],
|
|
73
76
|
[[FBRoute GET:@"/wda/device/location"].withoutSession respondWithTarget:self action:@selector(handleGetLocation:)],
|
|
74
77
|
#if !TARGET_OS_TV // tvOS does not provide relevant APIs
|
|
78
|
+
#if !TARGET_OS_WATCH
|
|
75
79
|
#if __clang_major__ >= 15
|
|
76
80
|
[[FBRoute POST:@"/wda/element/:uuid/keyboardInput"] respondWithTarget:self action:@selector(handleKeyboardInput:)],
|
|
81
|
+
#endif
|
|
77
82
|
#endif
|
|
78
83
|
[[FBRoute GET:@"/wda/simulatedLocation"] respondWithTarget:self action:@selector(handleGetSimulatedLocation:)],
|
|
79
84
|
[[FBRoute GET:@"/wda/simulatedLocation"].withoutSession respondWithTarget:self action:@selector(handleGetSimulatedLocation:)],
|
|
@@ -151,7 +156,7 @@
|
|
|
151
156
|
XCUIElement *mainStatusBar = app.statusBars.allElementsBoundByIndex.firstObject;
|
|
152
157
|
CGSize statusBarSize = (nil == mainStatusBar) ? CGSizeZero : mainStatusBar.frame.size;
|
|
153
158
|
|
|
154
|
-
#if TARGET_OS_TV
|
|
159
|
+
#if TARGET_OS_TV || TARGET_OS_WATCH
|
|
155
160
|
CGSize screenSize = app.frame.size;
|
|
156
161
|
#else
|
|
157
162
|
CGSize screenSize = FBAdjustDimensionsForApplication(app.wdFrame.size, app.interfaceOrientation);
|
|
@@ -240,7 +245,7 @@
|
|
|
240
245
|
};
|
|
241
246
|
}
|
|
242
247
|
|
|
243
|
-
#if !TARGET_OS_TV
|
|
248
|
+
#if !TARGET_OS_TV && !TARGET_OS_WATCH
|
|
244
249
|
+ (id<FBResponsePayload>)handleSetPasteboard:(FBRouteRequest *)request
|
|
245
250
|
{
|
|
246
251
|
NSString *contentType = request.arguments[@"contentType"] ?: @"plaintext";
|
|
@@ -357,7 +362,9 @@
|
|
|
357
362
|
[locationManager setDistanceFilter:kCLHeadingFilterNone];
|
|
358
363
|
// Always return the best acurate location data
|
|
359
364
|
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
|
|
365
|
+
#if !TARGET_OS_WATCH
|
|
360
366
|
[locationManager setPausesLocationUpdatesAutomatically:NO];
|
|
367
|
+
#endif
|
|
361
368
|
[locationManager startUpdatingLocation];
|
|
362
369
|
|
|
363
370
|
CLAuthorizationStatus authStatus;
|
|
@@ -438,11 +445,17 @@
|
|
|
438
445
|
@{
|
|
439
446
|
@"currentLocale": currentLocale,
|
|
440
447
|
@"timeZone": self.timeZone,
|
|
448
|
+
#if TARGET_OS_WATCH
|
|
449
|
+
@"name": WKInterfaceDevice.currentDevice.name,
|
|
450
|
+
@"model": WKInterfaceDevice.currentDevice.model,
|
|
451
|
+
@"uuid": @"unknown",
|
|
452
|
+
#else
|
|
441
453
|
@"name": UIDevice.currentDevice.name,
|
|
442
454
|
@"model": UIDevice.currentDevice.model,
|
|
443
455
|
@"uuid": [UIDevice.currentDevice.identifierForVendor UUIDString] ?: @"unknown",
|
|
444
456
|
// https://developer.apple.com/documentation/uikit/uiuserinterfaceidiom?language=objc
|
|
445
457
|
@"userInterfaceIdiom": @(UIDevice.currentDevice.userInterfaceIdiom),
|
|
458
|
+
#endif
|
|
446
459
|
@"userInterfaceStyle": self.userInterfaceStyle,
|
|
447
460
|
#if TARGET_OS_SIMULATOR
|
|
448
461
|
@"isSimulator": @(YES),
|
|
@@ -473,6 +486,7 @@
|
|
|
473
486
|
}
|
|
474
487
|
|
|
475
488
|
static id userInterfaceStyle = nil;
|
|
489
|
+
#if !TARGET_OS_WATCH
|
|
476
490
|
static dispatch_once_t styleOnceToken;
|
|
477
491
|
dispatch_once(&styleOnceToken, ^{
|
|
478
492
|
if ([UITraitCollection respondsToSelector:NSSelectorFromString(@"currentTraitCollection")]) {
|
|
@@ -482,6 +496,7 @@
|
|
|
482
496
|
}
|
|
483
497
|
}
|
|
484
498
|
});
|
|
499
|
+
#endif
|
|
485
500
|
|
|
486
501
|
if (nil == userInterfaceStyle) {
|
|
487
502
|
return @"unsupported";
|
|
@@ -571,7 +586,7 @@
|
|
|
571
586
|
return FBResponseWithOK();
|
|
572
587
|
}
|
|
573
588
|
|
|
574
|
-
#if __clang_major__ >= 15
|
|
589
|
+
#if __clang_major__ >= 15 && !TARGET_OS_WATCH
|
|
575
590
|
+ (id<FBResponsePayload>)handleKeyboardInput:(FBRouteRequest *)request
|
|
576
591
|
{
|
|
577
592
|
FBElementCache *elementCache = request.session.elementCache;
|
|
@@ -73,7 +73,8 @@
|
|
|
73
73
|
#if TARGET_OS_TV
|
|
74
74
|
[[FBRoute GET:@"/element/:uuid/attribute/focused"] respondWithTarget:self action:@selector(handleGetFocused:)],
|
|
75
75
|
[[FBRoute POST:@"/wda/element/:uuid/focuse"] respondWithTarget:self action:@selector(handleFocuse:)],
|
|
76
|
-
#
|
|
76
|
+
#elif !TARGET_OS_WATCH
|
|
77
|
+
// Gesture synthesis isn't supported on watchOS - only /element/:uuid/click is available.
|
|
77
78
|
[[FBRoute POST:@"/wda/element/:uuid/swipe"] respondWithTarget:self action:@selector(handleSwipe:)],
|
|
78
79
|
[[FBRoute POST:@"/wda/swipe"] respondWithTarget:self action:@selector(handleSwipe:)],
|
|
79
80
|
|
|
@@ -205,7 +206,7 @@
|
|
|
205
206
|
? [value componentsJoinedByString:@""]
|
|
206
207
|
: value;
|
|
207
208
|
XCUIElementType elementType = [element elementType];
|
|
208
|
-
#if !TARGET_OS_TV
|
|
209
|
+
#if !TARGET_OS_TV && !TARGET_OS_WATCH
|
|
209
210
|
if (elementType == XCUIElementTypePickerWheel) {
|
|
210
211
|
[element adjustToPickerWheelValue:textToType];
|
|
211
212
|
return FBResponseWithOK();
|
|
@@ -239,7 +240,7 @@
|
|
|
239
240
|
{
|
|
240
241
|
FBElementCache *elementCache = request.session.elementCache;
|
|
241
242
|
XCUIElement *element = [elementCache elementForUUID:(NSString *)request.parameters[@"uuid"] checkStaleness:YES];
|
|
242
|
-
#if TARGET_OS_IOS
|
|
243
|
+
#if TARGET_OS_IOS || TARGET_OS_WATCH
|
|
243
244
|
[element tap];
|
|
244
245
|
#elif TARGET_OS_TV
|
|
245
246
|
NSError *error = nil;
|
|
@@ -534,7 +535,7 @@
|
|
|
534
535
|
XCUIApplication *app = request.session.activeApplication ?: XCUIApplication.fb_activeApplication;
|
|
535
536
|
|
|
536
537
|
CGRect frame = app.wdFrame;
|
|
537
|
-
#if TARGET_OS_TV
|
|
538
|
+
#if TARGET_OS_TV || TARGET_OS_WATCH
|
|
538
539
|
CGSize screenSize = frame.size;
|
|
539
540
|
#else
|
|
540
541
|
CGSize screenSize = FBAdjustDimensionsForApplication(frame.size, app.interfaceOrientation);
|
|
@@ -551,7 +552,7 @@
|
|
|
551
552
|
XCUIApplication *app = request.session.activeApplication ?: XCUIApplication.fb_activeApplication;
|
|
552
553
|
|
|
553
554
|
CGRect frame = app.wdFrame;
|
|
554
|
-
#if TARGET_OS_TV
|
|
555
|
+
#if TARGET_OS_TV || TARGET_OS_WATCH
|
|
555
556
|
CGSize screenSize = frame.size;
|
|
556
557
|
#else
|
|
557
558
|
CGSize screenSize = FBAdjustDimensionsForApplication(frame.size, app.interfaceOrientation);
|