webdriver 9.9.1 → 9.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bidi/core.d.ts.map +1 -1
- package/build/command.d.ts.map +1 -1
- package/build/index.js +92 -7
- package/build/node.js +92 -7
- package/build/request/polyfill.d.ts +2 -0
- package/build/request/polyfill.d.ts.map +1 -0
- package/build/request/request.d.ts +3 -1
- package/build/request/request.d.ts.map +1 -1
- package/build/types.d.ts +15 -13
- package/build/types.d.ts.map +1 -1
- package/package.json +5 -5
package/build/bidi/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/bidi/core.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAI3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,iBAAiB,CAAA;AAErE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/bidi/core.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAI3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,iBAAiB,CAAA;AAErE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AASzC,qBAAa,QAAQ;;IAOjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B;;OAEG;IACH,OAAO,CAAC,YAAY,CAAQ;gBAEf,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa;IAOvD;;;;OAIG;IACI,YAAY,CAAE,MAAM,EAAE,MAAM;IAItB,OAAO;IAyBb,KAAK;IAYL,SAAS,CAAE,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa;IAS5D;;;OAGG;IACH,gBAAgB;IAIhB,IAAI,MAAM,cAET;IAED,IAAI,WAAW,YAEd;IAED;;;OAGG;IACH,IAAI,gBAAgB,WAIG,OAAO,UAF7B;IAqCY,IAAI,CAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IA+BtE,SAAS,CAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;CAWpD;AAED,wBAAgB,gBAAgB,CAAE,MAAM,EAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAwCjE"}
|
package/build/command.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAI7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAgB,aAAa,
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAI7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAgB,aAAa,EAAwB,MAAM,YAAY,CAAA;AAM/F,MAAM,CAAC,OAAO,WACV,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,eAAe,EAC5B,qBAAqB,UAAQ,UAIgB,UAAU,WAAW,OAAO,EAAE,KAAG,OAAO,CAAC,iBAAiB,GAAG,aAAa,GAAG,IAAI,CAAC,CAkMlI"}
|
package/build/index.js
CHANGED
|
@@ -47,6 +47,7 @@ var environment = {
|
|
|
47
47
|
// src/command.ts
|
|
48
48
|
var log = logger("webdriver");
|
|
49
49
|
var BIDI_COMMANDS = Object.values(WebDriverBidiProtocol).map((def) => def.socket.command);
|
|
50
|
+
var sessionAbortListeners = /* @__PURE__ */ new Map();
|
|
50
51
|
function command_default(method, endpointUri, commandInfo, doubleEncodeVariables = false) {
|
|
51
52
|
const { command, deprecated, ref, parameters, variables = [], isHubCommand = false } = commandInfo;
|
|
52
53
|
return async function protocolCommand(...args) {
|
|
@@ -103,7 +104,12 @@ function command_default(method, endpointUri, commandInfo, doubleEncodeVariables
|
|
|
103
104
|
}
|
|
104
105
|
body[commandParams[i].name] = arg;
|
|
105
106
|
}
|
|
106
|
-
const
|
|
107
|
+
const { isAborted, abortSignal, cleanup } = manageSessionAbortions.call(this);
|
|
108
|
+
const requiresSession = endpointUri.includes("/:sessionId/");
|
|
109
|
+
if (isAborted && command !== "deleteSession" && requiresSession) {
|
|
110
|
+
throw new Error('Trying to run command "'.concat(commandCallStructure(command, args), '" after session has been deleted, aborting request without executing it'));
|
|
111
|
+
}
|
|
112
|
+
const request = new environment.value.Request(method, endpoint, body, abortSignal, isHubCommand, {
|
|
107
113
|
onPerformance: (data) => this.emit("request.performance", data),
|
|
108
114
|
onRequest: (data) => this.emit("request.start", data),
|
|
109
115
|
onResponse: (data) => this.emit("request.end", data),
|
|
@@ -153,9 +159,42 @@ function command_default(method, endpointUri, commandInfo, doubleEncodeVariables
|
|
|
153
159
|
}).catch((error) => {
|
|
154
160
|
this.emit("result", { command, method, endpoint, body, result: { error } });
|
|
155
161
|
throw error;
|
|
162
|
+
}).finally(() => {
|
|
163
|
+
cleanup();
|
|
156
164
|
});
|
|
157
165
|
};
|
|
158
166
|
}
|
|
167
|
+
function manageSessionAbortions() {
|
|
168
|
+
const abort = new AbortController();
|
|
169
|
+
let abortListenerForCurrentSession = sessionAbortListeners.get(this.sessionId);
|
|
170
|
+
if (typeof abortListenerForCurrentSession === "undefined") {
|
|
171
|
+
abortListenerForCurrentSession = /* @__PURE__ */ new Set();
|
|
172
|
+
sessionAbortListeners.set(this.sessionId, abortListenerForCurrentSession);
|
|
173
|
+
}
|
|
174
|
+
if (abortListenerForCurrentSession === null) {
|
|
175
|
+
return { isAborted: true, abortSignal: void 0, cleanup: () => {
|
|
176
|
+
} };
|
|
177
|
+
}
|
|
178
|
+
abortListenerForCurrentSession.add(abort);
|
|
179
|
+
const abortOnSessionEnd = (result) => {
|
|
180
|
+
if (result.command === "deleteSession") {
|
|
181
|
+
for (const abortListener of abortListenerForCurrentSession) {
|
|
182
|
+
abortListener.abort();
|
|
183
|
+
}
|
|
184
|
+
abortListenerForCurrentSession.clear();
|
|
185
|
+
sessionAbortListeners.set(this.sessionId, null);
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
this.on("result", abortOnSessionEnd);
|
|
189
|
+
return {
|
|
190
|
+
isAborted: false,
|
|
191
|
+
abortSignal: abort.signal,
|
|
192
|
+
cleanup: () => {
|
|
193
|
+
this.off("result", abortOnSessionEnd);
|
|
194
|
+
abortListenerForCurrentSession == null ? void 0 : abortListenerForCurrentSession.delete(abort);
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
}
|
|
159
198
|
|
|
160
199
|
// src/constants.ts
|
|
161
200
|
var DEFAULTS = {
|
|
@@ -319,6 +358,7 @@ import { CAPABILITY_KEYS } from "@wdio/protocols";
|
|
|
319
358
|
import logger2 from "@wdio/logger";
|
|
320
359
|
var SCRIPT_PREFIX = "/* __wdio script__ */";
|
|
321
360
|
var SCRIPT_SUFFIX = "/* __wdio script end__ */";
|
|
361
|
+
var base64Regex = /^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$/;
|
|
322
362
|
var log2 = logger2("webdriver");
|
|
323
363
|
var RESPONSE_TIMEOUT = 1e3 * 60;
|
|
324
364
|
var _id, _ws, _waitForConnected, _webSocketUrl, _pendingCommands, _BidiCore_instances, handleResponse_fn;
|
|
@@ -453,7 +493,14 @@ handleResponse_fn = function(data) {
|
|
|
453
493
|
if (!payload.id) {
|
|
454
494
|
return;
|
|
455
495
|
}
|
|
456
|
-
|
|
496
|
+
let resultLog = data.toString();
|
|
497
|
+
if (typeof payload.result === "object" && payload.result && "data" in payload.result && typeof payload.result.data === "string" && base64Regex.test(payload.result.data)) {
|
|
498
|
+
resultLog = JSON.stringify({
|
|
499
|
+
...payload.result,
|
|
500
|
+
data: "Base64 string [".concat(payload.result.data.length, " chars]")
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
log2.info("BIDI RESULT", resultLog);
|
|
457
504
|
(_a = this.client) == null ? void 0 : _a.emit("bidiResult", payload);
|
|
458
505
|
const resolve = __privateGet(this, _pendingCommands).get(payload.id);
|
|
459
506
|
if (!resolve) {
|
|
@@ -1062,7 +1109,7 @@ async function startWebDriverSession(params) {
|
|
|
1062
1109
|
} catch (err) {
|
|
1063
1110
|
log3.error(err);
|
|
1064
1111
|
const message = getSessionError(err, params);
|
|
1065
|
-
throw new Error(
|
|
1112
|
+
throw new Error(message);
|
|
1066
1113
|
}
|
|
1067
1114
|
const sessionId = response.value.sessionId || response.sessionId;
|
|
1068
1115
|
params.capabilities = response.value.capabilities || response.value;
|
|
@@ -1579,7 +1626,7 @@ var WebDriverResponseError = class _WebDriverResponseError extends WebDriverErro
|
|
|
1579
1626
|
// package.json
|
|
1580
1627
|
var package_default = {
|
|
1581
1628
|
name: "webdriver",
|
|
1582
|
-
version: "9.
|
|
1629
|
+
version: "9.10.1",
|
|
1583
1630
|
description: "A Node.js bindings implementation for the W3C WebDriver and Mobile JSONWire Protocol",
|
|
1584
1631
|
author: "Christian Bromann <mail@bromann.dev>",
|
|
1585
1632
|
homepage: "https://github.com/webdriverio/webdriverio/tree/main/packages/webdriver",
|
|
@@ -1628,6 +1675,39 @@ var package_default = {
|
|
|
1628
1675
|
}
|
|
1629
1676
|
};
|
|
1630
1677
|
|
|
1678
|
+
// src/request/polyfill.ts
|
|
1679
|
+
if (!AbortSignal.any) {
|
|
1680
|
+
AbortSignal.any = function(signals) {
|
|
1681
|
+
if (!signals || !Array.isArray(signals)) {
|
|
1682
|
+
throw new TypeError("AbortSignal.any requires an array of AbortSignal objects");
|
|
1683
|
+
}
|
|
1684
|
+
const controller = new AbortController();
|
|
1685
|
+
if (signals.some((signal) => signal.aborted)) {
|
|
1686
|
+
controller.abort();
|
|
1687
|
+
return controller.signal;
|
|
1688
|
+
}
|
|
1689
|
+
const listeners = signals.map((signal) => {
|
|
1690
|
+
const listener = () => {
|
|
1691
|
+
if ("reason" in signal && signal.reason !== void 0) {
|
|
1692
|
+
controller.abort(signal.reason);
|
|
1693
|
+
} else {
|
|
1694
|
+
controller.abort();
|
|
1695
|
+
}
|
|
1696
|
+
cleanup();
|
|
1697
|
+
};
|
|
1698
|
+
signal.addEventListener("abort", listener);
|
|
1699
|
+
return { signal, listener };
|
|
1700
|
+
});
|
|
1701
|
+
const cleanup = () => {
|
|
1702
|
+
listeners.forEach(({ signal, listener }) => {
|
|
1703
|
+
signal.removeEventListener("abort", listener);
|
|
1704
|
+
});
|
|
1705
|
+
};
|
|
1706
|
+
controller.signal.addEventListener("abort", cleanup);
|
|
1707
|
+
return controller.signal;
|
|
1708
|
+
};
|
|
1709
|
+
}
|
|
1710
|
+
|
|
1631
1711
|
// src/request/request.ts
|
|
1632
1712
|
var ERRORS_TO_EXCLUDE_FROM_RETRY = [
|
|
1633
1713
|
"detached shadow root",
|
|
@@ -1641,19 +1721,21 @@ var DEFAULT_HEADERS = {
|
|
|
1641
1721
|
};
|
|
1642
1722
|
var log5 = logger5("webdriver");
|
|
1643
1723
|
var WebDriverRequest = class {
|
|
1644
|
-
constructor(method, endpoint, body, isHubCommand = false, eventHandler = {}) {
|
|
1724
|
+
constructor(method, endpoint, body, abortSignal, isHubCommand = false, eventHandler = {}) {
|
|
1645
1725
|
__publicField(this, "body");
|
|
1646
1726
|
__publicField(this, "method");
|
|
1647
1727
|
__publicField(this, "endpoint");
|
|
1648
1728
|
__publicField(this, "isHubCommand");
|
|
1649
1729
|
__publicField(this, "requiresSessionId");
|
|
1650
1730
|
__publicField(this, "eventHandler");
|
|
1731
|
+
__publicField(this, "abortSignal");
|
|
1651
1732
|
this.body = body;
|
|
1652
1733
|
this.method = method;
|
|
1653
1734
|
this.endpoint = endpoint;
|
|
1654
1735
|
this.isHubCommand = isHubCommand;
|
|
1655
1736
|
this.requiresSessionId = Boolean(this.endpoint.match(/:sessionId/));
|
|
1656
1737
|
this.eventHandler = eventHandler;
|
|
1738
|
+
this.abortSignal = abortSignal;
|
|
1657
1739
|
}
|
|
1658
1740
|
async makeRequest(options, sessionId) {
|
|
1659
1741
|
var _a, _b;
|
|
@@ -1666,7 +1748,10 @@ var WebDriverRequest = class {
|
|
|
1666
1748
|
const requestOptions = {
|
|
1667
1749
|
method: this.method,
|
|
1668
1750
|
redirect: "follow",
|
|
1669
|
-
signal: AbortSignal.
|
|
1751
|
+
signal: AbortSignal.any([
|
|
1752
|
+
AbortSignal.timeout(timeout),
|
|
1753
|
+
...this.abortSignal ? [this.abortSignal] : []
|
|
1754
|
+
])
|
|
1670
1755
|
};
|
|
1671
1756
|
const requestHeaders = new Headers({
|
|
1672
1757
|
...DEFAULT_HEADERS,
|
|
@@ -1754,7 +1839,7 @@ var WebDriverRequest = class {
|
|
|
1754
1839
|
};
|
|
1755
1840
|
if (response instanceof Error) {
|
|
1756
1841
|
const resError = response;
|
|
1757
|
-
if (resError.code && RETRYABLE_ERROR_CODES.includes(resError.code) || resError.statusCode && RETRYABLE_STATUS_CODES.includes(resError.statusCode)) {
|
|
1842
|
+
if (!(this.abortSignal && this.abortSignal.aborted) && (resError.code && RETRYABLE_ERROR_CODES.includes(resError.code) || resError.statusCode && RETRYABLE_STATUS_CODES.includes(resError.statusCode))) {
|
|
1758
1843
|
return retry(resError);
|
|
1759
1844
|
}
|
|
1760
1845
|
(_b = (_a = this.eventHandler).onPerformance) == null ? void 0 : _b.call(_a, { request: fullRequestOptions, durationMillisecond, success: false, error: response, retryCount });
|
package/build/node.js
CHANGED
|
@@ -31,6 +31,7 @@ var environment = {
|
|
|
31
31
|
// src/command.ts
|
|
32
32
|
var log = logger("webdriver");
|
|
33
33
|
var BIDI_COMMANDS = Object.values(WebDriverBidiProtocol).map((def) => def.socket.command);
|
|
34
|
+
var sessionAbortListeners = /* @__PURE__ */ new Map();
|
|
34
35
|
function command_default(method, endpointUri, commandInfo, doubleEncodeVariables = false) {
|
|
35
36
|
const { command, deprecated, ref, parameters, variables = [], isHubCommand = false } = commandInfo;
|
|
36
37
|
return async function protocolCommand(...args) {
|
|
@@ -96,7 +97,12 @@ Actual: ${actual}` + moreInfo
|
|
|
96
97
|
}
|
|
97
98
|
body[commandParams[i].name] = arg;
|
|
98
99
|
}
|
|
99
|
-
const
|
|
100
|
+
const { isAborted, abortSignal, cleanup } = manageSessionAbortions.call(this);
|
|
101
|
+
const requiresSession = endpointUri.includes("/:sessionId/");
|
|
102
|
+
if (isAborted && command !== "deleteSession" && requiresSession) {
|
|
103
|
+
throw new Error(`Trying to run command "${commandCallStructure(command, args)}" after session has been deleted, aborting request without executing it`);
|
|
104
|
+
}
|
|
105
|
+
const request = new environment.value.Request(method, endpoint, body, abortSignal, isHubCommand, {
|
|
100
106
|
onPerformance: (data) => this.emit("request.performance", data),
|
|
101
107
|
onRequest: (data) => this.emit("request.start", data),
|
|
102
108
|
onResponse: (data) => this.emit("request.end", data),
|
|
@@ -145,9 +151,42 @@ Actual: ${actual}` + moreInfo
|
|
|
145
151
|
}).catch((error) => {
|
|
146
152
|
this.emit("result", { command, method, endpoint, body, result: { error } });
|
|
147
153
|
throw error;
|
|
154
|
+
}).finally(() => {
|
|
155
|
+
cleanup();
|
|
148
156
|
});
|
|
149
157
|
};
|
|
150
158
|
}
|
|
159
|
+
function manageSessionAbortions() {
|
|
160
|
+
const abort = new AbortController();
|
|
161
|
+
let abortListenerForCurrentSession = sessionAbortListeners.get(this.sessionId);
|
|
162
|
+
if (typeof abortListenerForCurrentSession === "undefined") {
|
|
163
|
+
abortListenerForCurrentSession = /* @__PURE__ */ new Set();
|
|
164
|
+
sessionAbortListeners.set(this.sessionId, abortListenerForCurrentSession);
|
|
165
|
+
}
|
|
166
|
+
if (abortListenerForCurrentSession === null) {
|
|
167
|
+
return { isAborted: true, abortSignal: void 0, cleanup: () => {
|
|
168
|
+
} };
|
|
169
|
+
}
|
|
170
|
+
abortListenerForCurrentSession.add(abort);
|
|
171
|
+
const abortOnSessionEnd = (result) => {
|
|
172
|
+
if (result.command === "deleteSession") {
|
|
173
|
+
for (const abortListener of abortListenerForCurrentSession) {
|
|
174
|
+
abortListener.abort();
|
|
175
|
+
}
|
|
176
|
+
abortListenerForCurrentSession.clear();
|
|
177
|
+
sessionAbortListeners.set(this.sessionId, null);
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
this.on("result", abortOnSessionEnd);
|
|
181
|
+
return {
|
|
182
|
+
isAborted: false,
|
|
183
|
+
abortSignal: abort.signal,
|
|
184
|
+
cleanup: () => {
|
|
185
|
+
this.off("result", abortOnSessionEnd);
|
|
186
|
+
abortListenerForCurrentSession?.delete(abort);
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
}
|
|
151
190
|
|
|
152
191
|
// src/constants.ts
|
|
153
192
|
var DEFAULTS = {
|
|
@@ -311,6 +350,7 @@ import { CAPABILITY_KEYS } from "@wdio/protocols";
|
|
|
311
350
|
import logger2 from "@wdio/logger";
|
|
312
351
|
var SCRIPT_PREFIX = "/* __wdio script__ */";
|
|
313
352
|
var SCRIPT_SUFFIX = "/* __wdio script end__ */";
|
|
353
|
+
var base64Regex = /^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$/;
|
|
314
354
|
var log2 = logger2("webdriver");
|
|
315
355
|
var RESPONSE_TIMEOUT = 1e3 * 60;
|
|
316
356
|
var BidiCore = class {
|
|
@@ -401,7 +441,14 @@ var BidiCore = class {
|
|
|
401
441
|
if (!payload.id) {
|
|
402
442
|
return;
|
|
403
443
|
}
|
|
404
|
-
|
|
444
|
+
let resultLog = data.toString();
|
|
445
|
+
if (typeof payload.result === "object" && payload.result && "data" in payload.result && typeof payload.result.data === "string" && base64Regex.test(payload.result.data)) {
|
|
446
|
+
resultLog = JSON.stringify({
|
|
447
|
+
...payload.result,
|
|
448
|
+
data: `Base64 string [${payload.result.data.length} chars]`
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
log2.info("BIDI RESULT", resultLog);
|
|
405
452
|
this.client?.emit("bidiResult", payload);
|
|
406
453
|
const resolve = this.#pendingCommands.get(payload.id);
|
|
407
454
|
if (!resolve) {
|
|
@@ -1047,7 +1094,7 @@ async function startWebDriverSession(params) {
|
|
|
1047
1094
|
} catch (err) {
|
|
1048
1095
|
log3.error(err);
|
|
1049
1096
|
const message = getSessionError(err, params);
|
|
1050
|
-
throw new Error(
|
|
1097
|
+
throw new Error(message);
|
|
1051
1098
|
}
|
|
1052
1099
|
const sessionId = response.value.sessionId || response.sessionId;
|
|
1053
1100
|
params.capabilities = response.value.capabilities || response.value;
|
|
@@ -1518,7 +1565,7 @@ var WebDriverResponseError = class _WebDriverResponseError extends WebDriverErro
|
|
|
1518
1565
|
// package.json
|
|
1519
1566
|
var package_default = {
|
|
1520
1567
|
name: "webdriver",
|
|
1521
|
-
version: "9.
|
|
1568
|
+
version: "9.10.1",
|
|
1522
1569
|
description: "A Node.js bindings implementation for the W3C WebDriver and Mobile JSONWire Protocol",
|
|
1523
1570
|
author: "Christian Bromann <mail@bromann.dev>",
|
|
1524
1571
|
homepage: "https://github.com/webdriverio/webdriverio/tree/main/packages/webdriver",
|
|
@@ -1567,6 +1614,39 @@ var package_default = {
|
|
|
1567
1614
|
}
|
|
1568
1615
|
};
|
|
1569
1616
|
|
|
1617
|
+
// src/request/polyfill.ts
|
|
1618
|
+
if (!AbortSignal.any) {
|
|
1619
|
+
AbortSignal.any = function(signals) {
|
|
1620
|
+
if (!signals || !Array.isArray(signals)) {
|
|
1621
|
+
throw new TypeError("AbortSignal.any requires an array of AbortSignal objects");
|
|
1622
|
+
}
|
|
1623
|
+
const controller = new AbortController();
|
|
1624
|
+
if (signals.some((signal) => signal.aborted)) {
|
|
1625
|
+
controller.abort();
|
|
1626
|
+
return controller.signal;
|
|
1627
|
+
}
|
|
1628
|
+
const listeners = signals.map((signal) => {
|
|
1629
|
+
const listener = () => {
|
|
1630
|
+
if ("reason" in signal && signal.reason !== void 0) {
|
|
1631
|
+
controller.abort(signal.reason);
|
|
1632
|
+
} else {
|
|
1633
|
+
controller.abort();
|
|
1634
|
+
}
|
|
1635
|
+
cleanup();
|
|
1636
|
+
};
|
|
1637
|
+
signal.addEventListener("abort", listener);
|
|
1638
|
+
return { signal, listener };
|
|
1639
|
+
});
|
|
1640
|
+
const cleanup = () => {
|
|
1641
|
+
listeners.forEach(({ signal, listener }) => {
|
|
1642
|
+
signal.removeEventListener("abort", listener);
|
|
1643
|
+
});
|
|
1644
|
+
};
|
|
1645
|
+
controller.signal.addEventListener("abort", cleanup);
|
|
1646
|
+
return controller.signal;
|
|
1647
|
+
};
|
|
1648
|
+
}
|
|
1649
|
+
|
|
1570
1650
|
// src/request/request.ts
|
|
1571
1651
|
var ERRORS_TO_EXCLUDE_FROM_RETRY = [
|
|
1572
1652
|
"detached shadow root",
|
|
@@ -1586,13 +1666,15 @@ var WebDriverRequest = class {
|
|
|
1586
1666
|
isHubCommand;
|
|
1587
1667
|
requiresSessionId;
|
|
1588
1668
|
eventHandler;
|
|
1589
|
-
|
|
1669
|
+
abortSignal;
|
|
1670
|
+
constructor(method, endpoint, body, abortSignal, isHubCommand = false, eventHandler = {}) {
|
|
1590
1671
|
this.body = body;
|
|
1591
1672
|
this.method = method;
|
|
1592
1673
|
this.endpoint = endpoint;
|
|
1593
1674
|
this.isHubCommand = isHubCommand;
|
|
1594
1675
|
this.requiresSessionId = Boolean(this.endpoint.match(/:sessionId/));
|
|
1595
1676
|
this.eventHandler = eventHandler;
|
|
1677
|
+
this.abortSignal = abortSignal;
|
|
1596
1678
|
}
|
|
1597
1679
|
async makeRequest(options, sessionId) {
|
|
1598
1680
|
const { url, requestOptions } = await this.createOptions(options, sessionId);
|
|
@@ -1604,7 +1686,10 @@ var WebDriverRequest = class {
|
|
|
1604
1686
|
const requestOptions = {
|
|
1605
1687
|
method: this.method,
|
|
1606
1688
|
redirect: "follow",
|
|
1607
|
-
signal: AbortSignal.
|
|
1689
|
+
signal: AbortSignal.any([
|
|
1690
|
+
AbortSignal.timeout(timeout),
|
|
1691
|
+
...this.abortSignal ? [this.abortSignal] : []
|
|
1692
|
+
])
|
|
1608
1693
|
};
|
|
1609
1694
|
const requestHeaders = new Headers({
|
|
1610
1695
|
...DEFAULT_HEADERS,
|
|
@@ -1689,7 +1774,7 @@ var WebDriverRequest = class {
|
|
|
1689
1774
|
};
|
|
1690
1775
|
if (response instanceof Error) {
|
|
1691
1776
|
const resError = response;
|
|
1692
|
-
if (resError.code && RETRYABLE_ERROR_CODES.includes(resError.code) || resError.statusCode && RETRYABLE_STATUS_CODES.includes(resError.statusCode)) {
|
|
1777
|
+
if (!(this.abortSignal && this.abortSignal.aborted) && (resError.code && RETRYABLE_ERROR_CODES.includes(resError.code) || resError.statusCode && RETRYABLE_STATUS_CODES.includes(resError.statusCode))) {
|
|
1693
1778
|
return retry(resError);
|
|
1694
1779
|
}
|
|
1695
1780
|
this.eventHandler.onPerformance?.({ request: fullRequestOptions, durationMillisecond, success: false, error: response, retryCount });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polyfill.d.ts","sourceRoot":"","sources":["../../src/request/polyfill.ts"],"names":[],"mappings":""}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Options } from '@wdio/types';
|
|
2
2
|
import type { WebDriverResponse, RequestLibResponse, RequestOptions, RequestEventHandler } from './types.js';
|
|
3
|
+
import './polyfill.js';
|
|
3
4
|
export declare abstract class WebDriverRequest {
|
|
4
5
|
protected abstract fetch(url: URL, opts: RequestInit): Promise<Response>;
|
|
5
6
|
body?: Record<string, unknown>;
|
|
@@ -8,7 +9,8 @@ export declare abstract class WebDriverRequest {
|
|
|
8
9
|
isHubCommand: boolean;
|
|
9
10
|
requiresSessionId: boolean;
|
|
10
11
|
eventHandler: RequestEventHandler;
|
|
11
|
-
|
|
12
|
+
abortSignal?: AbortSignal;
|
|
13
|
+
constructor(method: string, endpoint: string, body?: Record<string, unknown>, abortSignal?: AbortSignal, isHubCommand?: boolean, eventHandler?: RequestEventHandler);
|
|
12
14
|
makeRequest(options: RequestOptions, sessionId?: string): Promise<WebDriverResponse<unknown>>;
|
|
13
15
|
createOptions(options: RequestOptions, sessionId?: string, isBrowser?: boolean): Promise<{
|
|
14
16
|
url: URL;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/request/request.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAI1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/request/request.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAI1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAM5G,OAAO,eAAe,CAAA;AAgBtB,8BAAsB,gBAAgB;IAClC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAExE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,OAAO,CAAA;IACrB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,YAAY,EAAE,mBAAmB,CAAA;IACjC,WAAW,CAAC,EAAE,WAAW,CAAA;gBAErB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,WAAW,CAAC,EAAE,WAAW,EACzB,YAAY,GAAE,OAAe,EAC7B,YAAY,GAAE,mBAAwB;IAWpC,WAAW,CAAE,OAAO,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM;IAMxD,aAAa,CAAE,OAAO,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO,CAAC;QAAC,GAAG,EAAE,GAAG,CAAC;QAAC,cAAc,EAAE,WAAW,CAAC;KAAC,CAAC;cA+DhI,WAAW,CAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC;cA8B9E,QAAQ,CACpB,GAAG,EAAE,GAAG,EACR,kBAAkB,EAAE,WAAW,EAC/B,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,KAAK,kBAAkB,EACrG,eAAe,SAAI,EACnB,UAAU,SAAI,GACf,OAAO,CAAC,iBAAiB,CAAC;CA+HhC"}
|
package/build/types.d.ts
CHANGED
|
@@ -34,20 +34,22 @@ export type BidiCommands = WebDriverBidiCommands[keyof WebDriverBidiCommands]['s
|
|
|
34
34
|
export type BidiResponses = ValueOf<ObtainMethods<Pick<BidiHandler, BidiCommands>>>;
|
|
35
35
|
export type RemoteConfig = Options.WebDriver & Capabilities.WithRequestedCapabilities;
|
|
36
36
|
type BidiInterface = ObtainMethods<Pick<BidiHandler, BidiCommands>>;
|
|
37
|
+
export interface WebDriverCommandEvent {
|
|
38
|
+
command: string;
|
|
39
|
+
method: string;
|
|
40
|
+
endpoint: string;
|
|
41
|
+
body: unknown;
|
|
42
|
+
}
|
|
43
|
+
export interface WebDriverResultEvent {
|
|
44
|
+
command: string;
|
|
45
|
+
method: string;
|
|
46
|
+
endpoint: string;
|
|
47
|
+
body: unknown;
|
|
48
|
+
result: unknown;
|
|
49
|
+
}
|
|
37
50
|
type WebDriverClassicEvents = {
|
|
38
|
-
command:
|
|
39
|
-
|
|
40
|
-
method: string;
|
|
41
|
-
endpoint: string;
|
|
42
|
-
body: unknown;
|
|
43
|
-
};
|
|
44
|
-
result: {
|
|
45
|
-
command: string;
|
|
46
|
-
method: string;
|
|
47
|
-
endpoint: string;
|
|
48
|
-
body: unknown;
|
|
49
|
-
result: unknown;
|
|
50
|
-
};
|
|
51
|
+
command: WebDriverCommandEvent;
|
|
52
|
+
result: WebDriverResultEvent;
|
|
51
53
|
bidiCommand: Omit<CommandData, 'id'>;
|
|
52
54
|
bidiResult: CommandResponse;
|
|
53
55
|
'request.performance': RequestPerformanceEvent;
|
package/build/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAE9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAE3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAExH,MAAM,WAAW,kBAAmB,SAAQ,KAAK;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,OAAO,CAAA;IACd,UAAU,EAAE,OAAO,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;IACjB,eAAe,EAAE,OAAO,CAAA;IACxB,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,oBAAoB,EAAE,OAAO,CAAA;IAC7B,MAAM,EAAE,OAAO,CAAA;CAClB;AAED,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAA;AACzC,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AAC5B,KAAK,aAAa,CAAC,CAAC,IAAI;KAAG,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK;CAAE,CAAA;AACxG,KAAK,qBAAqB,GAAG,OAAO,qBAAqB,CAAA;AACzD,MAAM,MAAM,YAAY,GAAG,qBAAqB,CAAC,MAAM,qBAAqB,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAA;AAClG,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;AACnF,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC,yBAAyB,CAAA;AAErF,KAAK,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAA;AACnE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "webdriver",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.11.0",
|
|
4
4
|
"description": "A Node.js bindings implementation for the W3C WebDriver and Mobile JSONWire Protocol",
|
|
5
5
|
"author": "Christian Bromann <mail@bromann.dev>",
|
|
6
6
|
"homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/webdriver",
|
|
@@ -38,14 +38,14 @@
|
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@types/node": "^20.1.0",
|
|
40
40
|
"@types/ws": "^8.5.3",
|
|
41
|
-
"@wdio/config": "9.
|
|
41
|
+
"@wdio/config": "9.11.0",
|
|
42
42
|
"@wdio/logger": "9.4.4",
|
|
43
43
|
"@wdio/protocols": "9.7.0",
|
|
44
|
-
"@wdio/types": "9.
|
|
45
|
-
"@wdio/utils": "9.
|
|
44
|
+
"@wdio/types": "9.10.1",
|
|
45
|
+
"@wdio/utils": "9.11.0",
|
|
46
46
|
"deepmerge-ts": "^7.0.3",
|
|
47
47
|
"undici": "^6.20.1",
|
|
48
48
|
"ws": "^8.8.0"
|
|
49
49
|
},
|
|
50
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "79a39e09a5eeabebac2f068b8d29f0ae4921fa20"
|
|
51
51
|
}
|