appium-xcuitest-driver 10.13.2 → 10.13.4

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 (40) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/build/lib/commands/app-management.d.ts +99 -76
  3. package/build/lib/commands/app-management.d.ts.map +1 -1
  4. package/build/lib/commands/app-management.js +83 -73
  5. package/build/lib/commands/app-management.js.map +1 -1
  6. package/build/lib/commands/general.d.ts +84 -80
  7. package/build/lib/commands/general.d.ts.map +1 -1
  8. package/build/lib/commands/general.js +66 -53
  9. package/build/lib/commands/general.js.map +1 -1
  10. package/build/lib/commands/log.d.ts +42 -44
  11. package/build/lib/commands/log.d.ts.map +1 -1
  12. package/build/lib/commands/log.js +32 -53
  13. package/build/lib/commands/log.js.map +1 -1
  14. package/build/lib/commands/navigation.d.ts +1 -1
  15. package/build/lib/commands/navigation.d.ts.map +1 -1
  16. package/build/lib/commands/performance.d.ts +36 -55
  17. package/build/lib/commands/performance.d.ts.map +1 -1
  18. package/build/lib/commands/performance.js +93 -86
  19. package/build/lib/commands/performance.js.map +1 -1
  20. package/build/lib/commands/recordscreen.d.ts +31 -63
  21. package/build/lib/commands/recordscreen.d.ts.map +1 -1
  22. package/build/lib/commands/recordscreen.js +29 -28
  23. package/build/lib/commands/recordscreen.js.map +1 -1
  24. package/build/lib/commands/xctest.d.ts +37 -37
  25. package/build/lib/commands/xctest.d.ts.map +1 -1
  26. package/build/lib/commands/xctest.js +38 -50
  27. package/build/lib/commands/xctest.js.map +1 -1
  28. package/build/lib/execute-method-map.d.ts.map +1 -1
  29. package/build/lib/execute-method-map.js +0 -2
  30. package/build/lib/execute-method-map.js.map +1 -1
  31. package/lib/commands/app-management.ts +414 -0
  32. package/lib/commands/{general.js → general.ts} +101 -76
  33. package/lib/commands/{log.js → log.ts} +68 -68
  34. package/lib/commands/{performance.js → performance.ts} +133 -114
  35. package/lib/commands/{recordscreen.js → recordscreen.ts} +78 -50
  36. package/lib/commands/{xctest.js → xctest.ts} +78 -71
  37. package/lib/execute-method-map.ts +0 -2
  38. package/npm-shrinkwrap.json +8 -8
  39. package/package.json +1 -1
  40. package/lib/commands/app-management.js +0 -346
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## [10.13.4](https://github.com/appium/appium-xcuitest-driver/compare/v10.13.3...v10.13.4) (2025-12-30)
2
+
3
+ ### Miscellaneous Chores
4
+
5
+ * Migrate various command modules to typescript (part 4) ([#2689](https://github.com/appium/appium-xcuitest-driver/issues/2689)) ([e7da99b](https://github.com/appium/appium-xcuitest-driver/commit/e7da99b79461927b785ec518475ee604c163fdc9))
6
+
7
+ ## [10.13.3](https://github.com/appium/appium-xcuitest-driver/compare/v10.13.2...v10.13.3) (2025-12-28)
8
+
9
+ ### Miscellaneous Chores
10
+
11
+ * Migrate various command modules to typescript ([#2688](https://github.com/appium/appium-xcuitest-driver/issues/2688)) ([43489ba](https://github.com/appium/appium-xcuitest-driver/commit/43489ba00eef50c1e026ba878c31859de63849e9))
12
+
1
13
  ## [10.13.2](https://github.com/appium/appium-xcuitest-driver/compare/v10.13.1...v10.13.2) (2025-12-23)
2
14
 
3
15
  ### Miscellaneous Chores
@@ -1,65 +1,58 @@
1
+ import type { XCUITestDriver } from '../driver';
2
+ import type { AppState } from './enum';
1
3
  /**
2
4
  * Installs the given application to the device under test.
3
5
  *
4
6
  * Please ensure the app is built for a correct architecture and is signed with a proper developer signature (for real devices) prior to calling this.
5
- * @param {string} app - See docs for `appium:app` capability
6
- * @param {number} [timeoutMs] - The maximum time to wait until app install is finished (in ms) on real devices.
7
+ * @param app - See docs for `appium:app` capability
8
+ * @param timeoutMs - The maximum time to wait until app install is finished (in ms) on real devices.
7
9
  * If not provided, then the value of `appium:appPushTimeout` capability is used. If the capability is not provided then the default is 240000ms (4 minutes).
8
- * @param {boolean} [checkVersion] - If the application installation follows currently installed application's version status if provided.
10
+ * @param checkVersion - If the application installation follows currently installed application's version status if provided.
9
11
  * No checking occurs if no this option.
10
12
  * @privateRemarks Link to capability docs
11
- * @returns {Promise<void>}
12
- * @this {XCUITestDriver}
13
13
  */
14
- export function mobileInstallApp(this: import("../driver").XCUITestDriver, app: string, timeoutMs?: number, checkVersion?: boolean): Promise<void>;
14
+ export declare function mobileInstallApp(this: XCUITestDriver, app: string, timeoutMs?: number, checkVersion?: boolean): Promise<void>;
15
15
  /**
16
16
  * Checks whether the given application is installed on the device under test.
17
17
  * Offload app is handled as not installed.
18
18
  *
19
- * @param {string} bundleId - The bundle identifier of the application to be checked
20
- * @returns {Promise<boolean>} `true` if the application is installed; `false` otherwise
21
- * @this {XCUITestDriver}
19
+ * @param bundleId - The bundle identifier of the application to be checked
20
+ * @returns `true` if the application is installed; `false` otherwise
22
21
  */
23
- export function mobileIsAppInstalled(this: import("../driver").XCUITestDriver, bundleId: string): Promise<boolean>;
22
+ export declare function mobileIsAppInstalled(this: XCUITestDriver, bundleId: string): Promise<boolean>;
24
23
  /**
25
24
  * Removes/uninstalls the given application from the device under test.
26
25
  * Offload app data could also be removed.
27
26
  *
28
- * @param {string} bundleId - The bundle identifier of the application to be removed
29
- * @returns {Promise<boolean>} `true` if the application has been removed successfully; `false` otherwise
30
- * @this {XCUITestDriver}
27
+ * @param bundleId - The bundle identifier of the application to be removed
28
+ * @returns `true` if the application has been removed successfully; `false` otherwise
31
29
  */
32
- export function mobileRemoveApp(this: import("../driver").XCUITestDriver, bundleId: string): Promise<boolean>;
30
+ export declare function mobileRemoveApp(this: XCUITestDriver, bundleId: string): Promise<boolean>;
33
31
  /**
34
32
  * Executes the given app on the device under test.
35
33
  *
36
34
  * If the app is already running it will be activated. If the app is not installed or cannot be launched then an exception is thrown.
37
- * @param {string} bundleId - The bundle identifier of the application to be launched
38
- * @param {string|string[]} [args] - One or more command line arguments for the app. If the app is already running then this argument is ignored.
39
- * @param {object} [environment] - Environment variables mapping for the app. If the app is already running then this argument is ignored.
40
- * @returns {Promise<void>}
41
- * @this {XCUITestDriver}
35
+ * @param bundleId - The bundle identifier of the application to be launched
36
+ * @param args - One or more command line arguments for the app. If the app is already running then this argument is ignored.
37
+ * @param environment - Environment variables mapping for the app. If the app is already running then this argument is ignored.
42
38
  */
43
- export function mobileLaunchApp(this: import("../driver").XCUITestDriver, bundleId: string, args?: string | string[], environment?: object): Promise<void>;
39
+ export declare function mobileLaunchApp(this: XCUITestDriver, bundleId: string, args?: string | string[], environment?: Record<string, any>): Promise<void>;
44
40
  /**
45
41
  * Terminates the given app on the device under test.
46
42
  *
47
43
  * This command performs termination via [XCTest's `terminate`](https://developer.apple.com/documentation/xctest/xcuiapplication/1500637-terminate) API. If the app is not installed an exception is thrown. If the app is not running then nothing is done.
48
- * @param {string} bundleId - The bundle identifier of the application to be terminated
49
- * @returns {Promise<boolean>} `true` if the app has been terminated successfully; `false` otherwise
50
- * @this {XCUITestDriver}
44
+ * @param bundleId - The bundle identifier of the application to be terminated
45
+ * @returns `true` if the app has been terminated successfully; `false` otherwise
51
46
  */
52
- export function mobileTerminateApp(this: import("../driver").XCUITestDriver, bundleId: string): Promise<boolean>;
47
+ export declare function mobileTerminateApp(this: XCUITestDriver, bundleId: string): Promise<boolean>;
53
48
  /**
54
49
  * Activate the given app on the device under test.
55
50
  *
56
51
  * This pushes the app to the foreground if it is running in the background. An exception is thrown if the app is not install or isn't running. Nothing is done if the app is already in the foreground.
57
52
  *
58
- * @param {string} bundleId - The bundle identifier of the application to be activated
59
- * @returns {Promise<void>}
60
- * @this {XCUITestDriver}
53
+ * @param bundleId - The bundle identifier of the application to be activated
61
54
  */
62
- export function mobileActivateApp(this: import("../driver").XCUITestDriver, bundleId: string): Promise<void>;
55
+ export declare function mobileActivateApp(this: XCUITestDriver, bundleId: string): Promise<void>;
63
56
  /**
64
57
  * Kill the given app on the real device under test by instruments service.
65
58
  *
@@ -68,86 +61,116 @@ export function mobileActivateApp(this: import("../driver").XCUITestDriver, bund
68
61
  * @remarks `appium-xcuitest-driver` v4.4 does not require `py-ios-device` to be installed.
69
62
  * @privateRemarks See implementation at https://github.com/YueChen-C/py-ios-device/blob/51f4683c5c3c385a015858ada07a5f1c62d3cf57/ios_device/cli/base.py#L220
70
63
  * @see https://github.com/YueChen-C/py-ios-device
71
- * @param {string} bundleId - The bundle identifier of the application to be killed
72
- * @returns {Promise<boolean>} `true` if the app has been killed successfully; `false` otherwise
64
+ * @param bundleId - The bundle identifier of the application to be killed
65
+ * @returns `true` if the app has been killed successfully; `false` otherwise
73
66
  * @group Real Device Only
74
- * @this {XCUITestDriver}
75
67
  */
76
- export function mobileKillApp(this: import("../driver").XCUITestDriver, bundleId: string): Promise<boolean>;
68
+ export declare function mobileKillApp(this: XCUITestDriver, bundleId: string): Promise<boolean>;
77
69
  /**
78
70
  * Queries the state of an installed application from the device under test.
79
71
  *
80
72
  * If the app with the given `bundleId` is not installed, an exception will be thrown.
81
73
  *
82
- * @param {string} bundleId - The bundle identifier of the application to be queried
83
- * @returns {Promise<AppState>} The actual application state code
74
+ * @param bundleId - The bundle identifier of the application to be queried
75
+ * @returns The actual application state code
84
76
  * @see https://developer.apple.com/documentation/xctest/xcuiapplicationstate?language=objc
85
- * @this {XCUITestDriver}
86
77
  */
87
- export function mobileQueryAppState(this: import("../driver").XCUITestDriver, bundleId: string): Promise<AppState>;
78
+ export declare function mobileQueryAppState(this: XCUITestDriver, bundleId: string): Promise<AppState>;
88
79
  /**
89
- * @param {string} appPath
90
- * @param {object} opts
91
- * @this {XCUITestDriver}
80
+ * Installs the given application to the device under test.
81
+ *
82
+ * This is a wrapper around {@linkcode mobileInstallApp mobile: installApp}.
83
+ *
84
+ * @param appPath - Path to the application bundle or .ipa/.app file
85
+ * @param opts - Installation options
86
+ * @param opts.timeoutMs - Maximum time to wait for installation to complete (in milliseconds)
87
+ * @param opts.strategy - If `true`, checks the version before installing and skips if already installed
92
88
  */
93
- export function installApp(appPath: string, { timeoutMs, strategy }?: object): Promise<void>;
89
+ export declare function installApp(this: XCUITestDriver, appPath: string, opts?: {
90
+ timeoutMs?: number;
91
+ strategy?: boolean;
92
+ }): Promise<void>;
94
93
  /**
95
- * @param {string} bundleId
96
- * @param {object} opts
97
- * @this {XCUITestDriver}
94
+ * Activates the given app on the device under test.
95
+ *
96
+ * This is a wrapper around {@linkcode mobileLaunchApp mobile: launchApp}. If the app is already
97
+ * running, it will be activated (brought to foreground). If the app is not installed or cannot
98
+ * be launched, an exception is thrown.
99
+ *
100
+ * @param bundleId - The bundle identifier of the application to be activated
101
+ * @param opts - Launch options
102
+ * @param opts.environment - Environment variables mapping for the app
103
+ * @param opts.arguments - Command line arguments for the app
98
104
  */
99
- export function activateApp(bundleId: string, opts?: object, ...args: any[]): Promise<any>;
105
+ export declare function activateApp(this: XCUITestDriver, bundleId: string, opts?: {
106
+ environment?: Record<string, any>;
107
+ arguments?: string[];
108
+ }): Promise<void>;
100
109
  /**
101
- * @param {string} bundleId
102
- * @this {XCUITestDriver}
110
+ * Checks whether the given application is installed on the device under test.
111
+ *
112
+ * This is a wrapper around {@linkcode mobileIsAppInstalled mobile: isAppInstalled}.
113
+ * Offload apps are treated as not installed.
114
+ *
115
+ * @param bundleId - The bundle identifier of the application to be checked
116
+ * @returns `true` if the application is installed; `false` otherwise
103
117
  */
104
- export function isAppInstalled(this: import("../driver").XCUITestDriver, bundleId: string): Promise<boolean>;
118
+ export declare function isAppInstalled(this: XCUITestDriver, bundleId: string): Promise<boolean>;
105
119
  /**
106
- * @param {string} bundleId
107
- * @this {XCUITestDriver}
108
- * @returns {Promise<boolean>}
120
+ * Terminates the given app on the device under test.
121
+ *
122
+ * This is a wrapper around {@linkcode mobileTerminateApp mobile: terminateApp}.
123
+ * The command performs termination via XCTest's `terminate` API. If the app is not installed,
124
+ * an exception is thrown. If the app is not running, nothing is done.
125
+ *
126
+ * @param bundleId - The bundle identifier of the application to be terminated
127
+ * @returns `true` if the app has been terminated successfully; `false` otherwise
109
128
  */
110
- export function terminateApp(this: import("../driver").XCUITestDriver, bundleId: string): Promise<boolean>;
129
+ export declare function terminateApp(this: XCUITestDriver, bundleId: string): Promise<boolean>;
111
130
  /**
112
- * @param {string} bundleId
113
- * @this {XCUITestDriver}
131
+ * Queries the state of an installed application from the device under test.
132
+ *
133
+ * This is a wrapper around {@linkcode mobileQueryAppState mobile: queryAppState}.
134
+ * If the app with the given `bundleId` is not installed, an exception will be thrown.
135
+ *
136
+ * @param bundleId - The bundle identifier of the application to be queried
137
+ * @returns The actual application state code
138
+ * @see https://developer.apple.com/documentation/xctest/xcuiapplicationstate?language=objc
114
139
  */
115
- export function queryAppState(this: import("../driver").XCUITestDriver, bundleId: string): Promise<import("./enum").AppState>;
140
+ export declare function queryAppState(this: XCUITestDriver, bundleId: string): Promise<AppState>;
116
141
  /**
117
142
  * List applications installed on the real device under test
118
143
  *
119
144
  * Read [Pushing/Pulling files](https://appium.io/docs/en/writing-running-appium/ios/ios-xctest-file-movement/) for more details.
120
- * @param {'User'|'System'} applicationType - The type of applications to list.
121
- * @returns {Promise<Record<string,any>[]>} A list of apps where each item is a mapping of bundle identifiers to maps of platform-specific app properties.
145
+ * @param applicationType - The type of applications to list.
146
+ * @returns A list of apps where each item is a mapping of bundle identifiers to maps of platform-specific app properties.
122
147
  * @remarks Having `UIFileSharingEnabled` set to `true` in the return app properties map means this app supports file upload/download in its `documents` container.
123
148
  * @group Real Device Only
124
149
  */
125
- export function mobileListApps(applicationType?: "User" | "System"): Promise<Record<string, any>[]>;
150
+ export declare function mobileListApps(this: XCUITestDriver, applicationType?: 'User' | 'System'): Promise<Record<string, any>[]>;
126
151
  /**
127
152
  * Deletes application data files, so it could start from the clean state next time
128
153
  * it is launched.
129
154
  * This API only works on a Simulator.
130
155
  *
131
- * @param {string} bundleId Application bundle identifier
132
- * @this {XCUITestDriver}
133
- * @returns {Promise<boolean>} true if any files from the app's data container have been deleted
156
+ * @param bundleId Application bundle identifier
157
+ * @returns true if any files from the app's data container have been deleted
134
158
  */
135
- export function mobileClearApp(this: import("../driver").XCUITestDriver, bundleId: string): Promise<boolean>;
159
+ export declare function mobileClearApp(this: XCUITestDriver, bundleId: string): Promise<boolean>;
136
160
  /**
137
- * Close app (simulate device home button). It is possible to restore
138
- * the app after the timeout or keep it minimized based on the parameter value.
161
+ * Closes the app (simulates device home button press).
139
162
  *
140
- * @param {number|{timeout: number?}} [seconds]
141
- * - any positive number of seconds: come back after X seconds
142
- * - any negative number of seconds or zero: never come back
143
- * - undefined/null: never come back
144
- * - {timeout: 5000}: come back after 5 seconds
145
- * - {timeout: null}, {timeout: -2}: never come back
146
- * @this {XCUITestDriver}
147
- */
148
- export function background(this: import("../driver").XCUITestDriver, seconds?: number | {
149
- timeout: number | null;
150
- }): Promise<unknown>;
151
- export type XCUITestDriver = import("../driver").XCUITestDriver;
152
- export type AppState = import("./enum").AppState;
163
+ * It is possible to restore the app after a timeout or keep it minimized based on the parameter value.
164
+ *
165
+ * @param seconds - Timeout configuration. Accepts:
166
+ * - A positive number (seconds): app will be restored after the specified number of seconds
167
+ * - A negative number or zero: app will not be restored (kept minimized)
168
+ * - `undefined` or `null`: app will not be restored (kept minimized)
169
+ * - An object with `timeout` property:
170
+ * - `{timeout: 5000}`: app will be restored after 5 seconds (timeout in milliseconds)
171
+ * - `{timeout: null}` or `{timeout: -2}`: app will not be restored
172
+ */
173
+ export declare function background(this: XCUITestDriver, seconds?: number | {
174
+ timeout?: number | null;
175
+ }): Promise<void>;
153
176
  //# sourceMappingURL=app-management.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-management.d.ts","sourceRoot":"","sources":["../../../lib/commands/app-management.js"],"names":[],"mappings":"AAYA;;;;;;;;;;;;GAYG;AACH,gFATW,MAAM,cACN,MAAM,iBAEN,OAAO,GAGL,OAAO,CAAC,IAAI,CAAC,CA2CzB;AAED;;;;;;;GAOG;AACH,yFAJW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAO5B;AAED;;;;;;;GAOG;AACH,oFAJW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAgB5B;AAED;;;;;;;;;GASG;AACH,oFANW,MAAM,SACN,MAAM,GAAC,MAAM,EAAE,gBACf,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAazB;AAED;;;;;;;GAOG;AACH,uFAJW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAO5B;AAED;;;;;;;;GAQG;AACH,sFAJW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAKzB;AAED;;;;;;;;;;;;GAYG;AACH,kFALW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAY5B;AAED;;;;;;;;;GASG;AACH,wFALW,MAAM,GACJ,OAAO,CAAC,QAAQ,CAAC,CAM7B;AAED;;;;GAIG;AACH,oCAJW,MAAM,4BACN,MAAM,iBAMhB;AAED;;;;GAIG;AACH,sCAJW,MAAM,SACN,MAAM,gCAOhB;AAED;;;GAGG;AACH,mFAHW,MAAM,oBAKhB;AAED;;;;GAIG;AACH,iFAJW,MAAM,GAEJ,OAAO,CAAC,OAAO,CAAC,CAI5B;AAED;;;GAGG;AACH,kFAHW,MAAM,sCAKhB;AAED;;;;;;;;GAQG;AACH,iDALW,MAAM,GAAC,QAAQ,GACb,OAAO,CAAC,MAAM,CAAC,MAAM,EAAC,GAAG,CAAC,EAAE,CAAC,CAezC;AAED;;;;;;;;GAQG;AACH,mFAJW,MAAM,GAEJ,OAAO,CAAC,OAAO,CAAC,CA6B5B;AAED;;;;;;;;;;;GAWG;AACH,+EARW,MAAM,GAAC;IAAC,OAAO,EAAE,MAAM,OAAC,CAAA;CAAC,oBAwCnC;6BAGY,OAAO,WAAW,EAAE,cAAc;uBAClC,OAAO,QAAQ,EAAE,QAAQ"}
1
+ {"version":3,"file":"app-management.d.ts","sourceRoot":"","sources":["../../../lib/commands/app-management.ts"],"names":[],"mappings":"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"}
@@ -30,14 +30,12 @@ const app_utils_1 = require("../app-utils");
30
30
  * Installs the given application to the device under test.
31
31
  *
32
32
  * Please ensure the app is built for a correct architecture and is signed with a proper developer signature (for real devices) prior to calling this.
33
- * @param {string} app - See docs for `appium:app` capability
34
- * @param {number} [timeoutMs] - The maximum time to wait until app install is finished (in ms) on real devices.
33
+ * @param app - See docs for `appium:app` capability
34
+ * @param timeoutMs - The maximum time to wait until app install is finished (in ms) on real devices.
35
35
  * If not provided, then the value of `appium:appPushTimeout` capability is used. If the capability is not provided then the default is 240000ms (4 minutes).
36
- * @param {boolean} [checkVersion] - If the application installation follows currently installed application's version status if provided.
36
+ * @param checkVersion - If the application installation follows currently installed application's version status if provided.
37
37
  * No checking occurs if no this option.
38
38
  * @privateRemarks Link to capability docs
39
- * @returns {Promise<void>}
40
- * @this {XCUITestDriver}
41
39
  */
42
40
  async function mobileInstallApp(app, timeoutMs, checkVersion) {
43
41
  const srcAppPath = await this.helpers.configureApp(app, {
@@ -65,7 +63,7 @@ async function mobileInstallApp(app, timeoutMs, checkVersion) {
65
63
  }
66
64
  }
67
65
  await this.device.installApp(srcAppPath, bundleId, {
68
- timeoutMs: timeoutMs ?? this.opts.appPushTimeout
66
+ timeoutMs: timeoutMs ?? this.opts.appPushTimeout,
69
67
  });
70
68
  this.log.info(`Installation of '${srcAppPath}' succeeded`);
71
69
  }
@@ -73,9 +71,8 @@ async function mobileInstallApp(app, timeoutMs, checkVersion) {
73
71
  * Checks whether the given application is installed on the device under test.
74
72
  * Offload app is handled as not installed.
75
73
  *
76
- * @param {string} bundleId - The bundle identifier of the application to be checked
77
- * @returns {Promise<boolean>} `true` if the application is installed; `false` otherwise
78
- * @this {XCUITestDriver}
74
+ * @param bundleId - The bundle identifier of the application to be checked
75
+ * @returns `true` if the application is installed; `false` otherwise
79
76
  */
80
77
  async function mobileIsAppInstalled(bundleId) {
81
78
  const installed = await this.device.isAppInstalled(bundleId);
@@ -86,9 +83,8 @@ async function mobileIsAppInstalled(bundleId) {
86
83
  * Removes/uninstalls the given application from the device under test.
87
84
  * Offload app data could also be removed.
88
85
  *
89
- * @param {string} bundleId - The bundle identifier of the application to be removed
90
- * @returns {Promise<boolean>} `true` if the application has been removed successfully; `false` otherwise
91
- * @this {XCUITestDriver}
86
+ * @param bundleId - The bundle identifier of the application to be removed
87
+ * @returns `true` if the application has been removed successfully; `false` otherwise
92
88
  */
93
89
  async function mobileRemoveApp(bundleId) {
94
90
  this.log.info(`Uninstalling the application with bundle identifier '${bundleId}' ` +
@@ -107,14 +103,11 @@ async function mobileRemoveApp(bundleId) {
107
103
  * Executes the given app on the device under test.
108
104
  *
109
105
  * If the app is already running it will be activated. If the app is not installed or cannot be launched then an exception is thrown.
110
- * @param {string} bundleId - The bundle identifier of the application to be launched
111
- * @param {string|string[]} [args] - One or more command line arguments for the app. If the app is already running then this argument is ignored.
112
- * @param {object} [environment] - Environment variables mapping for the app. If the app is already running then this argument is ignored.
113
- * @returns {Promise<void>}
114
- * @this {XCUITestDriver}
106
+ * @param bundleId - The bundle identifier of the application to be launched
107
+ * @param args - One or more command line arguments for the app. If the app is already running then this argument is ignored.
108
+ * @param environment - Environment variables mapping for the app. If the app is already running then this argument is ignored.
115
109
  */
116
110
  async function mobileLaunchApp(bundleId, args, environment) {
117
- /** @type { {arguments?: any[], environment?: any, bundleId: string} } */
118
111
  const launchOptions = { bundleId };
119
112
  if (args) {
120
113
  launchOptions.arguments = Array.isArray(args) ? args : [args];
@@ -128,21 +121,18 @@ async function mobileLaunchApp(bundleId, args, environment) {
128
121
  * Terminates the given app on the device under test.
129
122
  *
130
123
  * This command performs termination via [XCTest's `terminate`](https://developer.apple.com/documentation/xctest/xcuiapplication/1500637-terminate) API. If the app is not installed an exception is thrown. If the app is not running then nothing is done.
131
- * @param {string} bundleId - The bundle identifier of the application to be terminated
132
- * @returns {Promise<boolean>} `true` if the app has been terminated successfully; `false` otherwise
133
- * @this {XCUITestDriver}
124
+ * @param bundleId - The bundle identifier of the application to be terminated
125
+ * @returns `true` if the app has been terminated successfully; `false` otherwise
134
126
  */
135
127
  async function mobileTerminateApp(bundleId) {
136
- return /** @type {boolean} */ (await this.proxyCommand('/wda/apps/terminate', 'POST', { bundleId }));
128
+ return (await this.proxyCommand('/wda/apps/terminate', 'POST', { bundleId }));
137
129
  }
138
130
  /**
139
131
  * Activate the given app on the device under test.
140
132
  *
141
133
  * This pushes the app to the foreground if it is running in the background. An exception is thrown if the app is not install or isn't running. Nothing is done if the app is already in the foreground.
142
134
  *
143
- * @param {string} bundleId - The bundle identifier of the application to be activated
144
- * @returns {Promise<void>}
145
- * @this {XCUITestDriver}
135
+ * @param bundleId - The bundle identifier of the application to be activated
146
136
  */
147
137
  async function mobileActivateApp(bundleId) {
148
138
  await this.proxyCommand('/wda/apps/activate', 'POST', { bundleId });
@@ -155,67 +145,91 @@ async function mobileActivateApp(bundleId) {
155
145
  * @remarks `appium-xcuitest-driver` v4.4 does not require `py-ios-device` to be installed.
156
146
  * @privateRemarks See implementation at https://github.com/YueChen-C/py-ios-device/blob/51f4683c5c3c385a015858ada07a5f1c62d3cf57/ios_device/cli/base.py#L220
157
147
  * @see https://github.com/YueChen-C/py-ios-device
158
- * @param {string} bundleId - The bundle identifier of the application to be killed
159
- * @returns {Promise<boolean>} `true` if the app has been killed successfully; `false` otherwise
148
+ * @param bundleId - The bundle identifier of the application to be killed
149
+ * @returns `true` if the app has been killed successfully; `false` otherwise
160
150
  * @group Real Device Only
161
- * @this {XCUITestDriver}
162
151
  */
163
152
  async function mobileKillApp(bundleId) {
164
153
  if (!this.isRealDevice()) {
165
154
  throw new driver_1.errors.UnsupportedOperationError('A real device is required');
166
155
  }
167
- return await /** @type {import('../device/real-device-management').RealDevice} */ (this.device).terminateApp(bundleId, String(this.opts.platformVersion));
156
+ return await this.device.terminateApp(bundleId, String(this.opts.platformVersion));
168
157
  }
169
158
  /**
170
159
  * Queries the state of an installed application from the device under test.
171
160
  *
172
161
  * If the app with the given `bundleId` is not installed, an exception will be thrown.
173
162
  *
174
- * @param {string} bundleId - The bundle identifier of the application to be queried
175
- * @returns {Promise<AppState>} The actual application state code
163
+ * @param bundleId - The bundle identifier of the application to be queried
164
+ * @returns The actual application state code
176
165
  * @see https://developer.apple.com/documentation/xctest/xcuiapplicationstate?language=objc
177
- * @this {XCUITestDriver}
178
166
  */
179
167
  async function mobileQueryAppState(bundleId) {
180
- return /** @type {AppState} */ (await this.proxyCommand('/wda/apps/state', 'POST', { bundleId }));
168
+ return (await this.proxyCommand('/wda/apps/state', 'POST', { bundleId }));
181
169
  }
182
170
  /**
183
- * @param {string} appPath
184
- * @param {object} opts
185
- * @this {XCUITestDriver}
171
+ * Installs the given application to the device under test.
172
+ *
173
+ * This is a wrapper around {@linkcode mobileInstallApp mobile: installApp}.
174
+ *
175
+ * @param appPath - Path to the application bundle or .ipa/.app file
176
+ * @param opts - Installation options
177
+ * @param opts.timeoutMs - Maximum time to wait for installation to complete (in milliseconds)
178
+ * @param opts.strategy - If `true`, checks the version before installing and skips if already installed
186
179
  */
187
- async function installApp(appPath, { timeoutMs, strategy } = {}) {
188
- // @ts-ignore Probably a TS bug
189
- await this.mobileInstallApp(appPath, timeoutMs, strategy);
180
+ async function installApp(appPath, opts = {}) {
181
+ await this.mobileInstallApp(appPath, opts.timeoutMs, opts.strategy);
190
182
  }
191
183
  /**
192
- * @param {string} bundleId
193
- * @param {object} opts
194
- * @this {XCUITestDriver}
184
+ * Activates the given app on the device under test.
185
+ *
186
+ * This is a wrapper around {@linkcode mobileLaunchApp mobile: launchApp}. If the app is already
187
+ * running, it will be activated (brought to foreground). If the app is not installed or cannot
188
+ * be launched, an exception is thrown.
189
+ *
190
+ * @param bundleId - The bundle identifier of the application to be activated
191
+ * @param opts - Launch options
192
+ * @param opts.environment - Environment variables mapping for the app
193
+ * @param opts.arguments - Command line arguments for the app
195
194
  */
196
195
  async function activateApp(bundleId, opts = {}) {
197
196
  const { environment, arguments: args } = opts;
198
- // @ts-ignore Probably a TS bug
199
197
  return await this.mobileLaunchApp(bundleId, args, environment);
200
198
  }
201
199
  /**
202
- * @param {string} bundleId
203
- * @this {XCUITestDriver}
200
+ * Checks whether the given application is installed on the device under test.
201
+ *
202
+ * This is a wrapper around {@linkcode mobileIsAppInstalled mobile: isAppInstalled}.
203
+ * Offload apps are treated as not installed.
204
+ *
205
+ * @param bundleId - The bundle identifier of the application to be checked
206
+ * @returns `true` if the application is installed; `false` otherwise
204
207
  */
205
208
  async function isAppInstalled(bundleId) {
206
209
  return await this.mobileIsAppInstalled(bundleId);
207
210
  }
208
211
  /**
209
- * @param {string} bundleId
210
- * @this {XCUITestDriver}
211
- * @returns {Promise<boolean>}
212
+ * Terminates the given app on the device under test.
213
+ *
214
+ * This is a wrapper around {@linkcode mobileTerminateApp mobile: terminateApp}.
215
+ * The command performs termination via XCTest's `terminate` API. If the app is not installed,
216
+ * an exception is thrown. If the app is not running, nothing is done.
217
+ *
218
+ * @param bundleId - The bundle identifier of the application to be terminated
219
+ * @returns `true` if the app has been terminated successfully; `false` otherwise
212
220
  */
213
221
  async function terminateApp(bundleId) {
214
222
  return await this.mobileTerminateApp(bundleId);
215
223
  }
216
224
  /**
217
- * @param {string} bundleId
218
- * @this {XCUITestDriver}
225
+ * Queries the state of an installed application from the device under test.
226
+ *
227
+ * This is a wrapper around {@linkcode mobileQueryAppState mobile: queryAppState}.
228
+ * If the app with the given `bundleId` is not installed, an exception will be thrown.
229
+ *
230
+ * @param bundleId - The bundle identifier of the application to be queried
231
+ * @returns The actual application state code
232
+ * @see https://developer.apple.com/documentation/xctest/xcuiapplicationstate?language=objc
219
233
  */
220
234
  async function queryAppState(bundleId) {
221
235
  return await this.mobileQueryAppState(bundleId);
@@ -224,8 +238,8 @@ async function queryAppState(bundleId) {
224
238
  * List applications installed on the real device under test
225
239
  *
226
240
  * Read [Pushing/Pulling files](https://appium.io/docs/en/writing-running-appium/ios/ios-xctest-file-movement/) for more details.
227
- * @param {'User'|'System'} applicationType - The type of applications to list.
228
- * @returns {Promise<Record<string,any>[]>} A list of apps where each item is a mapping of bundle identifiers to maps of platform-specific app properties.
241
+ * @param applicationType - The type of applications to list.
242
+ * @returns A list of apps where each item is a mapping of bundle identifiers to maps of platform-specific app properties.
229
243
  * @remarks Having `UIFileSharingEnabled` set to `true` in the return app properties map means this app supports file upload/download in its `documents` container.
230
244
  * @group Real Device Only
231
245
  */
@@ -246,9 +260,8 @@ async function mobileListApps(applicationType = 'User') {
246
260
  * it is launched.
247
261
  * This API only works on a Simulator.
248
262
  *
249
- * @param {string} bundleId Application bundle identifier
250
- * @this {XCUITestDriver}
251
- * @returns {Promise<boolean>} true if any files from the app's data container have been deleted
263
+ * @param bundleId Application bundle identifier
264
+ * @returns true if any files from the app's data container have been deleted
252
265
  */
253
266
  async function mobileClearApp(bundleId) {
254
267
  if (this.isRealDevice()) {
@@ -256,10 +269,10 @@ async function mobileClearApp(bundleId) {
256
269
  `The only known way to clear app data on real devices ` +
257
270
  `would be to uninstall the app then perform a fresh install of it.`);
258
271
  }
259
- const simctl = /** @type {import('appium-ios-simulator').Simulator} */ (this.device).simctl;
272
+ const simctl = this.device.simctl;
260
273
  const dataRoot = await simctl.getAppContainer(bundleId, 'data');
261
274
  this.log.debug(`Got the data container root of ${bundleId} at '${dataRoot}'`);
262
- if (!await support_1.fs.exists(dataRoot)) {
275
+ if (!(await support_1.fs.exists(dataRoot))) {
263
276
  return false;
264
277
  }
265
278
  await this.mobileTerminateApp(bundleId);
@@ -272,16 +285,17 @@ async function mobileClearApp(bundleId) {
272
285
  return true;
273
286
  }
274
287
  /**
275
- * Close app (simulate device home button). It is possible to restore
276
- * the app after the timeout or keep it minimized based on the parameter value.
288
+ * Closes the app (simulates device home button press).
289
+ *
290
+ * It is possible to restore the app after a timeout or keep it minimized based on the parameter value.
277
291
  *
278
- * @param {number|{timeout: number?}} [seconds]
279
- * - any positive number of seconds: come back after X seconds
280
- * - any negative number of seconds or zero: never come back
281
- * - undefined/null: never come back
282
- * - {timeout: 5000}: come back after 5 seconds
283
- * - {timeout: null}, {timeout: -2}: never come back
284
- * @this {XCUITestDriver}
292
+ * @param seconds - Timeout configuration. Accepts:
293
+ * - A positive number (seconds): app will be restored after the specified number of seconds
294
+ * - A negative number or zero: app will not be restored (kept minimized)
295
+ * - `undefined` or `null`: app will not be restored (kept minimized)
296
+ * - An object with `timeout` property:
297
+ * - `{timeout: 5000}`: app will be restored after 5 seconds (timeout in milliseconds)
298
+ * - `{timeout: null}` or `{timeout: -2}`: app will not be restored
285
299
  */
286
300
  async function background(seconds) {
287
301
  const homescreen = '/wda/homescreen';
@@ -292,8 +306,8 @@ async function background(seconds) {
292
306
  if (!support_1.util.hasValue(timeoutSeconds)) {
293
307
  endpoint = homescreen;
294
308
  }
295
- else if (!isNaN(timeoutSeconds)) {
296
- const duration = parseFloat(timeoutSeconds);
309
+ else if (!isNaN(Number(timeoutSeconds))) {
310
+ const duration = parseFloat(String(timeoutSeconds));
297
311
  if (duration >= 0) {
298
312
  params = { duration };
299
313
  endpoint = deactivateApp;
@@ -308,7 +322,7 @@ async function background(seconds) {
308
322
  selectEndpoint(isNaN(Number(timeout)) ? timeout : parseFloat(String(timeout)) / 1000.0);
309
323
  }
310
324
  else {
311
- selectEndpoint(seconds);
325
+ selectEndpoint(lodash_1.default.isNumber(seconds) ? seconds : undefined);
312
326
  }
313
327
  if (!endpoint) {
314
328
  throw new driver_1.errors.InvalidArgumentError(`Argument value is expected to be a valid number. ` +
@@ -316,8 +330,4 @@ async function background(seconds) {
316
330
  }
317
331
  return await this.proxyCommand(endpoint, 'POST', params, endpoint !== homescreen);
318
332
  }
319
- /**
320
- * @typedef {import('../driver').XCUITestDriver} XCUITestDriver
321
- * @typedef {import('./enum').AppState} AppState
322
- */
323
333
  //# sourceMappingURL=app-management.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-management.js","sourceRoot":"","sources":["../../../lib/commands/app-management.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-management.js","sourceRoot":"","sources":["../../../lib/commands/app-management.ts"],"names":[],"mappings":"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"}