appium-xcuitest-driver 10.3.0 → 10.4.1
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 +12 -0
- package/build/lib/commands/active-app-info.d.ts +9 -0
- package/build/lib/commands/active-app-info.d.ts.map +1 -0
- package/build/lib/commands/active-app-info.js +14 -0
- package/build/lib/commands/active-app-info.js.map +1 -0
- package/build/lib/commands/alert.d.ts +42 -45
- package/build/lib/commands/alert.d.ts.map +1 -1
- package/build/lib/commands/alert.js +66 -62
- package/build/lib/commands/alert.js.map +1 -1
- package/build/lib/commands/app-management.d.ts +150 -153
- package/build/lib/commands/app-management.d.ts.map +1 -1
- package/build/lib/commands/app-management.js +300 -286
- package/build/lib/commands/app-management.js.map +1 -1
- package/build/lib/commands/app-strings.d.ts +14 -17
- package/build/lib/commands/app-strings.d.ts.map +1 -1
- package/build/lib/commands/app-strings.js +23 -24
- package/build/lib/commands/app-strings.js.map +1 -1
- package/build/lib/commands/appearance.d.ts +19 -22
- package/build/lib/commands/appearance.d.ts.map +1 -1
- package/build/lib/commands/appearance.js +56 -56
- package/build/lib/commands/appearance.js.map +1 -1
- package/build/lib/commands/audit.d.ts +22 -17
- package/build/lib/commands/audit.d.ts.map +1 -1
- package/build/lib/commands/audit.js +17 -18
- package/build/lib/commands/audit.js.map +1 -1
- package/build/lib/commands/battery.d.ts +11 -14
- package/build/lib/commands/battery.d.ts.map +1 -1
- package/build/lib/commands/battery.js +36 -37
- package/build/lib/commands/battery.js.map +1 -1
- package/build/lib/commands/biometric.d.ts +30 -33
- package/build/lib/commands/biometric.d.ts.map +1 -1
- package/build/lib/commands/biometric.js +42 -41
- package/build/lib/commands/biometric.js.map +1 -1
- package/build/lib/commands/certificate.d.ts +48 -45
- package/build/lib/commands/certificate.d.ts.map +1 -1
- package/build/lib/commands/certificate.js +218 -205
- package/build/lib/commands/certificate.js.map +1 -1
- package/build/lib/commands/clipboard.d.ts +19 -22
- package/build/lib/commands/clipboard.d.ts.map +1 -1
- package/build/lib/commands/clipboard.js +30 -30
- package/build/lib/commands/clipboard.js.map +1 -1
- package/build/lib/commands/condition.d.ts +49 -26
- package/build/lib/commands/condition.d.ts.map +1 -1
- package/build/lib/commands/condition.js +87 -86
- package/build/lib/commands/condition.js.map +1 -1
- package/build/lib/commands/content-size.d.ts +26 -29
- package/build/lib/commands/content-size.d.ts.map +1 -1
- package/build/lib/commands/content-size.js +36 -36
- package/build/lib/commands/content-size.js.map +1 -1
- package/build/lib/commands/context.d.ts +161 -108
- package/build/lib/commands/context.d.ts.map +1 -1
- package/build/lib/commands/context.js +530 -517
- package/build/lib/commands/context.js.map +1 -1
- package/build/lib/commands/deviceInfo.d.ts +9 -12
- package/build/lib/commands/deviceInfo.d.ts.map +1 -1
- package/build/lib/commands/deviceInfo.js +17 -18
- package/build/lib/commands/deviceInfo.js.map +1 -1
- package/build/lib/commands/element.d.ts +102 -105
- package/build/lib/commands/element.d.ts.map +1 -1
- package/build/lib/commands/element.js +337 -323
- package/build/lib/commands/element.js.map +1 -1
- package/build/lib/commands/execute.d.ts +24 -19
- package/build/lib/commands/execute.d.ts.map +1 -1
- package/build/lib/commands/execute.js +63 -62
- package/build/lib/commands/execute.js.map +1 -1
- package/build/lib/commands/file-movement.d.ts +77 -80
- package/build/lib/commands/file-movement.d.ts.map +1 -1
- package/build/lib/commands/file-movement.js +130 -124
- package/build/lib/commands/file-movement.js.map +1 -1
- package/build/lib/commands/find.d.ts +18 -21
- package/build/lib/commands/find.d.ts.map +1 -1
- package/build/lib/commands/find.js +158 -156
- package/build/lib/commands/find.js.map +1 -1
- package/build/lib/commands/general.d.ts +124 -116
- package/build/lib/commands/general.d.ts.map +1 -1
- package/build/lib/commands/general.js +248 -232
- package/build/lib/commands/general.js.map +1 -1
- package/build/lib/commands/geolocation.d.ts +43 -46
- package/build/lib/commands/geolocation.d.ts.map +1 -1
- package/build/lib/commands/geolocation.js +10 -11
- package/build/lib/commands/geolocation.js.map +1 -1
- package/build/lib/commands/gesture.d.ts +273 -276
- package/build/lib/commands/gesture.d.ts.map +1 -1
- package/build/lib/commands/gesture.js +506 -492
- package/build/lib/commands/gesture.js.map +1 -1
- package/build/lib/commands/increase-contrast.d.ts +20 -23
- package/build/lib/commands/increase-contrast.d.ts.map +1 -1
- package/build/lib/commands/increase-contrast.js +30 -30
- package/build/lib/commands/increase-contrast.js.map +1 -1
- package/build/lib/commands/iohid.d.ts +1370 -1373
- package/build/lib/commands/iohid.d.ts.map +1 -1
- package/build/lib/commands/iohid.js +30 -31
- package/build/lib/commands/iohid.js.map +1 -1
- package/build/lib/commands/keyboard.d.ts +29 -32
- package/build/lib/commands/keyboard.d.ts.map +1 -1
- package/build/lib/commands/keyboard.js +53 -51
- package/build/lib/commands/keyboard.js.map +1 -1
- package/build/lib/commands/keychains.d.ts +9 -12
- package/build/lib/commands/keychains.d.ts.map +1 -1
- package/build/lib/commands/keychains.js +13 -14
- package/build/lib/commands/keychains.js.map +1 -1
- package/build/lib/commands/localization.d.ts +16 -19
- package/build/lib/commands/localization.d.ts.map +1 -1
- package/build/lib/commands/localization.js +25 -26
- package/build/lib/commands/localization.js.map +1 -1
- package/build/lib/commands/location.d.ts +36 -39
- package/build/lib/commands/location.d.ts.map +1 -1
- package/build/lib/commands/location.js +99 -98
- package/build/lib/commands/location.js.map +1 -1
- package/build/lib/commands/lock.d.ts +21 -24
- package/build/lib/commands/lock.d.ts.map +1 -1
- package/build/lib/commands/lock.js +39 -38
- package/build/lib/commands/lock.js.map +1 -1
- package/build/lib/commands/log.d.ts +43 -37
- package/build/lib/commands/log.d.ts.map +1 -1
- package/build/lib/commands/log.js +174 -171
- package/build/lib/commands/log.js.map +1 -1
- package/build/lib/commands/memory.d.ts +9 -12
- package/build/lib/commands/memory.d.ts.map +1 -1
- package/build/lib/commands/memory.js +37 -38
- package/build/lib/commands/memory.js.map +1 -1
- package/build/lib/commands/navigation.d.ts +30 -33
- package/build/lib/commands/navigation.d.ts.map +1 -1
- package/build/lib/commands/navigation.js +92 -92
- package/build/lib/commands/navigation.js.map +1 -1
- package/build/lib/commands/notifications.d.ts +26 -29
- package/build/lib/commands/notifications.d.ts.map +1 -1
- package/build/lib/commands/notifications.js +53 -53
- package/build/lib/commands/notifications.js.map +1 -1
- package/build/lib/commands/pasteboard.d.ts +21 -24
- package/build/lib/commands/pasteboard.d.ts.map +1 -1
- package/build/lib/commands/pasteboard.js +37 -37
- package/build/lib/commands/pasteboard.js.map +1 -1
- package/build/lib/commands/pcap.d.ts +39 -26
- package/build/lib/commands/pcap.d.ts.map +1 -1
- package/build/lib/commands/pcap.js +81 -81
- package/build/lib/commands/pcap.js.map +1 -1
- package/build/lib/commands/performance.d.ts +63 -44
- package/build/lib/commands/performance.d.ts.map +1 -1
- package/build/lib/commands/performance.js +105 -105
- package/build/lib/commands/performance.js.map +1 -1
- package/build/lib/commands/permissions.d.ts +33 -36
- package/build/lib/commands/permissions.d.ts.map +1 -1
- package/build/lib/commands/permissions.js +66 -65
- package/build/lib/commands/permissions.js.map +1 -1
- package/build/lib/commands/proxy-helper.d.ts +12 -15
- package/build/lib/commands/proxy-helper.d.ts.map +1 -1
- package/build/lib/commands/proxy-helper.js +53 -54
- package/build/lib/commands/proxy-helper.js.map +1 -1
- package/build/lib/commands/record-audio.d.ts +49 -29
- package/build/lib/commands/record-audio.d.ts.map +1 -1
- package/build/lib/commands/record-audio.js +100 -104
- package/build/lib/commands/record-audio.js.map +1 -1
- package/build/lib/commands/recordscreen.d.ts +54 -18
- package/build/lib/commands/recordscreen.d.ts.map +1 -1
- package/build/lib/commands/recordscreen.js +127 -129
- package/build/lib/commands/recordscreen.js.map +1 -1
- package/build/lib/commands/screenshots.d.ts +14 -17
- package/build/lib/commands/screenshots.d.ts.map +1 -1
- package/build/lib/commands/screenshots.js +108 -107
- package/build/lib/commands/screenshots.js.map +1 -1
- package/build/lib/commands/simctl.d.ts +11 -14
- package/build/lib/commands/simctl.d.ts.map +1 -1
- package/build/lib/commands/simctl.js +23 -26
- package/build/lib/commands/simctl.js.map +1 -1
- package/build/lib/commands/source.d.ts +14 -17
- package/build/lib/commands/source.d.ts.map +1 -1
- package/build/lib/commands/source.js +40 -43
- package/build/lib/commands/source.js.map +1 -1
- package/build/lib/commands/timeouts.d.ts +44 -33
- package/build/lib/commands/timeouts.d.ts.map +1 -1
- package/build/lib/commands/timeouts.js +65 -63
- package/build/lib/commands/timeouts.js.map +1 -1
- package/build/lib/commands/web.d.ts +275 -197
- package/build/lib/commands/web.d.ts.map +1 -1
- package/build/lib/commands/web.js +866 -785
- package/build/lib/commands/web.js.map +1 -1
- package/build/lib/commands/xctest-record-screen.d.ts +63 -66
- package/build/lib/commands/xctest-record-screen.d.ts.map +1 -1
- package/build/lib/commands/xctest-record-screen.js +103 -102
- package/build/lib/commands/xctest-record-screen.js.map +1 -1
- package/build/lib/commands/xctest.d.ts +55 -51
- package/build/lib/commands/xctest.d.ts.map +1 -1
- package/build/lib/commands/xctest.js +116 -117
- package/build/lib/commands/xctest.js.map +1 -1
- package/build/lib/driver.d.ts +277 -1597
- package/build/lib/driver.d.ts.map +1 -1
- package/build/lib/driver.js +318 -235
- package/build/lib/driver.js.map +1 -1
- package/build/lib/execute-method-map.d.ts.map +1 -1
- package/build/lib/execute-method-map.js +9 -0
- package/build/lib/execute-method-map.js.map +1 -1
- package/lib/commands/active-app-info.js +12 -0
- package/lib/commands/alert.js +68 -65
- package/lib/commands/app-management.js +308 -301
- package/lib/commands/app-strings.js +24 -26
- package/lib/commands/appearance.js +54 -56
- package/lib/commands/audit.js +18 -20
- package/lib/commands/battery.js +35 -37
- package/lib/commands/biometric.js +44 -46
- package/lib/commands/certificate.js +226 -215
- package/lib/commands/clipboard.js +30 -32
- package/lib/commands/condition.js +98 -100
- package/lib/commands/content-size.js +36 -38
- package/lib/commands/context.js +495 -490
- package/lib/commands/deviceInfo.js +19 -20
- package/lib/commands/element.js +367 -357
- package/lib/commands/execute.js +72 -72
- package/lib/commands/file-movement.js +132 -134
- package/lib/commands/find.js +160 -159
- package/lib/commands/general.js +238 -231
- package/lib/commands/geolocation.js +6 -14
- package/lib/commands/gesture.js +525 -515
- package/lib/commands/increase-contrast.js +30 -32
- package/lib/commands/iohid.js +32 -34
- package/lib/commands/keyboard.js +49 -51
- package/lib/commands/keychains.js +12 -14
- package/lib/commands/localization.js +24 -26
- package/lib/commands/location.js +102 -104
- package/lib/commands/lock.js +38 -38
- package/lib/commands/log.js +197 -198
- package/lib/commands/memory.js +40 -42
- package/lib/commands/navigation.js +96 -100
- package/lib/commands/notifications.js +57 -59
- package/lib/commands/pasteboard.js +37 -39
- package/lib/commands/pcap.js +84 -86
- package/lib/commands/performance.js +132 -133
- package/lib/commands/permissions.js +67 -69
- package/lib/commands/proxy-helper.js +60 -61
- package/lib/commands/record-audio.js +115 -120
- package/lib/commands/recordscreen.js +145 -149
- package/lib/commands/screenshots.js +116 -116
- package/lib/commands/simctl.js +25 -29
- package/lib/commands/source.js +42 -46
- package/lib/commands/timeouts.js +59 -63
- package/lib/commands/web.js +932 -859
- package/lib/commands/xctest-record-screen.js +103 -105
- package/lib/commands/xctest.js +134 -139
- package/lib/driver.js +286 -235
- package/lib/execute-method-map.ts +9 -0
- package/npm-shrinkwrap.json +8 -8
- package/package.json +1 -1
- package/build/lib/commands/activeAppInfo.d.ts +0 -12
- package/build/lib/commands/activeAppInfo.d.ts.map +0 -1
- package/build/lib/commands/activeAppInfo.js +0 -15
- package/build/lib/commands/activeAppInfo.js.map +0 -1
- package/build/lib/commands/index.d.ts +0 -96
- package/build/lib/commands/index.d.ts.map +0 -1
- package/build/lib/commands/index.js +0 -100
- package/build/lib/commands/index.js.map +0 -1
- package/build/lib/cookies.d.ts +0 -15
- package/build/lib/cookies.d.ts.map +0 -1
- package/build/lib/cookies.js +0 -84
- package/build/lib/cookies.js.map +0 -1
- package/lib/commands/activeAppInfo.js +0 -14
- package/lib/commands/index.js +0 -95
- package/lib/cookies.js +0 -92
|
@@ -10,57 +10,61 @@ export function assertIDB(opts: XCUITestDriver["opts"]): any;
|
|
|
10
10
|
* @returns {XCTestResult[]|string[]} results The final output of the XCTest run
|
|
11
11
|
*/
|
|
12
12
|
export function parseXCTestStdout(stdout: string): XCTestResult[] | string[];
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
|
|
13
|
+
/**
|
|
14
|
+
* @typedef {Error} XCUITestError
|
|
15
|
+
*
|
|
16
|
+
* @property {number} code Subprocess exit code
|
|
17
|
+
* @property {string} signal The signal (SIG*) that caused the process to fail
|
|
18
|
+
* @property {XCTestResult[]} results The output of the failed test (if there is output)
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Run a native XCTest script.
|
|
22
|
+
*
|
|
23
|
+
* Launches a subprocess that runs the XC Test and blocks until it is completed. Parses the stdout of the process and returns its result as an array.
|
|
24
|
+
*
|
|
25
|
+
* **Facebook's [IDB](https://github.com/facebook/idb) tool is required** to run such tests; see [the idb docs](https://fbidb.io/docs/test-execution/) for reference.
|
|
26
|
+
*
|
|
27
|
+
* @param {string} testRunnerBundleId - Test app bundle (e.g.: `io.appium.XCTesterAppUITests.xctrunner`)
|
|
28
|
+
* @param {string} appUnderTestBundleId - App-under-test bundle
|
|
29
|
+
* @param {string} xcTestBundleId - XCTest bundle ID
|
|
30
|
+
* @param {string[]} args - Launch arguments to start the test with (see [reference documentation](https://developer.apple.com/documentation/xctest/xcuiapplication/1500477-launcharguments))
|
|
31
|
+
* @param {'app'|'ui'|'logic'} testType - XC test type
|
|
32
|
+
* @param {import('@appium/types').StringRecord} [env] - Environment variables passed to test
|
|
33
|
+
* @param {number} timeout - Timeout (in ms) for session completion.
|
|
34
|
+
* @throws {XCUITestError} Error thrown if subprocess returns non-zero exit code
|
|
35
|
+
* @returns {Promise<import('./types').RunXCTestResult>} The array of test results
|
|
36
|
+
* @this {XCUITestDriver}
|
|
37
|
+
*/
|
|
38
|
+
export function mobileRunXCTest(this: import("../driver").XCUITestDriver, testRunnerBundleId: string, appUnderTestBundleId: string, xcTestBundleId: string, args?: string[], testType?: "app" | "ui" | "logic", env?: import("@appium/types").StringRecord, timeout?: number): Promise<import("./types").RunXCTestResult>;
|
|
39
|
+
/**
|
|
40
|
+
* Installs an XCTest bundle to the device under test.
|
|
41
|
+
*
|
|
42
|
+
* **Facebook's [IDB](https://github.com/facebook/idb) tool is required** for this command to work.
|
|
43
|
+
*
|
|
44
|
+
* @param {string} xctestApp - Path of the XCTest app (URL or filename with extension `.app`)
|
|
45
|
+
* @returns {Promise<void>}
|
|
46
|
+
* @this {XCUITestDriver}
|
|
47
|
+
*/
|
|
48
|
+
export function mobileInstallXCTestBundle(this: import("../driver").XCUITestDriver, xctestApp: string): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* List XCTest bundles that are installed on the device.
|
|
51
|
+
*
|
|
52
|
+
* **Facebook's [IDB](https://github.com/facebook/idb) tool is required** for this command to work.
|
|
53
|
+
*
|
|
54
|
+
* @returns {Promise<string[]>} List of XCTest bundles (e.g.: `XCTesterAppUITests.XCTesterAppUITests/testLaunchPerformance`)
|
|
55
|
+
* @this {XCUITestDriver}
|
|
56
|
+
*/
|
|
57
|
+
export function mobileListXCTestBundles(this: import("../driver").XCUITestDriver): Promise<string[]>;
|
|
58
|
+
/**
|
|
59
|
+
* List XCTests in a test bundle
|
|
60
|
+
*
|
|
61
|
+
* **Facebook's [IDB](https://github.com/facebook/idb) tool is required** for this command to work.
|
|
62
|
+
* @param {string} bundle - Bundle ID of the XCTest
|
|
63
|
+
*
|
|
64
|
+
* @returns {Promise<string[]>} The list of xctests in the test bundle (e.g., `['XCTesterAppUITests.XCTesterAppUITests/testExample', 'XCTesterAppUITests.XCTesterAppUITests/testLaunchPerformance']`)
|
|
65
|
+
* @this {XCUITestDriver}
|
|
66
|
+
*/
|
|
67
|
+
export function mobileListXCTestsInTestBundle(this: import("../driver").XCUITestDriver, bundle: string): Promise<string[]>;
|
|
64
68
|
export type XCUITestError = Error;
|
|
65
69
|
export type XCUITestDriver = import("../driver").XCUITestDriver;
|
|
66
70
|
export type XCTestResult = import("./types").XCTestResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xctest.d.ts","sourceRoot":"","sources":["../../../lib/commands/xctest.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"xctest.d.ts","sourceRoot":"","sources":["../../../lib/commands/xctest.js"],"names":[],"mappings":"AASA;;;;GAIG;AACH,gCAFW,cAAc,CAAC,MAAM,CAAC,OAUhC;AAED;;;;GAIG;AACH,0CAHW,MAAM,GACJ,YAAY,EAAE,GAAC,MAAM,EAAE,CA+FnC;AAED;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,8FAXW,MAAM,wBACN,MAAM,kBACN,MAAM,SACN,MAAM,EAAE,aACR,KAAK,GAAC,IAAI,GAAC,OAAO,QAClB,OAAO,eAAe,EAAE,YAAY,YACpC,MAAM,GAEJ,OAAO,CAAC,OAAO,SAAS,EAAE,eAAe,CAAC,CA8EtD;AAED;;;;;;;;GAQG;AACH,+FAJW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAczB;AAED;;;;;;;GAOG;AACH,mFAHa,OAAO,CAAC,MAAM,EAAE,CAAC,CAK7B;AAED;;;;;;;;GAQG;AACH,gGALW,MAAM,GAEJ,OAAO,CAAC,MAAM,EAAE,CAAC,CAY7B;4BA1JY,KAAK;6BA6JL,OAAO,WAAW,EAAE,cAAc;2BAClC,OAAO,SAAS,EAAE,YAAY"}
|
|
@@ -5,13 +5,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.assertIDB = assertIDB;
|
|
7
7
|
exports.parseXCTestStdout = parseXCTestStdout;
|
|
8
|
+
exports.mobileRunXCTest = mobileRunXCTest;
|
|
9
|
+
exports.mobileInstallXCTestBundle = mobileInstallXCTestBundle;
|
|
10
|
+
exports.mobileListXCTestBundles = mobileListXCTestBundles;
|
|
11
|
+
exports.mobileListXCTestsInTestBundle = mobileListXCTestsInTestBundle;
|
|
8
12
|
const bluebird_1 = __importDefault(require("bluebird"));
|
|
9
13
|
const support_1 = require("appium/support");
|
|
10
14
|
const lodash_1 = __importDefault(require("lodash"));
|
|
11
15
|
const driver_1 = require("appium/driver");
|
|
12
|
-
/**
|
|
13
|
-
* @type {360000}
|
|
14
|
-
*/
|
|
15
16
|
const XCTEST_TIMEOUT = 360000; // 60 minute timeout
|
|
16
17
|
const xctestLog = support_1.logger.getLogger('XCTest');
|
|
17
18
|
/**
|
|
@@ -131,126 +132,124 @@ function parseXCTestStdout(stdout) {
|
|
|
131
132
|
* @property {string} signal The signal (SIG*) that caused the process to fail
|
|
132
133
|
* @property {XCTestResult[]} results The output of the failed test (if there is output)
|
|
133
134
|
*/
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
mostRecentLogObject = parseXCTestStdout(stdout);
|
|
166
|
-
}
|
|
167
|
-
catch (err) {
|
|
168
|
-
// Fails if log parsing fails.
|
|
169
|
-
// This is in case IDB changes the way that logs are formatted and
|
|
170
|
-
// it breaks 'parseXCTestStdout'. If that happens we still want the process
|
|
171
|
-
// to finish
|
|
172
|
-
this.log.warn(`Failed to parse logs from test output: '${stdout}'`);
|
|
173
|
-
this.log.debug(err.stack);
|
|
174
|
-
}
|
|
135
|
+
/**
|
|
136
|
+
* Run a native XCTest script.
|
|
137
|
+
*
|
|
138
|
+
* Launches a subprocess that runs the XC Test and blocks until it is completed. Parses the stdout of the process and returns its result as an array.
|
|
139
|
+
*
|
|
140
|
+
* **Facebook's [IDB](https://github.com/facebook/idb) tool is required** to run such tests; see [the idb docs](https://fbidb.io/docs/test-execution/) for reference.
|
|
141
|
+
*
|
|
142
|
+
* @param {string} testRunnerBundleId - Test app bundle (e.g.: `io.appium.XCTesterAppUITests.xctrunner`)
|
|
143
|
+
* @param {string} appUnderTestBundleId - App-under-test bundle
|
|
144
|
+
* @param {string} xcTestBundleId - XCTest bundle ID
|
|
145
|
+
* @param {string[]} args - Launch arguments to start the test with (see [reference documentation](https://developer.apple.com/documentation/xctest/xcuiapplication/1500477-launcharguments))
|
|
146
|
+
* @param {'app'|'ui'|'logic'} testType - XC test type
|
|
147
|
+
* @param {import('@appium/types').StringRecord} [env] - Environment variables passed to test
|
|
148
|
+
* @param {number} timeout - Timeout (in ms) for session completion.
|
|
149
|
+
* @throws {XCUITestError} Error thrown if subprocess returns non-zero exit code
|
|
150
|
+
* @returns {Promise<import('./types').RunXCTestResult>} The array of test results
|
|
151
|
+
* @this {XCUITestDriver}
|
|
152
|
+
*/
|
|
153
|
+
async function mobileRunXCTest(testRunnerBundleId, appUnderTestBundleId, xcTestBundleId, args = [], testType = 'ui', env, timeout = XCTEST_TIMEOUT) {
|
|
154
|
+
const subproc = await assertIDB(this.opts).runXCUITest(testRunnerBundleId, appUnderTestBundleId, xcTestBundleId, { env, args, testType });
|
|
155
|
+
return await new bluebird_1.default((resolve, reject) => {
|
|
156
|
+
let mostRecentLogObject = null;
|
|
157
|
+
let xctestTimeout;
|
|
158
|
+
let lastErrorMessage = null;
|
|
159
|
+
if (timeout > 0) {
|
|
160
|
+
xctestTimeout = setTimeout(() => reject(new driver_1.errors.TimeoutError(`Timed out after '${timeout}ms' waiting for XCTest to complete`)), timeout);
|
|
161
|
+
}
|
|
162
|
+
subproc.on('output', (stdout, stderr) => {
|
|
163
|
+
if (stdout) {
|
|
164
|
+
try {
|
|
165
|
+
mostRecentLogObject = parseXCTestStdout(stdout);
|
|
175
166
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
167
|
+
catch (err) {
|
|
168
|
+
// Fails if log parsing fails.
|
|
169
|
+
// This is in case IDB changes the way that logs are formatted and
|
|
170
|
+
// it breaks 'parseXCTestStdout'. If that happens we still want the process
|
|
171
|
+
// to finish
|
|
172
|
+
this.log.warn(`Failed to parse logs from test output: '${stdout}'`);
|
|
173
|
+
this.log.debug(err.stack);
|
|
179
174
|
}
|
|
180
|
-
|
|
181
|
-
|
|
175
|
+
}
|
|
176
|
+
if (stderr) {
|
|
177
|
+
lastErrorMessage = stderr;
|
|
178
|
+
xctestLog.error(stderr);
|
|
179
|
+
}
|
|
180
|
+
if (stdout) {
|
|
181
|
+
xctestLog.info(stdout);
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
subproc.on('exit', (code, signal) => {
|
|
185
|
+
clearTimeout(xctestTimeout);
|
|
186
|
+
if (code !== 0) {
|
|
187
|
+
const err = /** @type {any} */ (new Error(lastErrorMessage || mostRecentLogObject));
|
|
188
|
+
err.code = code;
|
|
189
|
+
if (signal != null) {
|
|
190
|
+
err.signal = signal;
|
|
182
191
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
clearTimeout(xctestTimeout);
|
|
186
|
-
if (code !== 0) {
|
|
187
|
-
const err = /** @type {any} */ (new Error(lastErrorMessage || mostRecentLogObject));
|
|
188
|
-
err.code = code;
|
|
189
|
-
if (signal != null) {
|
|
190
|
-
err.signal = signal;
|
|
191
|
-
}
|
|
192
|
-
if (mostRecentLogObject) {
|
|
193
|
-
err.result = mostRecentLogObject;
|
|
194
|
-
}
|
|
195
|
-
return reject(err);
|
|
192
|
+
if (mostRecentLogObject) {
|
|
193
|
+
err.result = mostRecentLogObject;
|
|
196
194
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
195
|
+
return reject(err);
|
|
196
|
+
}
|
|
197
|
+
resolve({
|
|
198
|
+
code,
|
|
199
|
+
signal,
|
|
200
|
+
results: mostRecentLogObject,
|
|
201
|
+
passed: true,
|
|
203
202
|
});
|
|
204
203
|
});
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
}
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Installs an XCTest bundle to the device under test.
|
|
208
|
+
*
|
|
209
|
+
* **Facebook's [IDB](https://github.com/facebook/idb) tool is required** for this command to work.
|
|
210
|
+
*
|
|
211
|
+
* @param {string} xctestApp - Path of the XCTest app (URL or filename with extension `.app`)
|
|
212
|
+
* @returns {Promise<void>}
|
|
213
|
+
* @this {XCUITestDriver}
|
|
214
|
+
*/
|
|
215
|
+
async function mobileInstallXCTestBundle(xctestApp) {
|
|
216
|
+
if (!lodash_1.default.isString(xctestApp)) {
|
|
217
|
+
throw new driver_1.errors.InvalidArgumentError(`'xctestApp' is a required parameter for 'installXCTestBundle' and ` +
|
|
218
|
+
`must be a string. Found '${xctestApp}'`);
|
|
219
|
+
}
|
|
220
|
+
xctestLog.info(`Installing bundle '${xctestApp}'`);
|
|
221
|
+
const idb = assertIDB(this.opts);
|
|
222
|
+
const res = await this.helpers.configureApp(xctestApp, '.xctest');
|
|
223
|
+
await idb.installXCTestBundle(res);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* List XCTest bundles that are installed on the device.
|
|
227
|
+
*
|
|
228
|
+
* **Facebook's [IDB](https://github.com/facebook/idb) tool is required** for this command to work.
|
|
229
|
+
*
|
|
230
|
+
* @returns {Promise<string[]>} List of XCTest bundles (e.g.: `XCTesterAppUITests.XCTesterAppUITests/testLaunchPerformance`)
|
|
231
|
+
* @this {XCUITestDriver}
|
|
232
|
+
*/
|
|
233
|
+
async function mobileListXCTestBundles() {
|
|
234
|
+
return await assertIDB(this.opts).listXCTestBundles();
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* List XCTests in a test bundle
|
|
238
|
+
*
|
|
239
|
+
* **Facebook's [IDB](https://github.com/facebook/idb) tool is required** for this command to work.
|
|
240
|
+
* @param {string} bundle - Bundle ID of the XCTest
|
|
241
|
+
*
|
|
242
|
+
* @returns {Promise<string[]>} The list of xctests in the test bundle (e.g., `['XCTesterAppUITests.XCTesterAppUITests/testExample', 'XCTesterAppUITests.XCTesterAppUITests/testLaunchPerformance']`)
|
|
243
|
+
* @this {XCUITestDriver}
|
|
244
|
+
*/
|
|
245
|
+
async function mobileListXCTestsInTestBundle(bundle) {
|
|
246
|
+
if (!lodash_1.default.isString(bundle)) {
|
|
247
|
+
throw new driver_1.errors.InvalidArgumentError(`'bundle' is a required parameter for 'listXCTestsInTestBundle' and ` +
|
|
248
|
+
`must be a string. Found '${bundle}'`);
|
|
249
|
+
}
|
|
250
|
+
const idb = assertIDB(this.opts);
|
|
251
|
+
return await idb.listXCTestsInTestBundle(bundle);
|
|
252
|
+
}
|
|
254
253
|
/**
|
|
255
254
|
* @typedef {import('../driver').XCUITestDriver} XCUITestDriver
|
|
256
255
|
* @typedef {import('./types').XCTestResult} XCTestResult
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xctest.js","sourceRoot":"","sources":["../../../lib/commands/xctest.js"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"xctest.js","sourceRoot":"","sources":["../../../lib/commands/xctest.js"],"names":[],"mappings":"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"}
|