appium-webdriveragent 16.4.0 → 16.5.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/Scripts/build-webdriveragent.mjs +9 -9
- package/Scripts/build.sh +8 -1
- package/WebDriverAgent.xcodeproj/project.pbxproj +125 -107
- package/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/IntegrationTests_watchOS.xcscheme +4 -4
- package/WebDriverAgentLib/FBAlert.m +8 -6
- package/WebDriverAgentLib/Info.plist +2 -2
- package/WebDriverAgentTests/IntegrationTests_watchOS/IntegrationTests_watchOS-Bridging-Header.h +21 -0
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDAAlertIntegrationTests.swift +11 -9
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDAAppLifecycleIntegrationTests.swift +18 -38
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDAClickIntegrationTests.swift +11 -17
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDADeviceIntegrationTests.swift +50 -71
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDAElementAttributeIntegrationTests.swift +23 -41
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDAFindIntegrationTests.swift +70 -95
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDAScreenshotAndSourceIntegrationTests.swift +24 -22
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDATypingIntegrationTests.swift +44 -28
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDAWatchInProcessTestCase.swift +51 -0
- package/build/lib/check-dependencies.d.ts.map +1 -1
- package/build/lib/check-dependencies.js +21 -7
- package/build/lib/check-dependencies.js.map +1 -1
- package/build/lib/constants.d.ts +1 -2
- package/build/lib/constants.d.ts.map +1 -1
- package/build/lib/constants.js +1 -2
- package/build/lib/constants.js.map +1 -1
- package/build/lib/types.d.ts +2 -2
- package/build/lib/types.d.ts.map +1 -1
- package/build/lib/utils/index.d.ts +1 -1
- package/build/lib/utils/index.d.ts.map +1 -1
- package/build/lib/utils/index.js +1 -1
- package/build/lib/utils/index.js.map +1 -1
- package/build/lib/utils/platform.d.ts +12 -0
- package/build/lib/utils/platform.d.ts.map +1 -1
- package/build/lib/utils/platform.js +23 -1
- package/build/lib/utils/platform.js.map +1 -1
- package/build/lib/utils/xctestrun.js +27 -3
- package/build/lib/utils/xctestrun.js.map +1 -1
- package/build/lib/webdriveragent.d.ts.map +1 -1
- package/build/lib/webdriveragent.js +4 -1
- package/build/lib/webdriveragent.js.map +1 -1
- package/build/lib/xcodebuild.d.ts.map +1 -1
- package/build/lib/xcodebuild.js +19 -9
- package/build/lib/xcodebuild.js.map +1 -1
- package/lib/check-dependencies.ts +23 -7
- package/lib/constants.ts +1 -2
- package/lib/types.ts +4 -2
- package/lib/utils/index.ts +1 -1
- package/lib/utils/platform.ts +25 -1
- package/lib/utils/xctestrun.ts +29 -3
- package/lib/webdriveragent.ts +5 -1
- package/lib/xcodebuild.ts +27 -12
- package/package.json +3 -2
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDASessionIntegrationTests.swift +0 -72
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDAUnknownCommandIntegrationTests.swift +0 -24
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDAWatchHTTPClient.swift +0 -95
- package/WebDriverAgentTests/IntegrationTests_watchOS/WDAWatchIntegrationTestCase.swift +0 -61
|
@@ -8,119 +8,94 @@
|
|
|
8
8
|
|
|
9
9
|
import XCTest
|
|
10
10
|
|
|
11
|
-
/// Covers
|
|
12
|
-
///
|
|
13
|
-
///
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
11
|
+
/// Covers the XCUIElement+FBFind/+FBClassChain category methods directly, in-process - the same
|
|
12
|
+
/// implementations FBFindElementCommands dispatches to over HTTP. Locator-string aliasing
|
|
13
|
+
/// ("name"/"id" both meaning accessibility id, "link text" vs "partial link text") is a route
|
|
14
|
+
/// dispatch concern, not a category one, so it isn't re-tested here - see the HTTP end-to-end
|
|
15
|
+
/// tests for coverage of the actual route layer.
|
|
16
|
+
final class WDAFindIntegrationTests: WDAWatchInProcessTestCase {
|
|
17
|
+
// All reads, no taps/typing - reuse the same running app across the whole class.
|
|
18
|
+
override class var relaunchForEachTest: Bool { false }
|
|
19
19
|
|
|
20
|
-
func
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
"using": using,
|
|
25
|
-
"value": "tapMeButton",
|
|
26
|
-
])
|
|
27
|
-
XCTAssertEqual(response.statusCode, 200, "using: \(using)")
|
|
28
|
-
XCTAssertNotNil(response.valueDict?["ELEMENT"], "using: \(using)")
|
|
29
|
-
}
|
|
20
|
+
func testDescendantsMatchingIdentifier() {
|
|
21
|
+
let matches = app.fb_descendants(matchingIdentifier: "tapMeButton", shouldReturnAfterFirstMatch: true)
|
|
22
|
+
XCTAssertEqual(matches.count, 1)
|
|
23
|
+
XCTAssertEqual(matches.first?.elementType, .button)
|
|
30
24
|
}
|
|
31
25
|
|
|
32
|
-
func
|
|
33
|
-
let
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
])
|
|
37
|
-
XCTAssertEqual(response.statusCode, 200)
|
|
38
|
-
XCTAssertNotNil(response.valueDict?["ELEMENT"])
|
|
26
|
+
func testDescendantsMatchingClassName() {
|
|
27
|
+
let matches = app.fb_descendants(matchingClassName: "XCUIElementTypeButton", shouldReturnAfterFirstMatch: false)
|
|
28
|
+
XCTAssertGreaterThanOrEqual(matches.count, 1)
|
|
29
|
+
XCTAssertTrue(matches.allSatisfy { $0.elementType == .button })
|
|
39
30
|
}
|
|
40
31
|
|
|
41
|
-
func
|
|
42
|
-
let
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
])
|
|
46
|
-
XCTAssertEqual(response.statusCode, 200)
|
|
47
|
-
XCTAssertGreaterThanOrEqual((response.value as? [[String: Any]])?.count ?? 0, 1)
|
|
32
|
+
func testDescendantsMatchingPredicate() {
|
|
33
|
+
let predicate = NSPredicate(format: "label == %@", "Tap Me")
|
|
34
|
+
let matches = app.fb_descendants(matching: predicate, shouldReturnAfterFirstMatch: true)
|
|
35
|
+
XCTAssertEqual(matches.count, 1)
|
|
48
36
|
}
|
|
49
37
|
|
|
50
|
-
func
|
|
51
|
-
let
|
|
52
|
-
|
|
53
|
-
"value": "//XCUIElementTypeButton[@name=\"tapMeButton\"]",
|
|
54
|
-
])
|
|
55
|
-
XCTAssertEqual(response.statusCode, 200)
|
|
56
|
-
XCTAssertNotNil(response.valueDict?["ELEMENT"])
|
|
38
|
+
func testDescendantsMatchingClassChain() {
|
|
39
|
+
let matches = app.fb_descendants(matchingClassChain: "**/XCUIElementTypeButton", shouldReturnAfterFirstMatch: false)
|
|
40
|
+
XCTAssertGreaterThanOrEqual(matches.count, 1)
|
|
57
41
|
}
|
|
58
42
|
|
|
59
|
-
func
|
|
60
|
-
//
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
43
|
+
func testDescendantsMatchingXPathQuery() {
|
|
44
|
+
// XPath resolution is a two-phase lookup (snapshot to XML, then re-resolve by uid) - on a
|
|
45
|
+
// just-launched app this occasionally races the accessibility connection settling and loses
|
|
46
|
+
// it entirely ("Lost connection to the application"), a hard XCTest issue with no NSError to
|
|
47
|
+
// catch. Reproduces consistently on the Xcode 27 beta toolchain; not reproduced through the
|
|
48
|
+
// (slower, naturally more settled) HTTP route in WDAHTTPEndToEndTests. Non-strict so this
|
|
49
|
+
// stops masking anything the moment the race is gone.
|
|
50
|
+
XCTExpectFailure(
|
|
51
|
+
"XPath resolution can lose the accessibility connection right after a fresh app launch - a beta-toolchain timing race",
|
|
52
|
+
options: .nonStrict()
|
|
53
|
+
) {
|
|
54
|
+
let matches = app.fb_descendants(
|
|
55
|
+
matchingXPathQuery: "//XCUIElementTypeButton[@name=\"tapMeButton\"]",
|
|
56
|
+
shouldReturnAfterFirstMatch: true
|
|
57
|
+
)
|
|
58
|
+
XCTAssertEqual(matches.count, 1)
|
|
69
59
|
}
|
|
70
60
|
}
|
|
71
61
|
|
|
72
|
-
func
|
|
73
|
-
let
|
|
74
|
-
|
|
75
|
-
"value": "thisElementDoesNotExist",
|
|
76
|
-
])
|
|
77
|
-
XCTAssertNotEqual(response.statusCode, 200)
|
|
62
|
+
func testDescendantsMatchingProperty() {
|
|
63
|
+
let matches = app.fb_descendants(matchingProperty: "name", value: "tapMe", partialSearch: true)
|
|
64
|
+
XCTAssertGreaterThanOrEqual(matches.count, 1)
|
|
78
65
|
}
|
|
79
66
|
|
|
80
|
-
func
|
|
81
|
-
let
|
|
82
|
-
|
|
83
|
-
"value": "XCUIElementTypeButton",
|
|
84
|
-
])
|
|
85
|
-
XCTAssertEqual(response.statusCode, 200)
|
|
86
|
-
guard let elements = response.value as? [[String: Any]] else {
|
|
87
|
-
return XCTFail("Expected an array of elements: \(String(describing: response.json))")
|
|
88
|
-
}
|
|
89
|
-
XCTAssertGreaterThanOrEqual(elements.count, 1)
|
|
67
|
+
func testDescendantsMatchingIdentifierThatDoesNotExistReturnsEmptyArray() {
|
|
68
|
+
let matches = app.fb_descendants(matchingIdentifier: "thisElementDoesNotExist", shouldReturnAfterFirstMatch: true)
|
|
69
|
+
XCTAssertTrue(matches.isEmpty)
|
|
90
70
|
}
|
|
91
71
|
|
|
92
|
-
func
|
|
93
|
-
let
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
guard let windowId = windowResponse.valueDict?["ELEMENT"] as? String else {
|
|
98
|
-
return XCTFail("Could not find the root window element")
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
let subElementResponse = try client.post("/session/\(sessionId!)/element/\(windowId)/element", body: [
|
|
102
|
-
"using": "accessibility id",
|
|
103
|
-
"value": "tapMeButton",
|
|
104
|
-
])
|
|
105
|
-
XCTAssertEqual(subElementResponse.statusCode, 200)
|
|
106
|
-
XCTAssertNotNil(subElementResponse.valueDict?["ELEMENT"])
|
|
107
|
-
|
|
108
|
-
let subElementsResponse = try client.post("/session/\(sessionId!)/element/\(windowId)/elements", body: [
|
|
109
|
-
"using": "class name",
|
|
110
|
-
"value": "XCUIElementTypeButton",
|
|
111
|
-
])
|
|
112
|
-
XCTAssertEqual(subElementsResponse.statusCode, 200)
|
|
113
|
-
XCTAssertGreaterThanOrEqual((subElementsResponse.value as? [[String: Any]])?.count ?? 0, 1)
|
|
72
|
+
func testDescendantsUnderASubElement() {
|
|
73
|
+
let window = app.windows.firstMatch
|
|
74
|
+
XCTAssertTrue(window.exists)
|
|
75
|
+
let matches = window.fb_descendants(matchingIdentifier: "tapMeButton", shouldReturnAfterFirstMatch: true)
|
|
76
|
+
XCTAssertEqual(matches.count, 1)
|
|
114
77
|
}
|
|
115
78
|
|
|
116
|
-
func testActiveElementResolvesToTheFocusedTextField()
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
//
|
|
120
|
-
|
|
79
|
+
func testActiveElementResolvesToTheFocusedTextField() {
|
|
80
|
+
// watchOS classifies an inline TextField's element type differently across OS versions (e.g.
|
|
81
|
+
// a button-styled placeholder pre-tap on some versions, .textField on others), so look it up
|
|
82
|
+
// by identifier across all types rather than filtering through app.textFields.
|
|
83
|
+
app.descendants(matching: .any)["typingField"].tap()
|
|
121
84
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
85
|
+
// Focus reporting lags the tap slightly on watchOS (the same flakiness the old HTTP-based
|
|
86
|
+
// version of this test papered over with a whole-suite retry) - poll briefly instead.
|
|
87
|
+
var activeElement: XCUIElement?
|
|
88
|
+
let deadline = Date().addingTimeInterval(5)
|
|
89
|
+
repeat {
|
|
90
|
+
activeElement = app.fb_activeElement()
|
|
91
|
+
} while activeElement == nil && Date() < deadline
|
|
92
|
+
XCTAssertNotNil(activeElement)
|
|
93
|
+
|
|
94
|
+
// Tapping the field opens a full-screen keyboard sheet - back out so later tests in this
|
|
95
|
+
// class (which reuse this same running app instance) see tapMeButton again, not the sheet.
|
|
96
|
+
let cancel = app.buttons["Cancel"]
|
|
97
|
+
if cancel.waitForExistence(timeout: 2) {
|
|
98
|
+
cancel.tap()
|
|
99
|
+
}
|
|
125
100
|
}
|
|
126
101
|
}
|
package/WebDriverAgentTests/IntegrationTests_watchOS/WDAScreenshotAndSourceIntegrationTests.swift
CHANGED
|
@@ -7,36 +7,40 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import XCTest
|
|
10
|
+
// XCUIAutomation is a separate module on newer SDKs but folded into XCTest on older ones
|
|
11
|
+
// (Xcode 15.4) - guard the import so this builds on both.
|
|
12
|
+
#if canImport(XCUIAutomation)
|
|
13
|
+
import XCUIAutomation
|
|
14
|
+
#endif
|
|
15
|
+
|
|
16
|
+
/// Covers device/element screenshots and page source, calling XCUIDevice+FBHelpers/
|
|
17
|
+
/// XCUIApplication+FBHelpers and plain XCTest APIs directly in-process.
|
|
18
|
+
final class WDAScreenshotAndSourceIntegrationTests: WDAWatchInProcessTestCase {
|
|
19
|
+
// All reads, no taps/typing - reuse the same running app across the whole class.
|
|
20
|
+
override class var relaunchForEachTest: Bool { false }
|
|
10
21
|
|
|
11
|
-
/// Covers device/element screenshots and /source, /wda/accessibleSource.
|
|
12
|
-
final class WDAScreenshotAndSourceIntegrationTests: WDAWatchIntegrationTestCase {
|
|
13
22
|
private static let pngMagicBytes: [UInt8] = [0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A]
|
|
14
23
|
|
|
15
|
-
private func assertLooksLikeAPNG(_
|
|
16
|
-
guard let
|
|
17
|
-
return XCTFail("
|
|
24
|
+
private func assertLooksLikeAPNG(_ data: Data?, file: StaticString = #filePath, line: UInt = #line) {
|
|
25
|
+
guard let data = data else {
|
|
26
|
+
return XCTFail("No screenshot data returned", file: file, line: line)
|
|
18
27
|
}
|
|
19
28
|
XCTAssertGreaterThan(data.count, Self.pngMagicBytes.count, file: file, line: line)
|
|
20
|
-
XCTAssertEqual(Array(data.prefix(Self.pngMagicBytes.count)), Self.pngMagicBytes, "
|
|
29
|
+
XCTAssertEqual(Array(data.prefix(Self.pngMagicBytes.count)), Self.pngMagicBytes, "not a PNG", file: file, line: line)
|
|
21
30
|
}
|
|
22
31
|
|
|
23
32
|
func testDeviceScreenshot() throws {
|
|
24
|
-
let
|
|
25
|
-
|
|
26
|
-
assertLooksLikeAPNG(response.valueString)
|
|
33
|
+
let data = try XCUIDevice.shared.fb_screenshot()
|
|
34
|
+
assertLooksLikeAPNG(data)
|
|
27
35
|
}
|
|
28
36
|
|
|
29
|
-
func testElementScreenshot()
|
|
30
|
-
let
|
|
31
|
-
|
|
32
|
-
XCTAssertEqual(response.statusCode, 200)
|
|
33
|
-
assertLooksLikeAPNG(response.valueString)
|
|
37
|
+
func testElementScreenshot() {
|
|
38
|
+
let provider: XCUIScreenshotProviding = app.buttons["tapMeButton"]
|
|
39
|
+
assertLooksLikeAPNG(provider.screenshot().pngRepresentation)
|
|
34
40
|
}
|
|
35
41
|
|
|
36
|
-
func testPageSourceContainsTheKnownElements()
|
|
37
|
-
let
|
|
38
|
-
XCTAssertEqual(response.statusCode, 200)
|
|
39
|
-
guard let xml = response.valueString else {
|
|
42
|
+
func testPageSourceContainsTheKnownElements() {
|
|
43
|
+
guard let xml = app.fb_xmlRepresentation() else {
|
|
40
44
|
return XCTFail("No XML source returned")
|
|
41
45
|
}
|
|
42
46
|
XCTAssertTrue(xml.contains("tapMeButton"))
|
|
@@ -44,9 +48,7 @@ final class WDAScreenshotAndSourceIntegrationTests: WDAWatchIntegrationTestCase
|
|
|
44
48
|
XCTAssertTrue(xml.contains("typingField"))
|
|
45
49
|
}
|
|
46
50
|
|
|
47
|
-
func testAccessibleSource()
|
|
48
|
-
|
|
49
|
-
XCTAssertEqual(response.statusCode, 200)
|
|
50
|
-
XCTAssertNotNil(response.value)
|
|
51
|
+
func testAccessibleSource() {
|
|
52
|
+
XCTAssertFalse(app.fb_accessibilityTree().isEmpty)
|
|
51
53
|
}
|
|
52
54
|
}
|
|
@@ -8,50 +8,66 @@
|
|
|
8
8
|
|
|
9
9
|
import XCTest
|
|
10
10
|
|
|
11
|
-
/// Covers
|
|
11
|
+
/// Covers XCUIElement+FBTyping (set value/clear) and the keyboard-dismiss helper, calling them
|
|
12
|
+
/// directly in-process instead of over HTTP.
|
|
12
13
|
///
|
|
13
14
|
/// KNOWN LIMITATION (see XCUIElement+FBTyping.m): the keyboard opens and the field gets focus,
|
|
14
15
|
/// but no keystrokes land. Wrapped in XCTExpectFailure so this re-verifies itself and starts
|
|
15
16
|
/// failing loudly the moment it starts working, instead of silently staying stale.
|
|
16
|
-
final class WDATypingIntegrationTests:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
final class WDATypingIntegrationTests: WDAWatchInProcessTestCase {
|
|
18
|
+
// watchOS classifies an inline TextField's element type differently across OS versions (e.g.
|
|
19
|
+
// a button-styled placeholder pre-tap on some versions, .textField on others), so look it up
|
|
20
|
+
// by identifier across all types rather than filtering through app.textFields.
|
|
21
|
+
private var typingField: XCUIElement { app.descendants(matching: .any)["typingField"] }
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
private func backOutOfKeyboardIfPresented() {
|
|
24
|
+
let cancel = app.buttons["Cancel"]
|
|
25
|
+
if cancel.waitForExistence(timeout: 2) {
|
|
26
|
+
cancel.tap()
|
|
27
|
+
}
|
|
28
|
+
}
|
|
25
29
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
func testSetValueOpensTheKeyboardAndAttemptsToTypeIntoTheField() {
|
|
31
|
+
let field = typingField
|
|
32
|
+
|
|
33
|
+
// Some watchOS versions (confirmed: 10.5) don't expose an inline TextField's placeholder via
|
|
34
|
+
// accessibility until it's been focused at least once, so this can legitimately read nil.
|
|
35
|
+
XCTExpectFailure(
|
|
36
|
+
"watchOS can omit an unfocused TextField's placeholder from the accessibility tree",
|
|
37
|
+
options: .nonStrict()
|
|
38
|
+
) {
|
|
39
|
+
XCTAssertEqual(field.wdValue ?? field.wdPlaceholderValue, "Type here")
|
|
29
40
|
}
|
|
30
41
|
|
|
31
|
-
//
|
|
32
|
-
|
|
33
|
-
|
|
42
|
+
// fb_typeText taps to focus internally if needed, but watchOS's full-screen keyboard sheet
|
|
43
|
+
// transition can outlast its short internal settle wait - tap and wait for the sheet
|
|
44
|
+
// ourselves first to shrink (not eliminate) the race.
|
|
45
|
+
field.tap()
|
|
46
|
+
_ = app.buttons["Cancel"].waitForExistence(timeout: 5)
|
|
47
|
+
|
|
48
|
+
// Both possible failure modes - typeText: recording a "no keyboard focus" issue internally
|
|
49
|
+
// if the sheet transition is still lagging, or it landing focus fine but the keystrokes
|
|
50
|
+
// themselves not registering - are the same known watchOS limitation, so both are expected
|
|
51
|
+
// here. If this ever starts reliably working, XCTExpectFailure itself starts failing loudly.
|
|
52
|
+
XCTExpectFailure("watchOS keystroke delivery into the on-screen keyboard is a known unresolved limitation") {
|
|
53
|
+
_ = try? field.fb_typeText("hi", shouldClear: false)
|
|
54
|
+
XCTAssertEqual(field.wdValue, "hi")
|
|
34
55
|
}
|
|
56
|
+
|
|
57
|
+
backOutOfKeyboardIfPresented()
|
|
35
58
|
}
|
|
36
59
|
|
|
37
60
|
func testClearingAnAlreadyEmptyFieldSucceeds() throws {
|
|
38
61
|
// Clearing an empty field short-circuits, so this works despite the typing limitation.
|
|
39
|
-
|
|
40
|
-
let clearResponse = try client.post("/session/\(sessionId!)/element/\(fieldId)/clear")
|
|
41
|
-
XCTAssertEqual(clearResponse.statusCode, 200)
|
|
62
|
+
try typingField.fb_clearText()
|
|
42
63
|
}
|
|
43
64
|
|
|
44
|
-
func
|
|
45
|
-
// Only asserts the
|
|
46
|
-
|
|
47
|
-
try client.post("/session/\(sessionId!)/element/\(fieldId)/click")
|
|
48
|
-
Thread.sleep(forTimeInterval: 1)
|
|
65
|
+
func testDismissKeyboardDoesNotCrashTheApp() {
|
|
66
|
+
// Only asserts the call round-trips cleanly, not that dismissal actually happens.
|
|
67
|
+
typingField.tap()
|
|
49
68
|
|
|
50
|
-
_ = try
|
|
69
|
+
_ = try? app.fb_dismissKeyboard(withKeyNames: nil)
|
|
51
70
|
|
|
52
|
-
|
|
53
|
-
if let cancelId = try? findElement(byAccessibilityId: "Cancel") {
|
|
54
|
-
_ = try? client.post("/session/\(sessionId!)/element/\(cancelId)/click")
|
|
55
|
-
}
|
|
71
|
+
backOutOfKeyboardIfPresented()
|
|
56
72
|
}
|
|
57
73
|
}
|
|
@@ -0,0 +1,51 @@
|
|
|
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 XCTest
|
|
10
|
+
|
|
11
|
+
/// Base class for the watchOS integration tests: these call WebDriverAgentLib_watchOS's own
|
|
12
|
+
/// categories directly (fb_descendantsMatchingClassName:, wdEnabled, fb_activeAppsInfo, etc.),
|
|
13
|
+
/// the same way the iOS/tvOS integration tests do, rather than driving a separately running
|
|
14
|
+
/// WebDriverAgentRunner_watchOS server over HTTP (see git history for that approach - dropped as
|
|
15
|
+
/// not worth the added CI complexity; use the functional/e2e test suite for real-server coverage).
|
|
16
|
+
class WDAWatchInProcessTestCase: XCTestCase {
|
|
17
|
+
static let integrationAppBundleId = ProcessInfo.processInfo.environment["WDA_TEST_BUNDLE_ID"]
|
|
18
|
+
?? "com.facebook.wda.IntegrationApp.watchOS"
|
|
19
|
+
|
|
20
|
+
let app = XCUIApplication()
|
|
21
|
+
|
|
22
|
+
/// Override to return false for a suite whose tests are all pure reads that never mutate the
|
|
23
|
+
/// app's UI state (find, attributes, screenshots, source, ...) - the app then launches once for
|
|
24
|
+
/// the whole class instead of once per test method, which is significantly faster. Defaults to
|
|
25
|
+
/// true (relaunch every test) since that's the safe choice for any suite whose tests tap,
|
|
26
|
+
/// type, or otherwise change what's on screen - or depend on a specific starting state, like
|
|
27
|
+
/// resultLabel reading "Idle".
|
|
28
|
+
class var relaunchForEachTest: Bool { true }
|
|
29
|
+
|
|
30
|
+
// XCTest always runs one class's methods as a contiguous group, never interleaved with another
|
|
31
|
+
// class's - so "have we seen this class's ObjectIdentifier before" reliably means "is this the
|
|
32
|
+
// first test method of this class to run this session", regardless of test order randomization.
|
|
33
|
+
// Shared static storage keyed per-class, since a plain `static var` in the base class would be
|
|
34
|
+
// one slot shared by every subclass, not one per subclass.
|
|
35
|
+
private static var classesAlreadyLaunched = Set<ObjectIdentifier>()
|
|
36
|
+
|
|
37
|
+
override func setUp() {
|
|
38
|
+
super.setUp()
|
|
39
|
+
continueAfterFailure = false
|
|
40
|
+
|
|
41
|
+
let isFirstTestForThisClass = Self.classesAlreadyLaunched.insert(ObjectIdentifier(Self.self)).inserted
|
|
42
|
+
// Reuse the running app only if: this suite opted in, this isn't the class's first test
|
|
43
|
+
// (every class still gets one guaranteed-clean launch, regardless of what a previous class
|
|
44
|
+
// left on screen), and the isRunning check confirms the app didn't crash/background since.
|
|
45
|
+
let canReuseRunningApp = !Self.relaunchForEachTest && !isFirstTestForThisClass && app.state == .runningForeground
|
|
46
|
+
if !canReuseRunningApp {
|
|
47
|
+
app.launch()
|
|
48
|
+
}
|
|
49
|
+
XCTAssertTrue(app.buttons["tapMeButton"].waitForExistence(timeout: 15))
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-dependencies.d.ts","sourceRoot":"","sources":["../../lib/check-dependencies.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"check-dependencies.d.ts","sourceRoot":"","sources":["../../lib/check-dependencies.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAEhD;;GAEG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAe1E"}
|
|
@@ -1,31 +1,45 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { fs } from '@appium/support';
|
|
3
3
|
import { exec } from 'teen_process';
|
|
4
|
-
import {
|
|
5
|
-
import { BOOTSTRAP_PATH } from './utils/index.js';
|
|
4
|
+
import { getPlatformSchemeSuffix, isTvOS, isWatchOS, BOOTSTRAP_PATH } from './utils/index.js';
|
|
6
5
|
/**
|
|
7
6
|
* Ensure simulator WDA is built and return the resulting app bundle path.
|
|
8
7
|
*/
|
|
9
8
|
export async function bundleWDASim(xcodebuild) {
|
|
9
|
+
const platformName = xcodebuild.platformName || '';
|
|
10
|
+
const scheme = `WebDriverAgentRunner${getPlatformSchemeSuffix(platformName)}`;
|
|
11
|
+
const sdk = getSimulatorSdk(platformName);
|
|
10
12
|
const derivedDataPath = await xcodebuild.retrieveDerivedDataPath();
|
|
11
13
|
if (!derivedDataPath) {
|
|
12
14
|
throw new Error('Cannot retrieve the path to the Xcode derived data folder');
|
|
13
15
|
}
|
|
14
|
-
const wdaBundlePath = path.join(derivedDataPath, 'Build', 'Products',
|
|
16
|
+
const wdaBundlePath = path.join(derivedDataPath, 'Build', 'Products', `Debug-${sdk}`, `${scheme}-Runner.app`);
|
|
15
17
|
if (await fs.exists(wdaBundlePath)) {
|
|
16
18
|
return wdaBundlePath;
|
|
17
19
|
}
|
|
18
|
-
await buildWDASim();
|
|
20
|
+
await buildWDASim(scheme, sdk);
|
|
19
21
|
return wdaBundlePath;
|
|
20
22
|
}
|
|
21
|
-
|
|
23
|
+
/**
|
|
24
|
+
* @returns The simulator SDK name for the given platform.
|
|
25
|
+
*/
|
|
26
|
+
function getSimulatorSdk(platformName) {
|
|
27
|
+
if (isTvOS(platformName)) {
|
|
28
|
+
return 'appletvsimulator';
|
|
29
|
+
}
|
|
30
|
+
if (isWatchOS(platformName)) {
|
|
31
|
+
return 'watchsimulator';
|
|
32
|
+
}
|
|
33
|
+
return 'iphonesimulator';
|
|
34
|
+
}
|
|
35
|
+
async function buildWDASim(scheme, sdk) {
|
|
22
36
|
const args = [
|
|
23
37
|
'-project',
|
|
24
38
|
path.join(BOOTSTRAP_PATH, 'WebDriverAgent.xcodeproj'),
|
|
25
39
|
'-scheme',
|
|
26
|
-
|
|
40
|
+
scheme,
|
|
27
41
|
'-sdk',
|
|
28
|
-
|
|
42
|
+
sdk,
|
|
29
43
|
'CODE_SIGN_IDENTITY=""',
|
|
30
44
|
'CODE_SIGNING_REQUIRED="NO"',
|
|
31
45
|
'GCC_TREAT_WARNINGS_AS_ERRORS=0',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-dependencies.js","sourceRoot":"","sources":["../../lib/check-dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAC,EAAE,EAAC,MAAM,iBAAiB,CAAC;AACnC,OAAO,EAAC,IAAI,EAAC,MAAM,cAAc,CAAC;AAElC,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"check-dependencies.js","sourceRoot":"","sources":["../../lib/check-dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAC,EAAE,EAAC,MAAM,iBAAiB,CAAC;AACnC,OAAO,EAAC,IAAI,EAAC,MAAM,cAAc,CAAC;AAElC,OAAO,EAAC,uBAAuB,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAG5F;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAsB;IACvD,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,uBAAuB,uBAAuB,CAAC,YAAY,CAAC,EAAE,CAAC;IAC9E,MAAM,GAAG,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IAE1C,MAAM,eAAe,GAAG,MAAM,UAAU,CAAC,uBAAuB,EAAE,CAAC;IACnE,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,MAAM,aAAa,CAAC,CAAC;IAC9G,IAAI,MAAM,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;QACnC,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,MAAM,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,YAAoB;IAC3C,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QACzB,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,IAAI,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5B,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,MAAc,EAAE,GAAW;IACpD,MAAM,IAAI,GAAG;QACX,UAAU;QACV,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,0BAA0B,CAAC;QACrD,SAAS;QACT,MAAM;QACN,MAAM;QACN,GAAG;QACH,uBAAuB;QACvB,4BAA4B;QAC5B,gCAAgC;KACjC,CAAC;IACF,MAAM,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC"}
|
package/build/lib/constants.d.ts
CHANGED
|
@@ -2,12 +2,11 @@ export declare const DEFAULT_TEST_BUNDLE_SUFFIX = ".xctrunner";
|
|
|
2
2
|
export declare const WDA_RUNNER_BUNDLE_ID = "com.facebook.WebDriverAgentRunner";
|
|
3
3
|
export declare const WDA_RUNNER_BUNDLE_ID_FOR_XCTEST = "com.facebook.WebDriverAgentRunner.xctrunner";
|
|
4
4
|
export declare const WDA_RUNNER_APP = "WebDriverAgentRunner-Runner.app";
|
|
5
|
-
export declare const WDA_SCHEME = "WebDriverAgentRunner";
|
|
6
5
|
export declare const PROJECT_FILE = "project.pbxproj";
|
|
7
6
|
export declare const WDA_BASE_URL = "http://127.0.0.1";
|
|
8
7
|
export declare const PLATFORM_NAME_TVOS = "tvOS";
|
|
8
|
+
export declare const PLATFORM_NAME_WATCHOS = "watchOS";
|
|
9
9
|
export declare const PLATFORM_NAME_IOS = "iOS";
|
|
10
|
-
export declare const SDK_SIMULATOR = "iphonesimulator";
|
|
11
10
|
export declare const SDK_DEVICE = "iphoneos";
|
|
12
11
|
export declare const WDA_UPGRADE_TIMESTAMP_PATH: string;
|
|
13
12
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../lib/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,0BAA0B,eAAe,CAAC;AACvD,eAAO,MAAM,oBAAoB,sCAAsC,CAAC;AACxE,eAAO,MAAM,+BAA+B,gDAAyD,CAAC;AACtG,eAAO,MAAM,cAAc,oCAAoC,CAAC;AAChE,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../lib/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,0BAA0B,eAAe,CAAC;AACvD,eAAO,MAAM,oBAAoB,sCAAsC,CAAC;AACxE,eAAO,MAAM,+BAA+B,gDAAyD,CAAC;AACtG,eAAO,MAAM,cAAc,oCAAoC,CAAC;AAChE,eAAO,MAAM,YAAY,oBAAoB,CAAC;AAC9C,eAAO,MAAM,YAAY,qBAAqB,CAAC;AAE/C,eAAO,MAAM,kBAAkB,SAAS,CAAC;AACzC,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAC/C,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AAEvC,eAAO,MAAM,UAAU,aAAa,CAAC;AAErC,eAAO,MAAM,0BAA0B,QAAyD,CAAC"}
|
package/build/lib/constants.js
CHANGED
|
@@ -3,12 +3,11 @@ export const DEFAULT_TEST_BUNDLE_SUFFIX = '.xctrunner';
|
|
|
3
3
|
export const WDA_RUNNER_BUNDLE_ID = 'com.facebook.WebDriverAgentRunner';
|
|
4
4
|
export const WDA_RUNNER_BUNDLE_ID_FOR_XCTEST = `${WDA_RUNNER_BUNDLE_ID}${DEFAULT_TEST_BUNDLE_SUFFIX}`;
|
|
5
5
|
export const WDA_RUNNER_APP = 'WebDriverAgentRunner-Runner.app';
|
|
6
|
-
export const WDA_SCHEME = 'WebDriverAgentRunner';
|
|
7
6
|
export const PROJECT_FILE = 'project.pbxproj';
|
|
8
7
|
export const WDA_BASE_URL = 'http://127.0.0.1';
|
|
9
8
|
export const PLATFORM_NAME_TVOS = 'tvOS';
|
|
9
|
+
export const PLATFORM_NAME_WATCHOS = 'watchOS';
|
|
10
10
|
export const PLATFORM_NAME_IOS = 'iOS';
|
|
11
|
-
export const SDK_SIMULATOR = 'iphonesimulator';
|
|
12
11
|
export const SDK_DEVICE = 'iphoneos';
|
|
13
12
|
export const WDA_UPGRADE_TIMESTAMP_PATH = path.join('.appium', 'webdriveragent', 'upgrade.time');
|
|
14
13
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../lib/constants.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAY,CAAC;AACvD,MAAM,CAAC,MAAM,oBAAoB,GAAG,mCAAmC,CAAC;AACxE,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,oBAAoB,GAAG,0BAA0B,EAAE,CAAC;AACtG,MAAM,CAAC,MAAM,cAAc,GAAG,iCAAiC,CAAC;AAChE,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../lib/constants.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAY,CAAC;AACvD,MAAM,CAAC,MAAM,oBAAoB,GAAG,mCAAmC,CAAC;AACxE,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,oBAAoB,GAAG,0BAA0B,EAAE,CAAC;AACtG,MAAM,CAAC,MAAM,cAAc,GAAG,iCAAiC,CAAC;AAChE,MAAM,CAAC,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAC9C,MAAM,CAAC,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAE/C,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AACzC,MAAM,CAAC,MAAM,qBAAqB,GAAG,SAAS,CAAC;AAC/C,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEvC,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;AAErC,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC"}
|
package/build/lib/types.d.ts
CHANGED
|
@@ -151,8 +151,8 @@ export interface XcodeShowBuildSettingsEntry {
|
|
|
151
151
|
buildSettings: XcodeBuildSettings;
|
|
152
152
|
target: string;
|
|
153
153
|
}
|
|
154
|
-
export type WdaScheme = 'WebDriverAgentRunner' | 'WebDriverAgentLib' | 'WebDriverAgentRunner_tvOS' | 'WebDriverAgentLib_tvOS';
|
|
155
|
-
export type WdaSdk = 'iphonesimulator' | 'iphoneos' | 'appletvsimulator' | 'appletvos';
|
|
154
|
+
export type WdaScheme = 'WebDriverAgentRunner' | 'WebDriverAgentLib' | 'WebDriverAgentRunner_tvOS' | 'WebDriverAgentLib_tvOS' | 'WebDriverAgentRunner_watchOS' | 'WebDriverAgentLib_watchOS';
|
|
155
|
+
export type WdaSdk = 'iphonesimulator' | 'iphoneos' | 'appletvsimulator' | 'appletvos' | 'watchsimulator';
|
|
156
156
|
export type WdaBuildConfiguration = 'Debug' | 'Release';
|
|
157
157
|
/** Options passed to {@link XcodeBuild.retrieveBuildSettings}. */
|
|
158
158
|
export interface RetrieveBuildSettingsOptions {
|
package/build/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { BOOTSTRAP_PATH } from './module.js';
|
|
2
|
-
export { isTvOS } from './platform.js';
|
|
2
|
+
export { getPlatformSchemeSuffix, isTvOS, isWatchOS } from './platform.js';
|
|
3
3
|
export { getPIDsListeningOnPort, killAppUsingPattern, resetTestProcesses } from './processes.js';
|
|
4
4
|
export { setRealDeviceSecurity } from './security.js';
|
|
5
5
|
export { getAdditionalRunContent, getXctestrunFileName, getXctestrunFilePath, setXctestrunFile } from './xctestrun.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/utils/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/utils/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAC,uBAAuB,EAAE,MAAM,EAAE,SAAS,EAAC,MAAM,eAAe,CAAC;AACzE,OAAO,EAAC,sBAAsB,EAAE,mBAAmB,EAAE,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAC/F,OAAO,EAAC,qBAAqB,EAAC,MAAM,eAAe,CAAC;AACpD,OAAO,EAAC,uBAAuB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AACrH,YAAY,EAAC,iBAAiB,EAAC,MAAM,gBAAgB,CAAC;AAEtD;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAErE"}
|
package/build/lib/utils/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getWDAUpgradeTimestamp as getWDAUpgradeTimestampImpl } from './module.js';
|
|
2
2
|
export { BOOTSTRAP_PATH } from './module.js';
|
|
3
|
-
export { isTvOS } from './platform.js';
|
|
3
|
+
export { getPlatformSchemeSuffix, isTvOS, isWatchOS } from './platform.js';
|
|
4
4
|
export { getPIDsListeningOnPort, killAppUsingPattern, resetTestProcesses } from './processes.js';
|
|
5
5
|
export { setRealDeviceSecurity } from './security.js';
|
|
6
6
|
export { getAdditionalRunContent, getXctestrunFileName, getXctestrunFilePath, setXctestrunFile } from './xctestrun.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,sBAAsB,IAAI,0BAA0B,EAAC,MAAM,aAAa,CAAC;AAEjF,OAAO,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,sBAAsB,IAAI,0BAA0B,EAAC,MAAM,aAAa,CAAC;AAEjF,OAAO,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAC,uBAAuB,EAAE,MAAM,EAAE,SAAS,EAAC,MAAM,eAAe,CAAC;AACzE,OAAO,EAAC,sBAAsB,EAAE,mBAAmB,EAAE,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAC/F,OAAO,EAAC,qBAAqB,EAAC,MAAM,eAAe,CAAC;AACpD,OAAO,EAAC,uBAAuB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAGrH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,OAAO,MAAM,0BAA0B,EAAE,CAAC;AAC5C,CAAC"}
|
|
@@ -4,4 +4,16 @@
|
|
|
4
4
|
* @returns Return true if the platformName is tvOS
|
|
5
5
|
*/
|
|
6
6
|
export declare function isTvOS(platformName: string): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Return true if the platformName is watchOS
|
|
9
|
+
* @param platformName The name of the platform
|
|
10
|
+
* @returns Return true if the platformName is watchOS
|
|
11
|
+
*/
|
|
12
|
+
export declare function isWatchOS(platformName: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* @param platformName The name of the platform
|
|
15
|
+
* @returns The `WebDriverAgentRunner`/`WebDriverAgentLib` scheme name suffix for the given platform:
|
|
16
|
+
* '_tvOS', '_watchOS', or '' for iOS.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getPlatformSchemeSuffix(platformName: string): string;
|
|
7
19
|
//# sourceMappingURL=platform.d.ts.map
|