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.
Files changed (55) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/Scripts/build-webdriveragent.mjs +9 -9
  3. package/Scripts/build.sh +8 -1
  4. package/WebDriverAgent.xcodeproj/project.pbxproj +125 -107
  5. package/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/IntegrationTests_watchOS.xcscheme +4 -4
  6. package/WebDriverAgentLib/FBAlert.m +8 -6
  7. package/WebDriverAgentLib/Info.plist +2 -2
  8. package/WebDriverAgentTests/IntegrationTests_watchOS/IntegrationTests_watchOS-Bridging-Header.h +21 -0
  9. package/WebDriverAgentTests/IntegrationTests_watchOS/WDAAlertIntegrationTests.swift +11 -9
  10. package/WebDriverAgentTests/IntegrationTests_watchOS/WDAAppLifecycleIntegrationTests.swift +18 -38
  11. package/WebDriverAgentTests/IntegrationTests_watchOS/WDAClickIntegrationTests.swift +11 -17
  12. package/WebDriverAgentTests/IntegrationTests_watchOS/WDADeviceIntegrationTests.swift +50 -71
  13. package/WebDriverAgentTests/IntegrationTests_watchOS/WDAElementAttributeIntegrationTests.swift +23 -41
  14. package/WebDriverAgentTests/IntegrationTests_watchOS/WDAFindIntegrationTests.swift +70 -95
  15. package/WebDriverAgentTests/IntegrationTests_watchOS/WDAScreenshotAndSourceIntegrationTests.swift +24 -22
  16. package/WebDriverAgentTests/IntegrationTests_watchOS/WDATypingIntegrationTests.swift +44 -28
  17. package/WebDriverAgentTests/IntegrationTests_watchOS/WDAWatchInProcessTestCase.swift +51 -0
  18. package/build/lib/check-dependencies.d.ts.map +1 -1
  19. package/build/lib/check-dependencies.js +21 -7
  20. package/build/lib/check-dependencies.js.map +1 -1
  21. package/build/lib/constants.d.ts +1 -2
  22. package/build/lib/constants.d.ts.map +1 -1
  23. package/build/lib/constants.js +1 -2
  24. package/build/lib/constants.js.map +1 -1
  25. package/build/lib/types.d.ts +2 -2
  26. package/build/lib/types.d.ts.map +1 -1
  27. package/build/lib/utils/index.d.ts +1 -1
  28. package/build/lib/utils/index.d.ts.map +1 -1
  29. package/build/lib/utils/index.js +1 -1
  30. package/build/lib/utils/index.js.map +1 -1
  31. package/build/lib/utils/platform.d.ts +12 -0
  32. package/build/lib/utils/platform.d.ts.map +1 -1
  33. package/build/lib/utils/platform.js +23 -1
  34. package/build/lib/utils/platform.js.map +1 -1
  35. package/build/lib/utils/xctestrun.js +27 -3
  36. package/build/lib/utils/xctestrun.js.map +1 -1
  37. package/build/lib/webdriveragent.d.ts.map +1 -1
  38. package/build/lib/webdriveragent.js +4 -1
  39. package/build/lib/webdriveragent.js.map +1 -1
  40. package/build/lib/xcodebuild.d.ts.map +1 -1
  41. package/build/lib/xcodebuild.js +19 -9
  42. package/build/lib/xcodebuild.js.map +1 -1
  43. package/lib/check-dependencies.ts +23 -7
  44. package/lib/constants.ts +1 -2
  45. package/lib/types.ts +4 -2
  46. package/lib/utils/index.ts +1 -1
  47. package/lib/utils/platform.ts +25 -1
  48. package/lib/utils/xctestrun.ts +29 -3
  49. package/lib/webdriveragent.ts +5 -1
  50. package/lib/xcodebuild.ts +27 -12
  51. package/package.json +3 -2
  52. package/WebDriverAgentTests/IntegrationTests_watchOS/WDASessionIntegrationTests.swift +0 -72
  53. package/WebDriverAgentTests/IntegrationTests_watchOS/WDAUnknownCommandIntegrationTests.swift +0 -24
  54. package/WebDriverAgentTests/IntegrationTests_watchOS/WDAWatchHTTPClient.swift +0 -95
  55. package/WebDriverAgentTests/IntegrationTests_watchOS/WDAWatchIntegrationTestCase.swift +0 -61
@@ -8,119 +8,94 @@
8
8
 
9
9
  import XCTest
10
10
 
11
- /// Covers FBFindElementCommands: find/sub-find/active-element, not-found errors, and every
12
- /// locator strategy (accessibility id/name/id, class name, class chain, xpath, predicate
13
- /// string, link text). getVisibleCells is skipped - no table/collection view to test it against.
14
- final class WDAFindIntegrationTests: WDAWatchIntegrationTestCase {
15
- func testFindElementByAccessibilityId() throws {
16
- let elementId = try findElement(byAccessibilityId: "tapMeButton")
17
- XCTAssertFalse(elementId.isEmpty)
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 testFindElementByNameAndIdAliases() throws {
21
- // "name" and "id" are aliases for "accessibility id".
22
- for using in ["name", "id"] {
23
- let response = try client.post("/session/\(sessionId!)/element", body: [
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 testFindElementByPredicateString() throws {
33
- let response = try client.post("/session/\(sessionId!)/element", body: [
34
- "using": "predicate string",
35
- "value": "label == \"Tap Me\"",
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 testFindElementsByClassChain() throws {
42
- let response = try client.post("/session/\(sessionId!)/elements", body: [
43
- "using": "class chain",
44
- "value": "**/XCUIElementTypeButton",
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 testFindElementByXPath() throws {
51
- let response = try client.post("/session/\(sessionId!)/element", body: [
52
- "using": "xpath",
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 testFindElementByLinkTextAndPartialLinkText() throws {
60
- // WDA matches (partial) link text against `name`, not an actual hyperlink search.
61
- for using in ["link text", "partial link text"] {
62
- let value = using == "link text" ? "tapMeButton" : "tapMe"
63
- let response = try client.post("/session/\(sessionId!)/element", body: [
64
- "using": using,
65
- "value": value,
66
- ])
67
- XCTAssertEqual(response.statusCode, 200, "using: \(using)")
68
- XCTAssertNotNil(response.valueDict?["ELEMENT"], "using: \(using)")
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 testFindElementThatDoesNotExistReturnsAnError() throws {
73
- let response = try client.post("/session/\(sessionId!)/element", body: [
74
- "using": "accessibility id",
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 testFindElements() throws {
81
- let response = try client.post("/session/\(sessionId!)/elements", body: [
82
- "using": "class name",
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 testFindSubElementAndSubElements() throws {
93
- let windowResponse = try client.post("/session/\(sessionId!)/element", body: [
94
- "using": "class name",
95
- "value": "XCUIElementTypeWindow",
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() throws {
117
- let fieldId = try findElement(byAccessibilityId: "typingField")
118
- try client.post("/session/\(sessionId!)/element/\(fieldId)/click")
119
- // Give the keyboard-sheet transition a moment to finish before checking focus.
120
- Thread.sleep(forTimeInterval: 1)
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
- let response = try client.get("/session/\(sessionId!)/element/active")
123
- XCTAssertEqual(response.statusCode, 200)
124
- XCTAssertNotNil(response.valueDict?["ELEMENT"])
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
  }
@@ -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(_ base64String: String?, file: StaticString = #filePath, line: UInt = #line) {
16
- guard let base64String = base64String, let data = Data(base64Encoded: base64String) else {
17
- return XCTFail("Response value was not base64 data", file: file, line: line)
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, "response was not a PNG", file: file, line: line)
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 response = try client.get("/session/\(sessionId!)/screenshot")
25
- XCTAssertEqual(response.statusCode, 200)
26
- assertLooksLikeAPNG(response.valueString)
33
+ let data = try XCUIDevice.shared.fb_screenshot()
34
+ assertLooksLikeAPNG(data)
27
35
  }
28
36
 
29
- func testElementScreenshot() throws {
30
- let buttonId = try findElement(byAccessibilityId: "tapMeButton")
31
- let response = try client.get("/session/\(sessionId!)/element/\(buttonId)/screenshot")
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() throws {
37
- let response = try client.get("/session/\(sessionId!)/source?format=xml")
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() throws {
48
- let response = try client.get("/session/\(sessionId!)/wda/accessibleSource")
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 /element/:uuid/value, /element/:uuid/clear, and /wda/keyboard/dismiss.
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: WDAWatchIntegrationTestCase {
17
- func testSetValueOpensTheKeyboardAndAttemptsToTypeIntoTheField() throws {
18
- let fieldId = try findElement(byAccessibilityId: "typingField")
19
- XCTAssertEqual(try attributeValue(fieldId, "value"), "Type here", "expected the untouched placeholder")
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
- let setValueResponse = try client.post("/session/\(sessionId!)/element/\(fieldId)/value", body: [
22
- "value": ["h", "i"]
23
- ])
24
- XCTAssertEqual(setValueResponse.statusCode, 200, "the route itself should not error even though typing doesn't land")
23
+ private func backOutOfKeyboardIfPresented() {
24
+ let cancel = app.buttons["Cancel"]
25
+ if cancel.waitForExistence(timeout: 2) {
26
+ cancel.tap()
27
+ }
28
+ }
25
29
 
26
- XCTExpectFailure("watchOS keystroke delivery into the on-screen keyboard is a known unresolved limitation") {
27
- let value = try? attributeValue(fieldId, "value")
28
- XCTAssertEqual(value, "hi")
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
- // Back out so later tests start clean.
32
- if let cancelId = try? findElement(byAccessibilityId: "Cancel") {
33
- _ = try? client.post("/session/\(sessionId!)/element/\(cancelId)/click")
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
- let fieldId = try findElement(byAccessibilityId: "typingField")
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 testDismissKeyboardRouteRespondsWithoutCrashingTheServer() throws {
45
- // Only asserts the route round-trips cleanly, not that dismissal actually happens.
46
- let fieldId = try findElement(byAccessibilityId: "typingField")
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 client.post("/session/\(sessionId!)/wda/keyboard/dismiss")
69
+ _ = try? app.fb_dismissKeyboard(withKeyNames: nil)
51
70
 
52
- // Back out regardless of whether dismiss actually closed the sheet.
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":"AAOA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAEhD;;GAEG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAW1E"}
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 { WDA_SCHEME, SDK_SIMULATOR, WDA_RUNNER_APP } from './constants.js';
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', 'Debug-iphonesimulator', WDA_RUNNER_APP);
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
- async function buildWDASim() {
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
- WDA_SCHEME,
40
+ scheme,
27
41
  '-sdk',
28
- SDK_SIMULATOR,
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,UAAU,EAAE,aAAa,EAAE,cAAc,EAAC,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAGhD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAsB;IACvD,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,uBAAuB,EAAE,cAAc,CAAC,CAAC;IAC/G,IAAI,MAAM,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;QACnC,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,MAAM,WAAW,EAAE,CAAC;IACpB,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,MAAM,IAAI,GAAG;QACX,UAAU;QACV,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,0BAA0B,CAAC;QACrD,SAAS;QACT,UAAU;QACV,MAAM;QACN,aAAa;QACb,uBAAuB;QACvB,4BAA4B;QAC5B,gCAAgC;KACjC,CAAC;IACF,MAAM,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC"}
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"}
@@ -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,UAAU,yBAAyB,CAAC;AACjD,eAAO,MAAM,YAAY,oBAAoB,CAAC;AAC9C,eAAO,MAAM,YAAY,qBAAqB,CAAC;AAE/C,eAAO,MAAM,kBAAkB,SAAS,CAAC;AACzC,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AAEvC,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAC/C,eAAO,MAAM,UAAU,aAAa,CAAC;AAErC,eAAO,MAAM,0BAA0B,QAAyD,CAAC"}
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"}
@@ -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,UAAU,GAAG,sBAAsB,CAAC;AACjD,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,iBAAiB,GAAG,KAAK,CAAC;AAEvC,MAAM,CAAC,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAC/C,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;AAErC,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC"}
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"}
@@ -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 {
@@ -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;AACrC,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"}
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"}
@@ -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;AACrC,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"}
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