appium-webdriveragent 8.4.0 → 8.5.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 +14 -0
- package/WebDriverAgentLib/Info.plist +2 -2
- package/build/index.d.ts +7 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +18 -31
- package/build/index.js.map +1 -0
- package/build/lib/check-dependencies.d.ts +7 -1
- package/build/lib/check-dependencies.d.ts.map +1 -1
- package/build/lib/check-dependencies.js +10 -1
- package/build/lib/check-dependencies.js.map +1 -1
- package/build/lib/types.d.ts +48 -0
- package/build/lib/types.d.ts.map +1 -0
- package/build/lib/types.js +3 -0
- package/build/lib/types.js.map +1 -0
- package/build/lib/webdriveragent.d.ts +82 -17
- package/build/lib/webdriveragent.d.ts.map +1 -1
- package/build/lib/webdriveragent.js +65 -5
- package/build/lib/webdriveragent.js.map +1 -1
- package/build/lib/xcodebuild.d.ts +51 -12
- package/build/lib/xcodebuild.d.ts.map +1 -1
- package/build/lib/xcodebuild.js +49 -10
- package/build/lib/xcodebuild.js.map +1 -1
- package/index.ts +7 -0
- package/lib/check-dependencies.js +12 -5
- package/lib/types.ts +50 -0
- package/lib/webdriveragent.js +72 -7
- package/lib/xcodebuild.js +51 -12
- package/package.json +4 -3
- package/index.js +0 -22
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [8.5.1](https://github.com/appium/WebDriverAgent/compare/v8.5.0...v8.5.1) (2024-04-08)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Miscellaneous Chores
|
|
5
|
+
|
|
6
|
+
* Add more type declarations ([#886](https://github.com/appium/WebDriverAgent/issues/886)) ([9ca7632](https://github.com/appium/WebDriverAgent/commit/9ca7632faf999931e7f5edf47267fcce6d6392b2))
|
|
7
|
+
|
|
8
|
+
## [8.5.0](https://github.com/appium/WebDriverAgent/compare/v8.4.0...v8.5.0) (2024-04-07)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* Add types for WDA caps and settings ([#885](https://github.com/appium/WebDriverAgent/issues/885)) ([4b3c220](https://github.com/appium/WebDriverAgent/commit/4b3c220c0c609802924b7b6ff9a4dfa7a98eb5f4))
|
|
14
|
+
|
|
1
15
|
## [8.4.0](https://github.com/appium/WebDriverAgent/compare/v8.3.1...v8.4.0) (2024-04-01)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
<key>CFBundlePackageType</key>
|
|
16
16
|
<string>FMWK</string>
|
|
17
17
|
<key>CFBundleShortVersionString</key>
|
|
18
|
-
<string>8.
|
|
18
|
+
<string>8.5.1</string>
|
|
19
19
|
<key>CFBundleSignature</key>
|
|
20
20
|
<string>????</string>
|
|
21
21
|
<key>CFBundleVersion</key>
|
|
22
|
-
<string>8.
|
|
22
|
+
<string>8.5.1</string>
|
|
23
23
|
<key>NSPrincipalClass</key>
|
|
24
24
|
<string/>
|
|
25
25
|
</dict>
|
package/build/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { checkForDependencies, bundleWDASim } from './lib/check-dependencies';
|
|
2
|
+
export { NoSessionProxy } from './lib/no-session-proxy';
|
|
3
|
+
export { WebDriverAgent } from './lib/webdriveragent';
|
|
4
|
+
export { WDA_BASE_URL, WDA_RUNNER_BUNDLE_ID, PROJECT_FILE } from './lib/constants';
|
|
5
|
+
export { resetTestProcesses, BOOTSTRAP_PATH } from './lib/utils';
|
|
6
|
+
export * from './lib/types';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEjE,cAAc,aAAa,CAAC"}
|
package/build/index.js
CHANGED
|
@@ -10,37 +10,24 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
|
10
10
|
if (k2 === undefined) k2 = k;
|
|
11
11
|
o[k2] = m[k];
|
|
12
12
|
}));
|
|
13
|
-
var
|
|
14
|
-
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
24
15
|
};
|
|
25
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
exports.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
exports.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
exports.
|
|
41
|
-
exports
|
|
42
|
-
exports.PROJECT_FILE = PROJECT_FILE;
|
|
43
|
-
const { resetTestProcesses, BOOTSTRAP_PATH } = utils;
|
|
44
|
-
exports.resetTestProcesses = resetTestProcesses;
|
|
45
|
-
exports.BOOTSTRAP_PATH = BOOTSTRAP_PATH;
|
|
17
|
+
exports.BOOTSTRAP_PATH = exports.resetTestProcesses = exports.PROJECT_FILE = exports.WDA_RUNNER_BUNDLE_ID = exports.WDA_BASE_URL = exports.WebDriverAgent = exports.NoSessionProxy = exports.bundleWDASim = exports.checkForDependencies = void 0;
|
|
18
|
+
var check_dependencies_1 = require("./lib/check-dependencies");
|
|
19
|
+
Object.defineProperty(exports, "checkForDependencies", { enumerable: true, get: function () { return check_dependencies_1.checkForDependencies; } });
|
|
20
|
+
Object.defineProperty(exports, "bundleWDASim", { enumerable: true, get: function () { return check_dependencies_1.bundleWDASim; } });
|
|
21
|
+
var no_session_proxy_1 = require("./lib/no-session-proxy");
|
|
22
|
+
Object.defineProperty(exports, "NoSessionProxy", { enumerable: true, get: function () { return no_session_proxy_1.NoSessionProxy; } });
|
|
23
|
+
var webdriveragent_1 = require("./lib/webdriveragent");
|
|
24
|
+
Object.defineProperty(exports, "WebDriverAgent", { enumerable: true, get: function () { return webdriveragent_1.WebDriverAgent; } });
|
|
25
|
+
var constants_1 = require("./lib/constants");
|
|
26
|
+
Object.defineProperty(exports, "WDA_BASE_URL", { enumerable: true, get: function () { return constants_1.WDA_BASE_URL; } });
|
|
27
|
+
Object.defineProperty(exports, "WDA_RUNNER_BUNDLE_ID", { enumerable: true, get: function () { return constants_1.WDA_RUNNER_BUNDLE_ID; } });
|
|
28
|
+
Object.defineProperty(exports, "PROJECT_FILE", { enumerable: true, get: function () { return constants_1.PROJECT_FILE; } });
|
|
29
|
+
var utils_1 = require("./lib/utils");
|
|
30
|
+
Object.defineProperty(exports, "resetTestProcesses", { enumerable: true, get: function () { return utils_1.resetTestProcesses; } });
|
|
31
|
+
Object.defineProperty(exports, "BOOTSTRAP_PATH", { enumerable: true, get: function () { return utils_1.BOOTSTRAP_PATH; } });
|
|
32
|
+
__exportStar(require("./lib/types"), exports);
|
|
46
33
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,+DAA8E;AAArE,0HAAA,oBAAoB,OAAA;AAAE,kHAAA,YAAY,OAAA;AAC3C,2DAAwD;AAA/C,kHAAA,cAAc,OAAA;AACvB,uDAAsD;AAA7C,gHAAA,cAAc,OAAA;AACvB,6CAAmF;AAA1E,yGAAA,YAAY,OAAA;AAAE,iHAAA,oBAAoB,OAAA;AAAE,yGAAA,YAAY,OAAA;AACzD,qCAAiE;AAAxD,2GAAA,kBAAkB,OAAA;AAAE,uGAAA,cAAc,OAAA;AAE3C,8CAA4B"}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
export function checkForDependencies(): Promise<boolean>;
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
* @param {XcodeBuild} xcodebuild
|
|
5
|
+
* @returns {Promise<string>}
|
|
6
|
+
*/
|
|
7
|
+
export function bundleWDASim(xcodebuild: XcodeBuild): Promise<string>;
|
|
8
|
+
import XcodeBuild from './xcodebuild';
|
|
3
9
|
//# sourceMappingURL=check-dependencies.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-dependencies.d.ts","sourceRoot":"","sources":["../../lib/check-dependencies.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"check-dependencies.d.ts","sourceRoot":"","sources":["../../lib/check-dependencies.js"],"names":[],"mappings":"AAyBA,yDAGC;AAED;;;;GAIG;AACH,yCAHW,UAAU,GACR,QAAQ,MAAM,CAAC,CAiB3B;uBA9CsB,cAAc"}
|
|
@@ -9,6 +9,7 @@ const lodash_1 = __importDefault(require("lodash"));
|
|
|
9
9
|
const teen_process_1 = require("teen_process");
|
|
10
10
|
const path_1 = __importDefault(require("path"));
|
|
11
11
|
const xcodebuild_1 = __importDefault(require("./xcodebuild"));
|
|
12
|
+
const appium_xcode_1 = __importDefault(require("appium-xcode"));
|
|
12
13
|
const constants_1 = require("./constants");
|
|
13
14
|
const utils_1 = require("./utils");
|
|
14
15
|
const logger_1 = __importDefault(require("./logger"));
|
|
@@ -29,11 +30,19 @@ async function checkForDependencies() {
|
|
|
29
30
|
return false;
|
|
30
31
|
}
|
|
31
32
|
exports.checkForDependencies = checkForDependencies;
|
|
33
|
+
/**
|
|
34
|
+
*
|
|
35
|
+
* @param {XcodeBuild} xcodebuild
|
|
36
|
+
* @returns {Promise<string>}
|
|
37
|
+
*/
|
|
32
38
|
async function bundleWDASim(xcodebuild) {
|
|
33
39
|
if (xcodebuild && !lodash_1.default.isFunction(xcodebuild.retrieveDerivedDataPath)) {
|
|
34
|
-
xcodebuild = new xcodebuild_1.default('', {});
|
|
40
|
+
xcodebuild = new xcodebuild_1.default(/** @type {import('appium-xcode').XcodeVersion} */ (await appium_xcode_1.default.getVersion(true)), {});
|
|
35
41
|
}
|
|
36
42
|
const derivedDataPath = await xcodebuild.retrieveDerivedDataPath();
|
|
43
|
+
if (!derivedDataPath) {
|
|
44
|
+
throw new Error('Cannot retrieve the path to the Xcode derived data folder');
|
|
45
|
+
}
|
|
37
46
|
const wdaBundlePath = path_1.default.join(derivedDataPath, 'Build', 'Products', 'Debug-iphonesimulator', constants_1.WDA_RUNNER_APP);
|
|
38
47
|
if (await support_1.fs.exists(wdaBundlePath)) {
|
|
39
48
|
return wdaBundlePath;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-dependencies.js","sourceRoot":"","sources":["../../lib/check-dependencies.js"],"names":[],"mappings":";;;;;;AAAA,6CAAqC;AACrC,oDAAuB;AACvB,+CAAoC;AACpC,gDAAwB;AACxB,8DAAsC;AACtC,2CAEqB;AACrB,mCAAyC;AACzC,sDAA2B;AAE3B,KAAK,UAAU,WAAW;IACxB,MAAM,IAAI,GAAG;QACX,UAAU,EAAE,cAAI,CAAC,IAAI,CAAC,sBAAc,EAAE,0BAA0B,CAAC;QACjE,SAAS,EAAE,sBAAU;QACrB,MAAM,EAAE,yBAAa;QACrB,uBAAuB;QACvB,4BAA4B;QAC5B,gCAAgC;KACjC,CAAC;IACF,MAAM,IAAA,mBAAI,EAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,yCAAyC;
|
|
1
|
+
{"version":3,"file":"check-dependencies.js","sourceRoot":"","sources":["../../lib/check-dependencies.js"],"names":[],"mappings":";;;;;;AAAA,6CAAqC;AACrC,oDAAuB;AACvB,+CAAoC;AACpC,gDAAwB;AACxB,8DAAsC;AACtC,gEAAiC;AACjC,2CAEqB;AACrB,mCAAyC;AACzC,sDAA2B;AAE3B,KAAK,UAAU,WAAW;IACxB,MAAM,IAAI,GAAG;QACX,UAAU,EAAE,cAAI,CAAC,IAAI,CAAC,sBAAc,EAAE,0BAA0B,CAAC;QACjE,SAAS,EAAE,sBAAU;QACrB,MAAM,EAAE,yBAAa;QACrB,uBAAuB;QACvB,4BAA4B;QAC5B,gCAAgC;KACjC,CAAC;IACF,MAAM,IAAA,mBAAI,EAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,yCAAyC;AAClC,KAAK,UAAU,oBAAoB;IACxC,gBAAG,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC;AACf,CAAC;AAHD,oDAGC;AAED;;;;GAIG;AACI,KAAK,UAAU,YAAY,CAAE,UAAU;IAC5C,IAAI,UAAU,IAAI,CAAC,gBAAC,CAAC,UAAU,CAAC,UAAU,CAAC,uBAAuB,CAAC,EAAE,CAAC;QACpE,UAAU,GAAG,IAAI,oBAAU,CAAC,kDAAkD,CAAC,CAAC,MAAM,sBAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrH,CAAC;IAED,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,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,0BAAc,CAAC,CAAC;IAC/G,IAAI,MAAM,YAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;QACnC,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,MAAM,WAAW,EAAE,CAAC;IACpB,OAAO,aAAa,CAAC;AACvB,CAAC;AAfD,oCAeC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export interface WDASettings {
|
|
2
|
+
elementResponseAttribute?: string;
|
|
3
|
+
shouldUseCompactResponses?: boolean;
|
|
4
|
+
mjpegServerScreenshotQuality?: number;
|
|
5
|
+
mjpegServerFramerate?: number;
|
|
6
|
+
screenshotQuality?: number;
|
|
7
|
+
elementResponseAttributes?: string;
|
|
8
|
+
mjpegScalingFactor?: number;
|
|
9
|
+
mjpegFixOrientation?: boolean;
|
|
10
|
+
keyboardAutocorrection?: boolean;
|
|
11
|
+
keyboardPrediction?: boolean;
|
|
12
|
+
customSnapshotTimeout?: number;
|
|
13
|
+
snapshotMaxDepth?: number;
|
|
14
|
+
useFirstMatch?: boolean;
|
|
15
|
+
boundElementsByIndex?: boolean;
|
|
16
|
+
reduceMotion?: boolean;
|
|
17
|
+
defaultActiveApplication?: string;
|
|
18
|
+
activeAppDetectionPoint?: string;
|
|
19
|
+
includeNonModalElements?: boolean;
|
|
20
|
+
defaultAlertAction?: 'accept' | 'dismiss';
|
|
21
|
+
acceptAlertButtonSelector?: string;
|
|
22
|
+
dismissAlertButtonSelector?: string;
|
|
23
|
+
screenshotOrientation?: 'auto' | 'portrait' | 'portraitUpsideDown' | 'landscapeRight' | 'landscapeLeft';
|
|
24
|
+
waitForIdleTimeout?: number;
|
|
25
|
+
animationCoolOffTimeout?: number;
|
|
26
|
+
}
|
|
27
|
+
export interface WDACapabilities {
|
|
28
|
+
bundleId?: string;
|
|
29
|
+
initialUrl?: string;
|
|
30
|
+
arguments?: string[];
|
|
31
|
+
environment?: Record<string, string>;
|
|
32
|
+
eventloopIdleDelaySec?: number;
|
|
33
|
+
shouldWaitForQuiescence?: boolean;
|
|
34
|
+
shouldUseTestManagerForVisibilityDetection?: boolean;
|
|
35
|
+
maxTypingFrequency?: number;
|
|
36
|
+
shouldUseSingletonTestManager?: boolean;
|
|
37
|
+
waitForIdleTimeout?: number;
|
|
38
|
+
shouldUseCompactResponses?: number;
|
|
39
|
+
elementResponseFields?: unknown;
|
|
40
|
+
disableAutomaticScreenshots?: boolean;
|
|
41
|
+
shouldTerminateApp?: boolean;
|
|
42
|
+
forceAppLaunch?: boolean;
|
|
43
|
+
useNativeCachingStrategy?: boolean;
|
|
44
|
+
forceSimulatorSoftwareKeyboardPresence?: boolean;
|
|
45
|
+
defaultAlertAction?: 'accept' | 'dismiss';
|
|
46
|
+
appLaunchStateTimeoutSec?: number;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,WAAW;IAC1B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,kBAAkB,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC1C,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,qBAAqB,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,oBAAoB,GAAG,gBAAgB,GAAG,eAAe,CAAA;IACvG,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAGD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,0CAA0C,CAAC,EAAE,OAAO,CAAC;IACrD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,sCAAsC,CAAC,EAAE,OAAO,CAAC;IACjD,kBAAkB,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC1C,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,8 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference types="node" />
|
|
2
2
|
export class WebDriverAgent {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
/**
|
|
4
|
+
* @param {import('appium-xcode').XcodeVersion} xcodeVersion
|
|
5
|
+
* // TODO: make args typed
|
|
6
|
+
* @param {import('@appium/types').StringRecord} [args={}]
|
|
7
|
+
* @param {import('@appium/types').AppiumLogger?} [log=null]
|
|
8
|
+
*/
|
|
9
|
+
constructor(xcodeVersion: import('appium-xcode').XcodeVersion, args?: import("@appium/types").StringRecord<any> | undefined, log?: import("@appium/types").AppiumLogger | null | undefined);
|
|
10
|
+
/** @type {string} */
|
|
11
|
+
bootstrapPath: string;
|
|
12
|
+
/** @type {string} */
|
|
13
|
+
agentPath: string;
|
|
14
|
+
xcodeVersion: import("appium-xcode/build/lib/xcode").XcodeVersion;
|
|
15
|
+
args: import("@appium/types").StringRecord<any>;
|
|
6
16
|
log: import("@appium/types").AppiumLogger;
|
|
7
17
|
device: any;
|
|
8
18
|
platformVersion: any;
|
|
@@ -43,9 +53,14 @@ export class WebDriverAgent {
|
|
|
43
53
|
* @returns {string} Bundle ID for Xctest.
|
|
44
54
|
*/
|
|
45
55
|
get bundleIdForXctest(): string;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
56
|
+
/**
|
|
57
|
+
* @param {string} [bootstrapPath]
|
|
58
|
+
* @param {string} [agentPath]
|
|
59
|
+
*/
|
|
60
|
+
setWDAPaths(bootstrapPath?: string | undefined, agentPath?: string | undefined): void;
|
|
61
|
+
/**
|
|
62
|
+
* @returns {Promise<void>}
|
|
63
|
+
*/
|
|
49
64
|
cleanupObsoleteProcesses(): Promise<void>;
|
|
50
65
|
/**
|
|
51
66
|
* Return boolean if WDA is running or not
|
|
@@ -53,7 +68,10 @@ export class WebDriverAgent {
|
|
|
53
68
|
* @throws {Error} If there was invalid response code or body
|
|
54
69
|
*/
|
|
55
70
|
isRunning(): Promise<boolean>;
|
|
56
|
-
|
|
71
|
+
/**
|
|
72
|
+
* @returns {string}
|
|
73
|
+
*/
|
|
74
|
+
get basePath(): string;
|
|
57
75
|
/**
|
|
58
76
|
* Return current running WDA's status like below
|
|
59
77
|
* {
|
|
@@ -85,6 +103,8 @@ export class WebDriverAgent {
|
|
|
85
103
|
* Uninstall WDAs from the test device.
|
|
86
104
|
* Over Xcode 11, multiple WDA can be in the device since Xcode 11 generates different WDA.
|
|
87
105
|
* Appium does not expect multiple WDAs are running on a device.
|
|
106
|
+
*
|
|
107
|
+
* @returns {Promise<void>}
|
|
88
108
|
*/
|
|
89
109
|
uninstall(): Promise<void>;
|
|
90
110
|
_cleanupProjectIfFresh(): Promise<void>;
|
|
@@ -142,38 +162,83 @@ export class WebDriverAgent {
|
|
|
142
162
|
* @throws {Error} If there was invalid response code or body
|
|
143
163
|
*/
|
|
144
164
|
launch(sessionId: string): Promise<any | null>;
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
165
|
+
/**
|
|
166
|
+
* @param {string} _url
|
|
167
|
+
* @returns {void}
|
|
168
|
+
*/
|
|
169
|
+
set url(_url: url.UrlWithStringQuery);
|
|
170
|
+
/**
|
|
171
|
+
* @returns {import('url').UrlWithStringQuery}
|
|
172
|
+
*/
|
|
173
|
+
get url(): url.UrlWithStringQuery;
|
|
174
|
+
/**
|
|
175
|
+
* @returns {Promise<void>}
|
|
176
|
+
*/
|
|
177
|
+
startWithIDB(): Promise<void>;
|
|
178
|
+
/**
|
|
179
|
+
*
|
|
180
|
+
* @param {string} wdaBundlePath
|
|
181
|
+
* @returns {Promise<string>}
|
|
182
|
+
*/
|
|
183
|
+
parseBundleId(wdaBundlePath: string): Promise<string>;
|
|
184
|
+
/**
|
|
185
|
+
* @returns {Promise<{wdaBundleId: string, testBundleId: string, wdaBundlePath: string}>}
|
|
186
|
+
*/
|
|
149
187
|
prepareWDA(): Promise<{
|
|
150
|
-
wdaBundleId:
|
|
151
|
-
testBundleId:
|
|
188
|
+
wdaBundleId: string;
|
|
189
|
+
testBundleId: string;
|
|
152
190
|
wdaBundlePath: string;
|
|
153
191
|
}>;
|
|
192
|
+
/**
|
|
193
|
+
* @returns {Promise<string>}
|
|
194
|
+
*/
|
|
154
195
|
fetchWDABundle(): Promise<string>;
|
|
196
|
+
/**
|
|
197
|
+
* @returns {Promise<boolean>}
|
|
198
|
+
*/
|
|
155
199
|
isSourceFresh(): Promise<boolean>;
|
|
156
|
-
|
|
200
|
+
/**
|
|
201
|
+
* @param {string} sessionId
|
|
202
|
+
* @returns {void}
|
|
203
|
+
*/
|
|
204
|
+
setupProxies(sessionId: string): void;
|
|
157
205
|
jwproxy: JWProxy | undefined;
|
|
158
206
|
proxyReqRes: any;
|
|
159
207
|
noSessionProxy: NoSessionProxy | undefined;
|
|
208
|
+
/**
|
|
209
|
+
* @returns {Promise<void>}
|
|
210
|
+
*/
|
|
160
211
|
quit(): Promise<void>;
|
|
161
|
-
_url:
|
|
212
|
+
_url: url.UrlWithStringQuery | undefined;
|
|
213
|
+
/**
|
|
214
|
+
* @param {boolean} started
|
|
215
|
+
* @returns {void}s
|
|
216
|
+
*/
|
|
162
217
|
set fullyStarted(started: boolean);
|
|
218
|
+
/**
|
|
219
|
+
* @returns {boolean}
|
|
220
|
+
*/
|
|
163
221
|
get fullyStarted(): boolean;
|
|
164
|
-
|
|
222
|
+
/**
|
|
223
|
+
* @returns {Promise<string|undefined>}
|
|
224
|
+
*/
|
|
225
|
+
retrieveDerivedDataPath(): Promise<string | undefined>;
|
|
165
226
|
/**
|
|
166
227
|
* Reuse running WDA if it has the same bundle id with updatedWDABundleId.
|
|
167
228
|
* Or reuse it if it has the default id without updatedWDABundleId.
|
|
168
229
|
* Uninstall it if the method faces an exception for the above situation.
|
|
230
|
+
* @returns {Promise<void>}
|
|
169
231
|
*/
|
|
170
232
|
setupCaching(): Promise<void>;
|
|
171
233
|
/**
|
|
172
234
|
* Quit and uninstall running WDA.
|
|
235
|
+
* @returns {Promise<void>}
|
|
173
236
|
*/
|
|
174
237
|
quitAndUninstall(): Promise<void>;
|
|
175
238
|
}
|
|
239
|
+
export default WebDriverAgent;
|
|
176
240
|
import XcodeBuild from './xcodebuild';
|
|
241
|
+
import url from 'url';
|
|
177
242
|
import { JWProxy } from '@appium/base-driver';
|
|
178
243
|
import { NoSessionProxy } from './no-session-proxy';
|
|
179
244
|
//# sourceMappingURL=webdriveragent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webdriveragent.d.ts","sourceRoot":"","sources":["../../lib/webdriveragent.js"],"names":[],"mappings":";AA6BA;
|
|
1
|
+
{"version":3,"file":"webdriveragent.d.ts","sourceRoot":"","sources":["../../lib/webdriveragent.js"],"names":[],"mappings":";AA6BA;IAOE;;;;;OAKG;IACH,0BALW,OAAO,cAAc,EAAE,YAAY,+HA4E7C;IAnFD,qBAAqB;IACrB,eADW,MAAM,CACH;IAEd,qBAAqB;IACrB,WADW,MAAM,CACP;IASR,kEAAgC;IAEhC,gDAAyB;IACzB,0CAA+B;IAE/B,YAAyB;IACzB,qBAA2C;IAC3C,kBAAqC;IACrC,mBAAuC;IACvC,UAAqB;IACrB,sBAAqC;IACrC,SAAkC;IAClC,mBAAuC;IAIvC,kBAAqC;IACrC,mBAAwD;IACxD,gBAAiD;IAEjD,iBAAmC;IAKnC,uBAA+C;IAE/C,iBAAoB;IAEpB,0BAAqD;IAErD,sBAA6C;IAC7C,oBAAyC;IACzC,qBAA2C;IAC3C,qBAA2C;IAE3C,wBAAiD;IAEjD,sBAAmE;IACnE,wBAAiD;IACjD,qBAA2B;IAC3B,8BAA2F;IAE3F,8BA0Bc;IAGhB;;;OAGG;IACH,iCAIC;IAED;;;;;;;OAOG;IACH,gCAEC;IAED;;;OAGG;IACH,sFASC;IAED;;OAEG;IACH,4BAFa,QAAQ,IAAI,CAAC,CAqBzB;IAED;;;;OAIG;IACH,aAHY,QAAQ,OAAO,CAAC,CAK3B;IAED;;OAEG;IACH,uBAKC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,2CAJY,QAAQ,OAAO,eAAe,EAAE,YAAY,GAAC,IAAI,CAAC,CA4C7D;IAED;;;;;;OAMG;IACH,aAFa,QAAQ,IAAI,CAAC,CAmBzB;IAED,wCA4DC;IAGD;;;OAGG;IAEH;;;;;;;;;;;OAWG;IACH;;;;;oBAFY,QAAQ,IAAI,CAAC,CAQxB;IAED;;;;;;OAMG;IACH,qCALW,MAAM,GACL,QAAQ,OAAO,eAAe,EAAE,YAAY,GAAC,IAAI,CAAC,CA+C7D;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,kBAJW,MAAM,GACL,QAAQ,GAAG,QAAE,CAmDxB;IAoJD;;;OAGG;IACH,sCAEC;IAtBD;;OAEG;IACH,kCAWC;IAhJD;;OAEG;IACH,gBAFa,QAAQ,IAAI,CAAC,CAczB;IAED;;;;OAIG;IACH,6BAHW,MAAM,GACJ,QAAQ,MAAM,CAAC,CAS3B;IAED;;OAEG;IACH,cAFa,QAAQ;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAC,CAAC,CAUvF;IAED;;OAEG;IACH,kBAFa,QAAQ,MAAM,CAAC,CAa3B;IAED;;OAEG;IACH,iBAFa,QAAQ,OAAO,CAAC,CAQ5B;IAED;;;OAGG;IACH,wBAHW,MAAM,GACJ,IAAI,CAiBhB;IALC,6BAAqC;IAErC,iBAA8D;IAE9D,2CAAmD;IAGrD;;OAEG;IACH,QAFa,QAAQ,IAAI,CAAC,CAmCzB;IAQK,yCAA6C;IAyBnD;;;OAGG;IACH,mCAEC;IAbD;;OAEG;IACH,4BAEC;IAUD;;OAEG;IACH,2BAFa,QAAQ,MAAM,GAAC,SAAS,CAAC,CAOrC;IAED;;;;;OAKG;IACH,gBAFa,QAAQ,IAAI,CAAC,CAsCzB;IAED;;;OAGG;IACH,oBAFa,QAAQ,IAAI,CAAC,CAKzB;CACF;;uBAjtBsB,cAAc;gBATrB,KAAK;wBAEG,qBAAqB;+BAGd,oBAAoB"}
|
|
@@ -27,6 +27,12 @@ const WDA_CF_BUNDLE_NAME = 'WebDriverAgentRunner-Runner';
|
|
|
27
27
|
const SHARED_RESOURCES_GUARD = new async_lock_1.default();
|
|
28
28
|
const RECENT_MODULE_VERSION_ITEM_NAME = 'recentWdaModuleVersion';
|
|
29
29
|
class WebDriverAgent {
|
|
30
|
+
/**
|
|
31
|
+
* @param {import('appium-xcode').XcodeVersion} xcodeVersion
|
|
32
|
+
* // TODO: make args typed
|
|
33
|
+
* @param {import('@appium/types').StringRecord} [args={}]
|
|
34
|
+
* @param {import('@appium/types').AppiumLogger?} [log=null]
|
|
35
|
+
*/
|
|
30
36
|
constructor(xcodeVersion, args = {}, log = null) {
|
|
31
37
|
this.xcodeVersion = xcodeVersion;
|
|
32
38
|
this.args = lodash_1.default.clone(args);
|
|
@@ -107,6 +113,10 @@ class WebDriverAgent {
|
|
|
107
113
|
get bundleIdForXctest() {
|
|
108
114
|
return `${this.updatedWDABundleId ? this.updatedWDABundleId : constants_1.WDA_RUNNER_BUNDLE_ID}${this.updatedWDABundleIdSuffix}`;
|
|
109
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* @param {string} [bootstrapPath]
|
|
118
|
+
* @param {string} [agentPath]
|
|
119
|
+
*/
|
|
110
120
|
setWDAPaths(bootstrapPath, agentPath) {
|
|
111
121
|
// allow the user to specify a place for WDA. This is undocumented and
|
|
112
122
|
// only here for the purposes of testing development of WDA
|
|
@@ -116,8 +126,11 @@ class WebDriverAgent {
|
|
|
116
126
|
this.agentPath = agentPath || path_1.default.resolve(this.bootstrapPath, 'WebDriverAgent.xcodeproj');
|
|
117
127
|
this.log.info(`Using WDA agent: '${this.agentPath}'`);
|
|
118
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* @returns {Promise<void>}
|
|
131
|
+
*/
|
|
119
132
|
async cleanupObsoleteProcesses() {
|
|
120
|
-
const obsoletePids = await (0, utils_1.getPIDsListeningOnPort)(this.url.port, (cmdLine) => cmdLine.includes('/WebDriverAgentRunner') &&
|
|
133
|
+
const obsoletePids = await (0, utils_1.getPIDsListeningOnPort)(/** @type {string} */ (this.url.port), (cmdLine) => cmdLine.includes('/WebDriverAgentRunner') &&
|
|
121
134
|
!cmdLine.toLowerCase().includes(this.device.udid.toLowerCase()));
|
|
122
135
|
if (lodash_1.default.isEmpty(obsoletePids)) {
|
|
123
136
|
this.log.debug(`No obsolete cached processes from previous WDA sessions ` +
|
|
@@ -142,6 +155,9 @@ class WebDriverAgent {
|
|
|
142
155
|
async isRunning() {
|
|
143
156
|
return !!(await this.getStatus());
|
|
144
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* @returns {string}
|
|
160
|
+
*/
|
|
145
161
|
get basePath() {
|
|
146
162
|
if (this.url.path === '/') {
|
|
147
163
|
return '';
|
|
@@ -219,6 +235,8 @@ class WebDriverAgent {
|
|
|
219
235
|
* Uninstall WDAs from the test device.
|
|
220
236
|
* Over Xcode 11, multiple WDA can be in the device since Xcode 11 generates different WDA.
|
|
221
237
|
* Appium does not expect multiple WDAs are running on a device.
|
|
238
|
+
*
|
|
239
|
+
* @returns {Promise<void>}
|
|
222
240
|
*/
|
|
223
241
|
async uninstall() {
|
|
224
242
|
try {
|
|
@@ -430,6 +448,9 @@ class WebDriverAgent {
|
|
|
430
448
|
// @ts-ignore xcodebuild should be set
|
|
431
449
|
return await this.xcodebuild.start();
|
|
432
450
|
}
|
|
451
|
+
/**
|
|
452
|
+
* @returns {Promise<void>}
|
|
453
|
+
*/
|
|
433
454
|
async startWithIDB() {
|
|
434
455
|
this.log.info('Will launch WDA with idb instead of xcodebuild since the corresponding flag is enabled');
|
|
435
456
|
const { wdaBundleId, testBundleId } = await this.prepareWDA();
|
|
@@ -442,6 +463,11 @@ class WebDriverAgent {
|
|
|
442
463
|
}
|
|
443
464
|
return await this.idb.runXCUITest(wdaBundleId, wdaBundleId, testBundleId, { env });
|
|
444
465
|
}
|
|
466
|
+
/**
|
|
467
|
+
*
|
|
468
|
+
* @param {string} wdaBundlePath
|
|
469
|
+
* @returns {Promise<string>}
|
|
470
|
+
*/
|
|
445
471
|
async parseBundleId(wdaBundlePath) {
|
|
446
472
|
const infoPlistPath = path_1.default.join(wdaBundlePath, 'Info.plist');
|
|
447
473
|
const infoPlist = await support_1.plist.parsePlist(await support_1.fs.readFile(infoPlistPath));
|
|
@@ -450,6 +476,9 @@ class WebDriverAgent {
|
|
|
450
476
|
}
|
|
451
477
|
return infoPlist.CFBundleIdentifier;
|
|
452
478
|
}
|
|
479
|
+
/**
|
|
480
|
+
* @returns {Promise<{wdaBundleId: string, testBundleId: string, wdaBundlePath: string}>}
|
|
481
|
+
*/
|
|
453
482
|
async prepareWDA() {
|
|
454
483
|
const wdaBundlePath = this.wdaBundlePath || await this.fetchWDABundle();
|
|
455
484
|
const wdaBundleId = await this.parseBundleId(wdaBundlePath);
|
|
@@ -459,9 +488,12 @@ class WebDriverAgent {
|
|
|
459
488
|
const testBundleId = await this.idb.installXCTestBundle(path_1.default.join(wdaBundlePath, 'PlugIns', 'WebDriverAgentRunner.xctest'));
|
|
460
489
|
return { wdaBundleId, testBundleId, wdaBundlePath };
|
|
461
490
|
}
|
|
491
|
+
/**
|
|
492
|
+
* @returns {Promise<string>}
|
|
493
|
+
*/
|
|
462
494
|
async fetchWDABundle() {
|
|
463
495
|
if (!this.derivedDataPath) {
|
|
464
|
-
return await (0, check_dependencies_1.bundleWDASim)(this.xcodebuild);
|
|
496
|
+
return await (0, check_dependencies_1.bundleWDASim)(/** @type {XcodeBuild} */ (this.xcodebuild));
|
|
465
497
|
}
|
|
466
498
|
const wdaBundlePaths = await support_1.fs.glob(`${this.derivedDataPath}/**/*${constants_1.WDA_RUNNER_APP}/`, {
|
|
467
499
|
absolute: true,
|
|
@@ -471,13 +503,20 @@ class WebDriverAgent {
|
|
|
471
503
|
}
|
|
472
504
|
return wdaBundlePaths[0];
|
|
473
505
|
}
|
|
506
|
+
/**
|
|
507
|
+
* @returns {Promise<boolean>}
|
|
508
|
+
*/
|
|
474
509
|
async isSourceFresh() {
|
|
475
510
|
const existsPromises = [
|
|
476
511
|
'Resources',
|
|
477
512
|
`Resources${path_1.default.sep}WebDriverAgent.bundle`,
|
|
478
|
-
].map((subPath) => support_1.fs.exists(path_1.default.resolve(this.bootstrapPath, subPath)));
|
|
513
|
+
].map((subPath) => support_1.fs.exists(path_1.default.resolve(/** @type {String} */ (this.bootstrapPath), subPath)));
|
|
479
514
|
return (await bluebird_1.default.all(existsPromises)).some((v) => v === false);
|
|
480
515
|
}
|
|
516
|
+
/**
|
|
517
|
+
* @param {string} sessionId
|
|
518
|
+
* @returns {void}
|
|
519
|
+
*/
|
|
481
520
|
setupProxies(sessionId) {
|
|
482
521
|
const proxyOpts = {
|
|
483
522
|
log: this.log,
|
|
@@ -492,6 +531,9 @@ class WebDriverAgent {
|
|
|
492
531
|
this.proxyReqRes = this.jwproxy.proxyReqRes.bind(this.jwproxy);
|
|
493
532
|
this.noSessionProxy = new no_session_proxy_1.NoSessionProxy(proxyOpts);
|
|
494
533
|
}
|
|
534
|
+
/**
|
|
535
|
+
* @returns {Promise<void>}
|
|
536
|
+
*/
|
|
495
537
|
async quit() {
|
|
496
538
|
if (this.usePreinstalledWDA) {
|
|
497
539
|
this.log.info('Stopping the XCTest session');
|
|
@@ -527,6 +569,9 @@ class WebDriverAgent {
|
|
|
527
569
|
this.webDriverAgentUrl = null;
|
|
528
570
|
}
|
|
529
571
|
}
|
|
572
|
+
/**
|
|
573
|
+
* @returns {import('url').UrlWithStringQuery}
|
|
574
|
+
*/
|
|
530
575
|
get url() {
|
|
531
576
|
if (!this._url) {
|
|
532
577
|
if (this.webDriverAgentUrl) {
|
|
@@ -540,26 +585,40 @@ class WebDriverAgent {
|
|
|
540
585
|
}
|
|
541
586
|
return this._url;
|
|
542
587
|
}
|
|
588
|
+
/**
|
|
589
|
+
* @param {string} _url
|
|
590
|
+
* @returns {void}
|
|
591
|
+
*/
|
|
543
592
|
set url(_url) {
|
|
544
593
|
this._url = url_1.default.parse(_url);
|
|
545
594
|
}
|
|
595
|
+
/**
|
|
596
|
+
* @returns {boolean}
|
|
597
|
+
*/
|
|
546
598
|
get fullyStarted() {
|
|
547
599
|
return this.started;
|
|
548
600
|
}
|
|
601
|
+
/**
|
|
602
|
+
* @param {boolean} started
|
|
603
|
+
* @returns {void}s
|
|
604
|
+
*/
|
|
549
605
|
set fullyStarted(started) {
|
|
550
606
|
this.started = started ?? false;
|
|
551
607
|
}
|
|
608
|
+
/**
|
|
609
|
+
* @returns {Promise<string|undefined>}
|
|
610
|
+
*/
|
|
552
611
|
async retrieveDerivedDataPath() {
|
|
553
612
|
if (this.canSkipXcodebuild) {
|
|
554
613
|
return;
|
|
555
614
|
}
|
|
556
|
-
|
|
557
|
-
return await this.xcodebuild.retrieveDerivedDataPath();
|
|
615
|
+
return await /** @type {XcodeBuild} */ (this.xcodebuild).retrieveDerivedDataPath();
|
|
558
616
|
}
|
|
559
617
|
/**
|
|
560
618
|
* Reuse running WDA if it has the same bundle id with updatedWDABundleId.
|
|
561
619
|
* Or reuse it if it has the default id without updatedWDABundleId.
|
|
562
620
|
* Uninstall it if the method faces an exception for the above situation.
|
|
621
|
+
* @returns {Promise<void>}
|
|
563
622
|
*/
|
|
564
623
|
async setupCaching() {
|
|
565
624
|
const status = await this.getStatus();
|
|
@@ -594,6 +653,7 @@ class WebDriverAgent {
|
|
|
594
653
|
}
|
|
595
654
|
/**
|
|
596
655
|
* Quit and uninstall running WDA.
|
|
656
|
+
* @returns {Promise<void>}
|
|
597
657
|
*/
|
|
598
658
|
async quitAndUninstall() {
|
|
599
659
|
await this.quit();
|