appium-geckodriver 2.2.2 → 2.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/build/lib/driver.d.ts.map +1 -1
- package/build/lib/driver.js +2 -6
- package/build/lib/driver.js.map +1 -1
- package/build/lib/gecko.d.ts.map +1 -1
- package/build/lib/gecko.js +13 -7
- package/build/lib/gecko.js.map +1 -1
- package/build/lib/utils.d.ts +2 -2
- package/build/lib/utils.d.ts.map +1 -1
- package/build/lib/utils.js +8 -9
- package/build/lib/utils.js.map +1 -1
- package/lib/driver.ts +2 -3
- package/lib/gecko.ts +14 -7
- package/lib/utils.ts +8 -9
- package/npm-shrinkwrap.json +31 -21
- package/package.json +1 -3
- package/scripts/install-geckodriver.mjs +12 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [2.2.3](https://github.com/appium/appium-geckodriver/compare/v2.2.2...v2.2.3) (2026-05-04)
|
|
2
|
+
|
|
3
|
+
### Miscellaneous Chores
|
|
4
|
+
|
|
5
|
+
* remove lodash ([#160](https://github.com/appium/appium-geckodriver/issues/160)) ([6a4b9b6](https://github.com/appium/appium-geckodriver/commit/6a4b9b6051dcb4ed21361f6764e174645c8b9a0e))
|
|
6
|
+
|
|
1
7
|
## [2.2.2](https://github.com/appium/appium-geckodriver/compare/v2.2.1...v2.2.2) (2026-05-01)
|
|
2
8
|
|
|
3
9
|
### Bug Fixes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../lib/driver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../lib/driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,0BAA0B,EAC1B,WAAW,EACX,YAAY,EACZ,cAAc,EACd,aAAa,EACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,UAAU,EAAS,MAAM,eAAe,CAAC;AACjD,OAAO,EAAoB,iBAAiB,EAAC,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAC,qBAAqB,EAAC,MAAM,gBAAgB,CAAC;AAErD,OAAO,KAAK,YAAY,MAAM,iBAAiB,CAAC;AAUhD,MAAM,MAAM,gBAAgB,GAAG,OAAO,qBAAqB,CAAC;AAE5D,qBAAa,WACX,SAAQ,UAAU,CAAC,gBAAgB,EAAE,YAAY,CACjD,YAAW,cAAc,CAAC,gBAAgB,EAAE,MAAM,EAAE,YAAY,CAAC;IAE1D,WAAW,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC;IAE1C,WAAW,kCAA4B;IAEvC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,aAAa,CAAuB;gBAEhC,IAAI,GAAE,WAA+B;IAgBjD,IAAI,KAAK,IAAI,iBAAiB,CAK7B;IAED,IAAa,YAAY,IAAI,MAAM,GAAG,IAAI,CAEzC;IAGQ,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO;IAIxC,iBAAiB,IAAI,YAAY,EAAE;IAInC,QAAQ,IAAI,OAAO;IAInB,mBAAmB,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,IAAI,GAAG;IAmBrC,aAAa,CAC1B,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAC,EACzC,QAAQ,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,EAC1C,GAAG,IAAI,EAAE,GAAG,EAAE,GACb,OAAO,CAAC,0BAA0B,CAAC,gBAAgB,CAAC,CAAC;IAqBzC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ7C,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,oBAAoB;CAe7B;AAED,eAAe,WAAW,CAAC"}
|
package/build/lib/driver.js
CHANGED
|
@@ -32,12 +32,8 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
36
|
exports.GeckoDriver = void 0;
|
|
40
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
41
37
|
const driver_1 = require("appium/driver");
|
|
42
38
|
const gecko_1 = require("./gecko");
|
|
43
39
|
const desired_caps_1 = require("./desired-caps");
|
|
@@ -58,7 +54,7 @@ class GeckoDriver extends driver_1.BaseDriver {
|
|
|
58
54
|
_bidiProxyUrl = null;
|
|
59
55
|
constructor(opts = {}) {
|
|
60
56
|
super(opts);
|
|
61
|
-
this.desiredCapConstraints =
|
|
57
|
+
this.desiredCapConstraints = structuredClone(desired_caps_1.desiredCapConstraints);
|
|
62
58
|
this.locatorStrategies = [
|
|
63
59
|
'xpath',
|
|
64
60
|
'tag name',
|
|
@@ -138,7 +134,7 @@ class GeckoDriver extends driver_1.BaseDriver {
|
|
|
138
134
|
}
|
|
139
135
|
_extractWebSocketUrl(response) {
|
|
140
136
|
const webSocketUrl = response?.capabilities?.webSocketUrl;
|
|
141
|
-
if (
|
|
137
|
+
if (typeof webSocketUrl !== 'string' || webSocketUrl.length === 0) {
|
|
142
138
|
return null;
|
|
143
139
|
}
|
|
144
140
|
try {
|
package/build/lib/driver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.js","sourceRoot":"","sources":["../../lib/driver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"driver.js","sourceRoot":"","sources":["../../lib/driver.ts"],"names":[],"mappings":"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"}
|
package/build/lib/gecko.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gecko.d.ts","sourceRoot":"","sources":["../../lib/gecko.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gecko.d.ts","sourceRoot":"","sources":["../../lib/gecko.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,OAAO,EAAS,MAAM,eAAe,CAAC;AAM9C,OAAO,KAAK,EAAC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAC;AAWpF,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAE7C,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAwID,qBAAa,UAAW,SAAQ,OAAO;IACrC,cAAc,CAAC,EAAE,OAAO,CAAC;IAEV,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAE,QAAe;CASnF;AA2BD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;gBAEvB,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY;IAMjD,IAAI,KAAK,IAAI,UAAU,CAKtB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAEK,KAAK,CAAC,SAAS,EAAE,YAAY,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,YAAY,CAAC;IAkEhF,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAqB5B;AAED,eAAe,iBAAiB,CAAC"}
|
package/build/lib/gecko.js
CHANGED
|
@@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.GeckoDriverServer = exports.GeckoProxy = exports.GECKO_SERVER_HOST = void 0;
|
|
7
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
8
7
|
const node_os_1 = __importDefault(require("node:os"));
|
|
9
8
|
const node_path_1 = __importDefault(require("node:path"));
|
|
10
9
|
const driver_1 = require("appium/driver");
|
|
@@ -67,7 +66,7 @@ class GeckoDriverProcess {
|
|
|
67
66
|
const driverBin = await this.resolveGeckodriverBinary();
|
|
68
67
|
const args = [];
|
|
69
68
|
/* #region Options */
|
|
70
|
-
switch (
|
|
69
|
+
switch (this.verbosity?.toLowerCase()) {
|
|
71
70
|
case constants_1.VERBOSITY.DEBUG:
|
|
72
71
|
args.push('-v');
|
|
73
72
|
break;
|
|
@@ -78,13 +77,13 @@ class GeckoDriverProcess {
|
|
|
78
77
|
if (this.noReset) {
|
|
79
78
|
args.push('--connect-existing');
|
|
80
79
|
// https://firefox-source-docs.mozilla.org/testing/geckodriver/Flags.html#code-connect-existing-code
|
|
81
|
-
if (
|
|
80
|
+
if (this.marionettePort == null) {
|
|
82
81
|
this.log.info(`'marionettePort' capability value is not provided while 'noReset' is enabled`);
|
|
83
82
|
this.log.info(`Assigning 'marionettePort' to the default value (${DEFAULT_MARIONETTE_PORT})`);
|
|
84
83
|
}
|
|
85
84
|
args.push('--marionette-port', `${this.marionettePort ?? DEFAULT_MARIONETTE_PORT}`);
|
|
86
85
|
}
|
|
87
|
-
else if (
|
|
86
|
+
else if (this.marionettePort != null) {
|
|
88
87
|
args.push('--marionette-port', `${this.marionettePort}`);
|
|
89
88
|
}
|
|
90
89
|
/* #endregion */
|
|
@@ -94,7 +93,7 @@ class GeckoDriverProcess {
|
|
|
94
93
|
}
|
|
95
94
|
this._proc = new teen_process_1.SubProcess(driverBin, args);
|
|
96
95
|
this._proc.on('output', (stdout, stderr) => {
|
|
97
|
-
const line =
|
|
96
|
+
const line = (stdout || stderr).trim();
|
|
98
97
|
if (line) {
|
|
99
98
|
this.log.debug(`[${GD_BINARY}] ${line}`);
|
|
100
99
|
}
|
|
@@ -147,8 +146,15 @@ class GeckoProxy extends driver_1.JWProxy {
|
|
|
147
146
|
}
|
|
148
147
|
exports.GeckoProxy = GeckoProxy;
|
|
149
148
|
const RUNNING_PROCESS_IDS = [];
|
|
149
|
+
const removeRunningProcessId = (pid) => {
|
|
150
|
+
let idx = RUNNING_PROCESS_IDS.indexOf(pid);
|
|
151
|
+
while (idx >= 0) {
|
|
152
|
+
RUNNING_PROCESS_IDS.splice(idx, 1);
|
|
153
|
+
idx = RUNNING_PROCESS_IDS.indexOf(pid);
|
|
154
|
+
}
|
|
155
|
+
};
|
|
150
156
|
process.once('exit', () => {
|
|
151
|
-
if (
|
|
157
|
+
if (RUNNING_PROCESS_IDS.length === 0) {
|
|
152
158
|
return;
|
|
153
159
|
}
|
|
154
160
|
const command = support_1.system.isWindows()
|
|
@@ -230,7 +236,7 @@ class GeckoDriverServer {
|
|
|
230
236
|
const pid = this._process.proc?.pid;
|
|
231
237
|
if (pid) {
|
|
232
238
|
RUNNING_PROCESS_IDS.push(pid);
|
|
233
|
-
this._process.proc?.on('exit', () =>
|
|
239
|
+
this._process.proc?.on('exit', () => removeRunningProcessId(pid));
|
|
234
240
|
}
|
|
235
241
|
return (await this._proxy.command('/session', 'POST', {
|
|
236
242
|
capabilities: {
|
package/build/lib/gecko.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gecko.js","sourceRoot":"","sources":["../../lib/gecko.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"gecko.js","sourceRoot":"","sources":["../../lib/gecko.ts"],"names":[],"mappings":"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"}
|
package/build/lib/utils.d.ts
CHANGED
|
@@ -14,9 +14,9 @@ export declare function mkdirp(p: string): Promise<void>;
|
|
|
14
14
|
/**
|
|
15
15
|
* Extract a specific file from a tar.gz archive
|
|
16
16
|
*/
|
|
17
|
-
export declare function extractFileFromTarGz(
|
|
17
|
+
export declare function extractFileFromTarGz(srcArchive: string, fileToExtract: string, dstPath: string): Promise<void>;
|
|
18
18
|
/**
|
|
19
19
|
* Extract a specific file from a zip archive
|
|
20
20
|
*/
|
|
21
|
-
export declare function extractFileFromZip(
|
|
21
|
+
export declare function extractFileFromZip(srcArchive: string, fileToExtract: string, dstPath: string): Promise<void>;
|
|
22
22
|
//# sourceMappingURL=utils.d.ts.map
|
package/build/lib/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAKhD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,CAkBpE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnF;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErD;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAqCf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAqBf"}
|
package/build/lib/utils.js
CHANGED
|
@@ -8,7 +8,6 @@ exports.downloadToFile = downloadToFile;
|
|
|
8
8
|
exports.mkdirp = mkdirp;
|
|
9
9
|
exports.extractFileFromTarGz = extractFileFromTarGz;
|
|
10
10
|
exports.extractFileFromZip = extractFileFromZip;
|
|
11
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
12
11
|
const support_1 = require("appium/support");
|
|
13
12
|
const tar_stream_1 = __importDefault(require("tar-stream"));
|
|
14
13
|
const node_zlib_1 = __importDefault(require("node:zlib"));
|
|
@@ -21,7 +20,7 @@ const GECKO_CAP_PREFIXES = ['moz:'];
|
|
|
21
20
|
*/
|
|
22
21
|
function formatCapsForServer(caps) {
|
|
23
22
|
const result = {};
|
|
24
|
-
for (const [name, value] of
|
|
23
|
+
for (const [name, value] of Object.entries(caps)) {
|
|
25
24
|
if (GECKO_CAP_PREFIXES.some((prefix) => name.startsWith(prefix)) ||
|
|
26
25
|
driver_1.STANDARD_CAPS.has(name)) {
|
|
27
26
|
result[name] = value;
|
|
@@ -32,7 +31,7 @@ function formatCapsForServer(caps) {
|
|
|
32
31
|
}
|
|
33
32
|
if (result.platformName) {
|
|
34
33
|
// Geckodriver only supports lowercase platform names
|
|
35
|
-
result.platformName =
|
|
34
|
+
result.platformName = result.platformName.toLowerCase();
|
|
36
35
|
}
|
|
37
36
|
return result;
|
|
38
37
|
}
|
|
@@ -51,7 +50,7 @@ async function mkdirp(p) {
|
|
|
51
50
|
/**
|
|
52
51
|
* Extract a specific file from a tar.gz archive
|
|
53
52
|
*/
|
|
54
|
-
async function extractFileFromTarGz(
|
|
53
|
+
async function extractFileFromTarGz(srcArchive, fileToExtract, dstPath) {
|
|
55
54
|
const chunks = [];
|
|
56
55
|
const extract = tar_stream_1.default.extract();
|
|
57
56
|
const extractPromise = new bluebird_1.default((resolve, reject) => {
|
|
@@ -77,20 +76,20 @@ async function extractFileFromTarGz(srcAcrhive, fileToExtract, dstPath) {
|
|
|
77
76
|
}
|
|
78
77
|
}
|
|
79
78
|
else {
|
|
80
|
-
return reject(new Error(`The file '${fileToExtract}' could not be found in the '${
|
|
79
|
+
return reject(new Error(`The file '${fileToExtract}' could not be found in the '${srcArchive}' archive`));
|
|
81
80
|
}
|
|
82
81
|
resolve();
|
|
83
82
|
});
|
|
84
83
|
});
|
|
85
|
-
support_1.fs.createReadStream(
|
|
84
|
+
support_1.fs.createReadStream(srcArchive).pipe(node_zlib_1.default.createGunzip()).pipe(extract);
|
|
86
85
|
await extractPromise;
|
|
87
86
|
}
|
|
88
87
|
/**
|
|
89
88
|
* Extract a specific file from a zip archive
|
|
90
89
|
*/
|
|
91
|
-
async function extractFileFromZip(
|
|
90
|
+
async function extractFileFromZip(srcArchive, fileToExtract, dstPath) {
|
|
92
91
|
let didFindEntry = false;
|
|
93
|
-
await support_1.zip.readEntries(
|
|
92
|
+
await support_1.zip.readEntries(srcArchive, async ({ entry, extractEntryTo }) => {
|
|
94
93
|
if (didFindEntry || entry.fileName !== fileToExtract) {
|
|
95
94
|
return;
|
|
96
95
|
}
|
|
@@ -105,7 +104,7 @@ async function extractFileFromZip(srcAcrhive, fileToExtract, dstPath) {
|
|
|
105
104
|
}
|
|
106
105
|
});
|
|
107
106
|
if (!didFindEntry) {
|
|
108
|
-
throw new Error(`The file '${fileToExtract}' could not be found in the '${
|
|
107
|
+
throw new Error(`The file '${fileToExtract}' could not be found in the '${srcArchive}' archive`);
|
|
109
108
|
}
|
|
110
109
|
}
|
|
111
110
|
//# sourceMappingURL=utils.js.map
|
package/build/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":"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"}
|
package/lib/driver.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _ from 'lodash';
|
|
2
1
|
import type {
|
|
3
2
|
RouteMatcher,
|
|
4
3
|
DefaultCreateSessionResult,
|
|
@@ -37,7 +36,7 @@ export class GeckoDriver
|
|
|
37
36
|
|
|
38
37
|
constructor(opts: InitialOpts = {} as InitialOpts) {
|
|
39
38
|
super(opts);
|
|
40
|
-
this.desiredCapConstraints =
|
|
39
|
+
this.desiredCapConstraints = structuredClone(desiredCapConstraints);
|
|
41
40
|
this.locatorStrategies = [
|
|
42
41
|
'xpath',
|
|
43
42
|
'tag name',
|
|
@@ -136,7 +135,7 @@ export class GeckoDriver
|
|
|
136
135
|
|
|
137
136
|
private _extractWebSocketUrl(response: StringRecord): string | null {
|
|
138
137
|
const webSocketUrl = (response?.capabilities as any)?.webSocketUrl;
|
|
139
|
-
if (
|
|
138
|
+
if (typeof webSocketUrl !== 'string' || webSocketUrl.length === 0) {
|
|
140
139
|
return null;
|
|
141
140
|
}
|
|
142
141
|
try {
|
package/lib/gecko.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _ from 'lodash';
|
|
2
1
|
import os from 'node:os';
|
|
3
2
|
import path from 'node:path';
|
|
4
3
|
import {JWProxy, errors} from 'appium/driver';
|
|
@@ -79,7 +78,7 @@ class GeckoDriverProcess {
|
|
|
79
78
|
const driverBin = await this.resolveGeckodriverBinary();
|
|
80
79
|
const args: string[] = [];
|
|
81
80
|
/* #region Options */
|
|
82
|
-
switch (
|
|
81
|
+
switch (this.verbosity?.toLowerCase()) {
|
|
83
82
|
case VERBOSITY.DEBUG:
|
|
84
83
|
args.push('-v');
|
|
85
84
|
break;
|
|
@@ -90,7 +89,7 @@ class GeckoDriverProcess {
|
|
|
90
89
|
if (this.noReset) {
|
|
91
90
|
args.push('--connect-existing');
|
|
92
91
|
// https://firefox-source-docs.mozilla.org/testing/geckodriver/Flags.html#code-connect-existing-code
|
|
93
|
-
if (
|
|
92
|
+
if (this.marionettePort == null) {
|
|
94
93
|
this.log.info(
|
|
95
94
|
`'marionettePort' capability value is not provided while 'noReset' is enabled`,
|
|
96
95
|
);
|
|
@@ -99,7 +98,7 @@ class GeckoDriverProcess {
|
|
|
99
98
|
);
|
|
100
99
|
}
|
|
101
100
|
args.push('--marionette-port', `${this.marionettePort ?? DEFAULT_MARIONETTE_PORT}`);
|
|
102
|
-
} else if (
|
|
101
|
+
} else if (this.marionettePort != null) {
|
|
103
102
|
args.push('--marionette-port', `${this.marionettePort}`);
|
|
104
103
|
}
|
|
105
104
|
/* #endregion */
|
|
@@ -110,7 +109,7 @@ class GeckoDriverProcess {
|
|
|
110
109
|
}
|
|
111
110
|
this._proc = new SubProcess(driverBin, args);
|
|
112
111
|
this._proc.on('output', (stdout, stderr) => {
|
|
113
|
-
const line =
|
|
112
|
+
const line = (stdout || stderr).trim();
|
|
114
113
|
if (line) {
|
|
115
114
|
this.log.debug(`[${GD_BINARY}] ${line}`);
|
|
116
115
|
}
|
|
@@ -173,8 +172,16 @@ export class GeckoProxy extends JWProxy {
|
|
|
173
172
|
}
|
|
174
173
|
|
|
175
174
|
const RUNNING_PROCESS_IDS: (number | undefined)[] = [];
|
|
175
|
+
const removeRunningProcessId = (pid: number): void => {
|
|
176
|
+
let idx = RUNNING_PROCESS_IDS.indexOf(pid);
|
|
177
|
+
while (idx >= 0) {
|
|
178
|
+
RUNNING_PROCESS_IDS.splice(idx, 1);
|
|
179
|
+
idx = RUNNING_PROCESS_IDS.indexOf(pid);
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
|
|
176
183
|
process.once('exit', () => {
|
|
177
|
-
if (
|
|
184
|
+
if (RUNNING_PROCESS_IDS.length === 0) {
|
|
178
185
|
return;
|
|
179
186
|
}
|
|
180
187
|
|
|
@@ -266,7 +273,7 @@ export class GeckoDriverServer {
|
|
|
266
273
|
const pid = this._process.proc?.pid;
|
|
267
274
|
if (pid) {
|
|
268
275
|
RUNNING_PROCESS_IDS.push(pid);
|
|
269
|
-
this._process.proc?.on('exit', () =>
|
|
276
|
+
this._process.proc?.on('exit', () => removeRunningProcessId(pid));
|
|
270
277
|
}
|
|
271
278
|
|
|
272
279
|
return (await this._proxy.command('/session', 'POST', {
|
package/lib/utils.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _ from 'lodash';
|
|
2
1
|
import {fs, net, zip, tempDir} from 'appium/support';
|
|
3
2
|
import tar from 'tar-stream';
|
|
4
3
|
import zlib from 'node:zlib';
|
|
@@ -14,7 +13,7 @@ const GECKO_CAP_PREFIXES = ['moz:'] as const;
|
|
|
14
13
|
*/
|
|
15
14
|
export function formatCapsForServer(caps: StringRecord): StringRecord {
|
|
16
15
|
const result: StringRecord = {};
|
|
17
|
-
for (const [name, value] of
|
|
16
|
+
for (const [name, value] of Object.entries(caps)) {
|
|
18
17
|
if (
|
|
19
18
|
GECKO_CAP_PREFIXES.some((prefix) => name.startsWith(prefix)) ||
|
|
20
19
|
STANDARD_CAPS.has(name as any)
|
|
@@ -27,7 +26,7 @@ export function formatCapsForServer(caps: StringRecord): StringRecord {
|
|
|
27
26
|
}
|
|
28
27
|
if (result.platformName) {
|
|
29
28
|
// Geckodriver only supports lowercase platform names
|
|
30
|
-
result.platformName =
|
|
29
|
+
result.platformName = result.platformName.toLowerCase();
|
|
31
30
|
}
|
|
32
31
|
return result;
|
|
33
32
|
}
|
|
@@ -50,7 +49,7 @@ export async function mkdirp(p: string): Promise<void> {
|
|
|
50
49
|
* Extract a specific file from a tar.gz archive
|
|
51
50
|
*/
|
|
52
51
|
export async function extractFileFromTarGz(
|
|
53
|
-
|
|
52
|
+
srcArchive: string,
|
|
54
53
|
fileToExtract: string,
|
|
55
54
|
dstPath: string,
|
|
56
55
|
): Promise<void> {
|
|
@@ -79,7 +78,7 @@ export async function extractFileFromTarGz(
|
|
|
79
78
|
} else {
|
|
80
79
|
return reject(
|
|
81
80
|
new Error(
|
|
82
|
-
`The file '${fileToExtract}' could not be found in the '${
|
|
81
|
+
`The file '${fileToExtract}' could not be found in the '${srcArchive}' archive`,
|
|
83
82
|
),
|
|
84
83
|
);
|
|
85
84
|
}
|
|
@@ -87,7 +86,7 @@ export async function extractFileFromTarGz(
|
|
|
87
86
|
});
|
|
88
87
|
});
|
|
89
88
|
|
|
90
|
-
fs.createReadStream(
|
|
89
|
+
fs.createReadStream(srcArchive).pipe(zlib.createGunzip()).pipe(extract);
|
|
91
90
|
|
|
92
91
|
await extractPromise;
|
|
93
92
|
}
|
|
@@ -96,12 +95,12 @@ export async function extractFileFromTarGz(
|
|
|
96
95
|
* Extract a specific file from a zip archive
|
|
97
96
|
*/
|
|
98
97
|
export async function extractFileFromZip(
|
|
99
|
-
|
|
98
|
+
srcArchive: string,
|
|
100
99
|
fileToExtract: string,
|
|
101
100
|
dstPath: string,
|
|
102
101
|
): Promise<void> {
|
|
103
102
|
let didFindEntry = false;
|
|
104
|
-
await zip.readEntries(
|
|
103
|
+
await zip.readEntries(srcArchive, async ({entry, extractEntryTo}) => {
|
|
105
104
|
if (didFindEntry || entry.fileName !== fileToExtract) {
|
|
106
105
|
return;
|
|
107
106
|
}
|
|
@@ -117,7 +116,7 @@ export async function extractFileFromZip(
|
|
|
117
116
|
});
|
|
118
117
|
if (!didFindEntry) {
|
|
119
118
|
throw new Error(
|
|
120
|
-
`The file '${fileToExtract}' could not be found in the '${
|
|
119
|
+
`The file '${fileToExtract}' could not be found in the '${srcArchive}' archive`,
|
|
121
120
|
);
|
|
122
121
|
}
|
|
123
122
|
}
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-geckodriver",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.3",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "appium-geckodriver",
|
|
9
|
-
"version": "2.2.
|
|
9
|
+
"version": "2.2.3",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"appium-adb": "^14.0.0",
|
|
13
13
|
"asyncbox": "^6.0.1",
|
|
14
14
|
"axios": "^1.7.7",
|
|
15
15
|
"bluebird": "^3.5.1",
|
|
16
|
-
"lodash": "^4.17.4",
|
|
17
16
|
"portscanner": "2.2.0",
|
|
18
17
|
"semver": "^7.6.3",
|
|
19
18
|
"tar-stream": "^3.1.7",
|
|
@@ -26,7 +25,6 @@
|
|
|
26
25
|
"@semantic-release/changelog": "^6.0.1",
|
|
27
26
|
"@semantic-release/git": "^10.0.1",
|
|
28
27
|
"@types/bluebird": "^3.5.38",
|
|
29
|
-
"@types/lodash": "^4.14.196",
|
|
30
28
|
"@types/mocha": "^10.0.1",
|
|
31
29
|
"@types/node": "^25.0.0",
|
|
32
30
|
"chai": "^6.0.0",
|
|
@@ -125,6 +123,19 @@
|
|
|
125
123
|
"sharp": "0.34.5"
|
|
126
124
|
}
|
|
127
125
|
},
|
|
126
|
+
"node_modules/@appium/support/node_modules/asyncbox": {
|
|
127
|
+
"version": "6.1.0",
|
|
128
|
+
"resolved": "https://registry.npmjs.org/asyncbox/-/asyncbox-6.1.0.tgz",
|
|
129
|
+
"integrity": "sha512-KZwKNVnDdDe0ubN+fFMuHhSljZNHnbjdJABImoqFzQP61oIg6sMlhXIqOIu3WRd7YwW89q+eVj2Ty/Ax5dbh2Q==",
|
|
130
|
+
"license": "Apache-2.0",
|
|
131
|
+
"dependencies": {
|
|
132
|
+
"p-limit": "^7.2.0"
|
|
133
|
+
},
|
|
134
|
+
"engines": {
|
|
135
|
+
"node": "^20.19.0 || ^22.12.0 || >=24.0.0",
|
|
136
|
+
"npm": ">=10"
|
|
137
|
+
}
|
|
138
|
+
},
|
|
128
139
|
"node_modules/@appium/support/node_modules/axios": {
|
|
129
140
|
"version": "1.15.0",
|
|
130
141
|
"resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz",
|
|
@@ -436,15 +447,14 @@
|
|
|
436
447
|
}
|
|
437
448
|
},
|
|
438
449
|
"node_modules/appium-adb": {
|
|
439
|
-
"version": "14.3.
|
|
440
|
-
"resolved": "https://registry.npmjs.org/appium-adb/-/appium-adb-14.3.
|
|
441
|
-
"integrity": "sha512-
|
|
450
|
+
"version": "14.3.4",
|
|
451
|
+
"resolved": "https://registry.npmjs.org/appium-adb/-/appium-adb-14.3.4.tgz",
|
|
452
|
+
"integrity": "sha512-vjxKXP4JIAEKAmKh4dQF1E434JV5cec03n8aUNP3t+TFdw43rVQxbvbQ0fZ0ztaVl9/qWJsWjp6UA6OMwyciLQ==",
|
|
442
453
|
"license": "Apache-2.0",
|
|
443
454
|
"dependencies": {
|
|
444
455
|
"@appium/support": "^7.0.0-rc.1",
|
|
445
456
|
"async-lock": "^1.0.0",
|
|
446
457
|
"asyncbox": "^6.0.1",
|
|
447
|
-
"bluebird": "^3.4.7",
|
|
448
458
|
"ini": "^6.0.0",
|
|
449
459
|
"lodash": "^4.0.0",
|
|
450
460
|
"lru-cache": "^11.1.0",
|
|
@@ -579,9 +589,9 @@
|
|
|
579
589
|
"license": "MIT"
|
|
580
590
|
},
|
|
581
591
|
"node_modules/asyncbox": {
|
|
582
|
-
"version": "6.
|
|
583
|
-
"resolved": "https://registry.npmjs.org/asyncbox/-/asyncbox-6.
|
|
584
|
-
"integrity": "sha512-
|
|
592
|
+
"version": "6.2.0",
|
|
593
|
+
"resolved": "https://registry.npmjs.org/asyncbox/-/asyncbox-6.2.0.tgz",
|
|
594
|
+
"integrity": "sha512-z1XpHkoT3y+1aXfazEY5d7HN2eOi50fLq7ZTxG0H4WegLxrtEAI5Vsc6OR9dOwoC3SJQLXyV0ZVnPEh6GIgMKQ==",
|
|
585
595
|
"license": "Apache-2.0",
|
|
586
596
|
"dependencies": {
|
|
587
597
|
"p-limit": "^7.2.0"
|
|
@@ -598,12 +608,12 @@
|
|
|
598
608
|
"license": "MIT"
|
|
599
609
|
},
|
|
600
610
|
"node_modules/axios": {
|
|
601
|
-
"version": "1.
|
|
602
|
-
"resolved": "https://registry.npmjs.org/axios/-/axios-1.
|
|
603
|
-
"integrity": "sha512-
|
|
611
|
+
"version": "1.16.0",
|
|
612
|
+
"resolved": "https://registry.npmjs.org/axios/-/axios-1.16.0.tgz",
|
|
613
|
+
"integrity": "sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==",
|
|
604
614
|
"license": "MIT",
|
|
605
615
|
"dependencies": {
|
|
606
|
-
"follow-redirects": "^1.
|
|
616
|
+
"follow-redirects": "^1.16.0",
|
|
607
617
|
"form-data": "^4.0.5",
|
|
608
618
|
"proxy-from-env": "^2.1.0"
|
|
609
619
|
}
|
|
@@ -667,9 +677,9 @@
|
|
|
667
677
|
}
|
|
668
678
|
},
|
|
669
679
|
"node_modules/bare-os": {
|
|
670
|
-
"version": "3.9.
|
|
671
|
-
"resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.9.
|
|
672
|
-
"integrity": "sha512-
|
|
680
|
+
"version": "3.9.1",
|
|
681
|
+
"resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.9.1.tgz",
|
|
682
|
+
"integrity": "sha512-6M5XjcnsygQNPMCMPXSK379xrJFiZ/AEMNBmFEmQW8d/789VQATvriyi5r0HYTL9TkQ26rn3kgdTG3aisbrXkQ==",
|
|
673
683
|
"license": "Apache-2.0",
|
|
674
684
|
"engines": {
|
|
675
685
|
"bare": ">=1.14.0"
|
|
@@ -1524,9 +1534,9 @@
|
|
|
1524
1534
|
}
|
|
1525
1535
|
},
|
|
1526
1536
|
"node_modules/hosted-git-info": {
|
|
1527
|
-
"version": "9.0.
|
|
1528
|
-
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.
|
|
1529
|
-
"integrity": "sha512-
|
|
1537
|
+
"version": "9.0.3",
|
|
1538
|
+
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.3.tgz",
|
|
1539
|
+
"integrity": "sha512-Hc+ghLoSt6QaYZUv0WBiIvmMDZuZZ7oaDvdH8MbfOO4lOsxdXLEvuC6ePoGs9H1X9oCLyq6+NVN0MKqD+ydxyg==",
|
|
1530
1540
|
"license": "ISC",
|
|
1531
1541
|
"dependencies": {
|
|
1532
1542
|
"lru-cache": "^11.1.0"
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"seamonkey",
|
|
8
8
|
"firefox"
|
|
9
9
|
],
|
|
10
|
-
"version": "2.2.
|
|
10
|
+
"version": "2.2.3",
|
|
11
11
|
"author": "Appium Contributors",
|
|
12
12
|
"license": "Apache-2.0",
|
|
13
13
|
"repository": {
|
|
@@ -62,7 +62,6 @@
|
|
|
62
62
|
"asyncbox": "^6.0.1",
|
|
63
63
|
"axios": "^1.7.7",
|
|
64
64
|
"bluebird": "^3.5.1",
|
|
65
|
-
"lodash": "^4.17.4",
|
|
66
65
|
"portscanner": "2.2.0",
|
|
67
66
|
"semver": "^7.6.3",
|
|
68
67
|
"tar-stream": "^3.1.7",
|
|
@@ -88,7 +87,6 @@
|
|
|
88
87
|
"@semantic-release/changelog": "^6.0.1",
|
|
89
88
|
"@semantic-release/git": "^10.0.1",
|
|
90
89
|
"@types/bluebird": "^3.5.38",
|
|
91
|
-
"@types/lodash": "^4.14.196",
|
|
92
90
|
"@types/mocha": "^10.0.1",
|
|
93
91
|
"@types/node": "^25.0.0",
|
|
94
92
|
"chai": "^6.0.0",
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
2
|
import * as semver from 'semver';
|
|
3
|
-
import _ from 'lodash';
|
|
4
3
|
import path from 'node:path';
|
|
5
4
|
import { tmpdir } from 'node:os';
|
|
6
5
|
import { log } from '../build/lib/logger.js';
|
|
@@ -21,7 +20,8 @@ const API_TIMEOUT_MS = 45 * 1000;
|
|
|
21
20
|
const STABLE_VERSION = 'stable';
|
|
22
21
|
const EXT_TAR_GZ = '.tar.gz';
|
|
23
22
|
const EXT_ZIP = '.zip';
|
|
24
|
-
const
|
|
23
|
+
const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
24
|
+
const EXT_REGEXP = new RegExp(`(${escapeRegExp(EXT_TAR_GZ)}|${escapeRegExp(EXT_ZIP)})$`);
|
|
25
25
|
const ARCHIVE_NAME_PREFIX = 'geckodriver-v';
|
|
26
26
|
const ARCH_MAPPING = Object.freeze({
|
|
27
27
|
ia32: '32',
|
|
@@ -56,7 +56,7 @@ function parseNextPageUrl(headers) {
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
for (const part of headers.link.split(';')) {
|
|
59
|
-
const [rel, pageUrl] = part.split(',').map(
|
|
59
|
+
const [rel, pageUrl] = part.split(',').map((item) => item.trim());
|
|
60
60
|
if (rel === 'rel="next"' && pageUrl) {
|
|
61
61
|
return pageUrl.replace(/^<|>$/g, '');
|
|
62
62
|
}
|
|
@@ -123,8 +123,8 @@ async function listReleases() {
|
|
|
123
123
|
const assetName = asset?.name;
|
|
124
124
|
const downloadUrl = asset?.browser_download_url;
|
|
125
125
|
if (
|
|
126
|
-
!
|
|
127
|
-
|| !(
|
|
126
|
+
!assetName?.startsWith(ARCHIVE_NAME_PREFIX)
|
|
127
|
+
|| !(assetName?.endsWith(EXT_TAR_GZ) || assetName?.endsWith(EXT_ZIP))
|
|
128
128
|
|| !downloadUrl
|
|
129
129
|
) {
|
|
130
130
|
continue;
|
|
@@ -154,7 +154,7 @@ function selectRelease(releases, version) {
|
|
|
154
154
|
const stableReleasesAsc = releases
|
|
155
155
|
.filter(({isDraft, isPrerelease}) => !isDraft && !isPrerelease)
|
|
156
156
|
.toSorted((a, b) => a.version.compare(b.version));
|
|
157
|
-
const dstRelease =
|
|
157
|
+
const dstRelease = stableReleasesAsc.at(-1);
|
|
158
158
|
if (!dstRelease) {
|
|
159
159
|
throw new Error(`Cannot find any stable GeckoDriver release: ${JSON.stringify(releases)}`);
|
|
160
160
|
}
|
|
@@ -180,7 +180,7 @@ function selectRelease(releases, version) {
|
|
|
180
180
|
* @returns {ReleaseAsset}
|
|
181
181
|
*/
|
|
182
182
|
function selectAsset(release) {
|
|
183
|
-
if (
|
|
183
|
+
if (release.assets.length === 0) {
|
|
184
184
|
throw new Error(`GeckoDriver v${release.version} does not contain any matching releases`);
|
|
185
185
|
}
|
|
186
186
|
const dstPlatform = PLATFORM_MAPPING[process.platform];
|
|
@@ -189,7 +189,7 @@ function selectAsset(release) {
|
|
|
189
189
|
/** @type {(filterFunc: (string) => boolean) => null|ReleaseAsset} */
|
|
190
190
|
const findAssetMatch = (filterFunc) => {
|
|
191
191
|
for (const asset of release.assets) {
|
|
192
|
-
if (!dstPlatform || !
|
|
192
|
+
if (!dstPlatform || !asset.name.includes(`-${dstPlatform}`)) {
|
|
193
193
|
continue;
|
|
194
194
|
}
|
|
195
195
|
const nameWoExt = asset.name.replace(EXT_REGEXP, '');
|
|
@@ -203,8 +203,8 @@ function selectAsset(release) {
|
|
|
203
203
|
// Try to find an exact match
|
|
204
204
|
const exactMatch = findAssetMatch(
|
|
205
205
|
(nameWoExt) =>
|
|
206
|
-
(dstArch === 'aarch64' &&
|
|
207
|
-
|| (['64', '32'].includes(dstArch) &&
|
|
206
|
+
(dstArch === 'aarch64' && nameWoExt.endsWith(`-${dstArch}`))
|
|
207
|
+
|| (['64', '32'].includes(dstArch) && nameWoExt.endsWith(`-${dstPlatform}${dstArch}`))
|
|
208
208
|
);
|
|
209
209
|
if (exactMatch) {
|
|
210
210
|
return exactMatch;
|
|
@@ -212,8 +212,8 @@ function selectAsset(release) {
|
|
|
212
212
|
// If no exact match has been been found then try a loose one
|
|
213
213
|
const looseMatch = findAssetMatch(
|
|
214
214
|
(nameWoExt) =>
|
|
215
|
-
|
|
216
|
-
|| (dstArch === '64' &&
|
|
215
|
+
nameWoExt.endsWith(`-${dstPlatform}`)
|
|
216
|
+
|| (dstArch === '64' && nameWoExt.endsWith(`-${dstPlatform}32`))
|
|
217
217
|
);
|
|
218
218
|
if (looseMatch) {
|
|
219
219
|
return looseMatch;
|