webdriver 9.11.0 → 9.12.2
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 +3 -3
- package/build/bidi/core.d.ts.map +1 -1
- package/build/browser.d.ts.map +1 -1
- package/build/environment.d.ts +2 -0
- package/build/environment.d.ts.map +1 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +78 -45
- package/build/node/bidi.d.ts +15 -0
- package/build/node/bidi.d.ts.map +1 -0
- package/build/node.d.ts.map +1 -1
- package/build/node.js +145 -43
- package/build/types.d.ts +2 -0
- package/build/types.d.ts.map +1 -1
- package/build/utils.d.ts +1 -1
- package/build/utils.d.ts.map +1 -1
- package/package.json +6 -6
package/build/bidi/core.d.ts
CHANGED
|
@@ -16,15 +16,15 @@ export declare class BidiCore {
|
|
|
16
16
|
* to the Bidi instance afterwards.
|
|
17
17
|
*/
|
|
18
18
|
attachClient(client: Client): void;
|
|
19
|
-
connect(): Promise<boolean
|
|
19
|
+
connect(): Promise<boolean>;
|
|
20
20
|
close(): void;
|
|
21
|
-
reconnect(webSocketUrl: string, opts?: ClientOptions): Promise<boolean
|
|
21
|
+
reconnect(webSocketUrl: string, opts?: ClientOptions): Promise<boolean>;
|
|
22
22
|
/**
|
|
23
23
|
* Helper function that allows to wait until Bidi connection establishes
|
|
24
24
|
* @returns a promise that resolves once the connection to WebDriver Bidi protocol was established
|
|
25
25
|
*/
|
|
26
26
|
waitForConnected(): Promise<boolean>;
|
|
27
|
-
get socket(): WebSocket;
|
|
27
|
+
get socket(): WebSocket | undefined;
|
|
28
28
|
get isConnected(): boolean;
|
|
29
29
|
/**
|
|
30
30
|
* for testing purposes only
|
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;AASzC,qBAAa,QAAQ;;
|
|
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;;IASjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B;;OAEG;IACH,OAAO,CAAC,YAAY,CAAQ;gBAEf,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa;IASvD;;;;OAIG;IACI,YAAY,CAAE,MAAM,EAAE,MAAM;IAItB,OAAO;IAiBb,KAAK;IAeL,SAAS,CAAE,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa;IAQ5D;;;OAGG;IACH,gBAAgB;IAIhB,IAAI,MAAM,0BAET;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/browser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAGA,OAAO,SAAS,MAAM,YAAY,CAAA;AAIlC,eAAe,SAAS,CAAA;AACxB,cAAc,YAAY,CAAA"}
|
package/build/environment.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type WebSocket from 'ws';
|
|
1
2
|
import type { BrowserSocket } from './bidi/socket.js';
|
|
2
3
|
import type { FetchRequest } from './request/web.js';
|
|
3
4
|
/**
|
|
@@ -11,6 +12,7 @@ export interface EnvironmentVariables {
|
|
|
11
12
|
export interface EnvironmentDependencies {
|
|
12
13
|
Request: typeof FetchRequest;
|
|
13
14
|
Socket: typeof BrowserSocket;
|
|
15
|
+
createBidiConnection: (wsUrl?: string, options?: WebSocket.ClientOptions) => Promise<WebSocket | undefined>;
|
|
14
16
|
variables: EnvironmentVariables;
|
|
15
17
|
}
|
|
16
18
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAEpD;;GAEG;AACH,eAAO,MAAM,MAAM,SAAwD,CAAA;AAE3E,MAAM,WAAW,oBAAoB;IACjC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,uBAAuB;IACpC,OAAO,EAAE,OAAO,YAAY,CAAC;IAC7B,MAAM,EAAE,OAAO,aAAa,CAAC;IAC7B,SAAS,EAAE,oBAAoB,CAAA;CAClC;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE;IACtB,KAAK,EAAE,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,IAAI,CAAA;AAE/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAEpD;;GAEG;AACH,eAAO,MAAM,MAAM,SAAwD,CAAA;AAE3E,MAAM,WAAW,oBAAoB;IACjC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,uBAAuB;IACpC,OAAO,EAAE,OAAO,YAAY,CAAC;IAC7B,MAAM,EAAE,OAAO,aAAa,CAAC;IAC7B,oBAAoB,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,aAAa,KAAK,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAC5G,SAAS,EAAE,oBAAoB,CAAA;CAClC;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE;IACtB,KAAK,EAAE,uBAAuB,CAAC;CAgBlC,CAAA"}
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAW,MAAM,aAAa,CAAA;AAExD,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAyB,YAAY,EAAE,kBAAkB,EAAsB,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACxI,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAgB,MAAM,YAAY,CAAA;AAIrE,MAAM,CAAC,OAAO,OAAO,SAAS;WACb,UAAU,CACnB,OAAO,EAAE,YAAY,CAAC,YAAY,EAClC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAClC,aAAa,KAAK,EAClB,oBAAoB,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAC/C,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAW,MAAM,aAAa,CAAA;AAExD,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAyB,YAAY,EAAE,kBAAkB,EAAsB,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACxI,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAgB,MAAM,YAAY,CAAA;AAIrE,MAAM,CAAC,OAAO,OAAO,SAAS;WACb,UAAU,CACnB,OAAO,EAAE,YAAY,CAAC,YAAY,EAClC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAClC,aAAa,KAAK,EAClB,oBAAoB,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAC/C,OAAO,CAAC,MAAM,CAAC;IA4ElB;;OAEG;IACH,MAAM,CAAC,eAAe,CAClB,OAAO,CAAC,EAAE,aAAa,EACvB,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAClC,aAAa,KAAK,EAClB,cAAc,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GACzC,MAAM;IAmDT;;;;;;OAMG;WACU,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG;QAAE,YAAY,CAAC,EAAE,WAAW,CAAA;KAAE,EAAE,eAAe,CAAC,EAAE,WAAW,CAAC,YAAY;IA2DxH,MAAM,KAAK,SAAS,qBAEnB;CACJ;AAED;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAA;AACzG,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAA"}
|
package/build/index.js
CHANGED
|
@@ -18,6 +18,9 @@ var __privateWrapper = (obj, member, setter, getter) => ({
|
|
|
18
18
|
}
|
|
19
19
|
});
|
|
20
20
|
|
|
21
|
+
// src/browser.ts
|
|
22
|
+
import logger6 from "@wdio/logger";
|
|
23
|
+
|
|
21
24
|
// src/index.ts
|
|
22
25
|
import logger4 from "@wdio/logger";
|
|
23
26
|
import { webdriverMonad, sessionEnvironmentDetector, startWebDriver, isBidi } from "@wdio/utils";
|
|
@@ -38,6 +41,9 @@ var environment = {
|
|
|
38
41
|
get Socket() {
|
|
39
42
|
throw new Error("Socket is not available in this environment");
|
|
40
43
|
},
|
|
44
|
+
get createBidiConnection() {
|
|
45
|
+
throw new Error("createBidiConnection is not available in this environment");
|
|
46
|
+
},
|
|
41
47
|
get variables() {
|
|
42
48
|
return {};
|
|
43
49
|
}
|
|
@@ -166,26 +172,30 @@ function command_default(method, endpointUri, commandInfo, doubleEncodeVariables
|
|
|
166
172
|
}
|
|
167
173
|
function manageSessionAbortions() {
|
|
168
174
|
const abort = new AbortController();
|
|
175
|
+
const abortOnSessionEnd = (result) => {
|
|
176
|
+
if (result.command !== "deleteSession") {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const abortListeners = sessionAbortListeners.get(this.sessionId);
|
|
180
|
+
if (abortListeners) {
|
|
181
|
+
for (const abortListener of abortListeners) {
|
|
182
|
+
abortListener.abort();
|
|
183
|
+
}
|
|
184
|
+
abortListeners.clear();
|
|
185
|
+
sessionAbortListeners.set(this.sessionId, null);
|
|
186
|
+
}
|
|
187
|
+
};
|
|
169
188
|
let abortListenerForCurrentSession = sessionAbortListeners.get(this.sessionId);
|
|
170
189
|
if (typeof abortListenerForCurrentSession === "undefined") {
|
|
171
190
|
abortListenerForCurrentSession = /* @__PURE__ */ new Set();
|
|
172
191
|
sessionAbortListeners.set(this.sessionId, abortListenerForCurrentSession);
|
|
192
|
+
this.on("result", abortOnSessionEnd);
|
|
173
193
|
}
|
|
174
194
|
if (abortListenerForCurrentSession === null) {
|
|
175
195
|
return { isAborted: true, abortSignal: void 0, cleanup: () => {
|
|
176
196
|
} };
|
|
177
197
|
}
|
|
178
198
|
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
199
|
return {
|
|
190
200
|
isAborted: false,
|
|
191
201
|
abortSignal: abort.signal,
|
|
@@ -361,14 +371,16 @@ var SCRIPT_SUFFIX = "/* __wdio script end__ */";
|
|
|
361
371
|
var base64Regex = /^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$/;
|
|
362
372
|
var log2 = logger2("webdriver");
|
|
363
373
|
var RESPONSE_TIMEOUT = 1e3 * 60;
|
|
364
|
-
var _id, _ws, _waitForConnected, _webSocketUrl, _pendingCommands, _BidiCore_instances, handleResponse_fn;
|
|
374
|
+
var _id, _ws, _waitForConnected, _resolveWaitForConnected, _webSocketUrl, _clientOptions, _pendingCommands, _BidiCore_instances, handleResponse_fn;
|
|
365
375
|
var BidiCore = class {
|
|
366
376
|
constructor(webSocketUrl, opts) {
|
|
367
377
|
__privateAdd(this, _BidiCore_instances);
|
|
368
378
|
__privateAdd(this, _id, 0);
|
|
369
379
|
__privateAdd(this, _ws);
|
|
370
|
-
__privateAdd(this, _waitForConnected
|
|
380
|
+
__privateAdd(this, _waitForConnected);
|
|
381
|
+
__privateAdd(this, _resolveWaitForConnected);
|
|
371
382
|
__privateAdd(this, _webSocketUrl);
|
|
383
|
+
__privateAdd(this, _clientOptions);
|
|
372
384
|
__privateAdd(this, _pendingCommands, /* @__PURE__ */ new Map());
|
|
373
385
|
__publicField(this, "client");
|
|
374
386
|
/**
|
|
@@ -376,9 +388,12 @@ var BidiCore = class {
|
|
|
376
388
|
*/
|
|
377
389
|
__publicField(this, "_isConnected", false);
|
|
378
390
|
__privateSet(this, _webSocketUrl, webSocketUrl);
|
|
379
|
-
|
|
380
|
-
__privateSet(this,
|
|
381
|
-
|
|
391
|
+
__privateSet(this, _clientOptions, opts);
|
|
392
|
+
__privateSet(this, _resolveWaitForConnected, () => {
|
|
393
|
+
});
|
|
394
|
+
__privateSet(this, _waitForConnected, new Promise((resolve) => {
|
|
395
|
+
__privateSet(this, _resolveWaitForConnected, resolve);
|
|
396
|
+
}));
|
|
382
397
|
}
|
|
383
398
|
/**
|
|
384
399
|
* We initiate the Bidi instance before a WebdriverIO instance is created.
|
|
@@ -389,23 +404,14 @@ var BidiCore = class {
|
|
|
389
404
|
this.client = client;
|
|
390
405
|
}
|
|
391
406
|
async connect() {
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
407
|
+
log2.info("Connecting to webSocketUrl ".concat(__privateGet(this, _webSocketUrl)));
|
|
408
|
+
__privateSet(this, _ws, await environment.value.createBidiConnection(__privateGet(this, _webSocketUrl), __privateGet(this, _clientOptions)));
|
|
409
|
+
this._isConnected = Boolean(__privateGet(this, _ws));
|
|
410
|
+
__privateGet(this, _resolveWaitForConnected).call(this, this._isConnected);
|
|
411
|
+
if (__privateGet(this, _ws)) {
|
|
412
|
+
__privateGet(this, _ws).on("message", __privateMethod(this, _BidiCore_instances, handleResponse_fn).bind(this));
|
|
395
413
|
}
|
|
396
|
-
|
|
397
|
-
__privateGet(this, _ws).on("open", () => {
|
|
398
|
-
log2.info("Connected session to Bidi protocol");
|
|
399
|
-
this._isConnected = true;
|
|
400
|
-
resolve(this._isConnected);
|
|
401
|
-
});
|
|
402
|
-
__privateGet(this, _ws).on("error", (err) => {
|
|
403
|
-
log2.warn("Couldn't connect to Bidi protocol: ".concat(err.message));
|
|
404
|
-
this._isConnected = false;
|
|
405
|
-
resolve(this._isConnected);
|
|
406
|
-
});
|
|
407
|
-
}));
|
|
408
|
-
return __privateGet(this, _waitForConnected);
|
|
414
|
+
return this._isConnected;
|
|
409
415
|
}
|
|
410
416
|
close() {
|
|
411
417
|
if (!this._isConnected) {
|
|
@@ -413,16 +419,18 @@ var BidiCore = class {
|
|
|
413
419
|
}
|
|
414
420
|
log2.info("Close Bidi connection to ".concat(__privateGet(this, _webSocketUrl)));
|
|
415
421
|
this._isConnected = false;
|
|
416
|
-
__privateGet(this, _ws)
|
|
417
|
-
|
|
418
|
-
|
|
422
|
+
if (__privateGet(this, _ws)) {
|
|
423
|
+
__privateGet(this, _ws).off("message", __privateMethod(this, _BidiCore_instances, handleResponse_fn).bind(this));
|
|
424
|
+
__privateGet(this, _ws).close();
|
|
425
|
+
__privateGet(this, _ws).terminate();
|
|
426
|
+
__privateSet(this, _ws, void 0);
|
|
427
|
+
}
|
|
419
428
|
}
|
|
420
429
|
reconnect(webSocketUrl, opts) {
|
|
421
430
|
log2.info("Reconnect to new Bidi session at ".concat(webSocketUrl));
|
|
422
431
|
this.close();
|
|
423
432
|
__privateSet(this, _webSocketUrl, webSocketUrl);
|
|
424
|
-
__privateSet(this,
|
|
425
|
-
__privateGet(this, _ws).on("message", __privateMethod(this, _BidiCore_instances, handleResponse_fn).bind(this));
|
|
433
|
+
__privateSet(this, _clientOptions, opts);
|
|
426
434
|
return this.connect();
|
|
427
435
|
}
|
|
428
436
|
/**
|
|
@@ -470,7 +478,7 @@ var BidiCore = class {
|
|
|
470
478
|
}
|
|
471
479
|
sendAsync(params) {
|
|
472
480
|
var _a;
|
|
473
|
-
if (!this._isConnected) {
|
|
481
|
+
if (!__privateGet(this, _ws) || !this._isConnected) {
|
|
474
482
|
throw new Error("No connection to WebDriver Bidi was established");
|
|
475
483
|
}
|
|
476
484
|
log2.info("BIDI COMMAND", ...parseBidiCommand(params));
|
|
@@ -483,7 +491,9 @@ var BidiCore = class {
|
|
|
483
491
|
_id = new WeakMap();
|
|
484
492
|
_ws = new WeakMap();
|
|
485
493
|
_waitForConnected = new WeakMap();
|
|
494
|
+
_resolveWaitForConnected = new WeakMap();
|
|
486
495
|
_webSocketUrl = new WeakMap();
|
|
496
|
+
_clientOptions = new WeakMap();
|
|
487
497
|
_pendingCommands = new WeakMap();
|
|
488
498
|
_BidiCore_instances = new WeakSet();
|
|
489
499
|
handleResponse_fn = function(data) {
|
|
@@ -1205,7 +1215,7 @@ function getPrototype({ isW3C, isChromium, isFirefox, isMobile, isSauce, isSelen
|
|
|
1205
1215
|
}
|
|
1206
1216
|
return prototype;
|
|
1207
1217
|
}
|
|
1208
|
-
function getEnvironmentVars({ isW3C, isMobile, isIOS, isAndroid, isFirefox, isSauce, isSeleniumStandalone, isChromium }) {
|
|
1218
|
+
function getEnvironmentVars({ isW3C, isMobile, isIOS, isAndroid, isFirefox, isSauce, isSeleniumStandalone, isChromium, isWindowsApp, isMacApp }) {
|
|
1209
1219
|
return {
|
|
1210
1220
|
isW3C: { value: isW3C },
|
|
1211
1221
|
isMobile: { value: isMobile },
|
|
@@ -1225,7 +1235,9 @@ function getEnvironmentVars({ isW3C, isMobile, isIOS, isAndroid, isFirefox, isSa
|
|
|
1225
1235
|
return Boolean((_a = this._bidiHandler) == null ? void 0 : _a.isConnected);
|
|
1226
1236
|
}
|
|
1227
1237
|
},
|
|
1228
|
-
isChromium: { value: isChromium }
|
|
1238
|
+
isChromium: { value: isChromium },
|
|
1239
|
+
isWindowsApp: { value: isWindowsApp },
|
|
1240
|
+
isMacApp: { value: isMacApp }
|
|
1229
1241
|
};
|
|
1230
1242
|
}
|
|
1231
1243
|
function setupDirectConnect(client) {
|
|
@@ -1334,6 +1346,7 @@ var remoteTypes_exports = {};
|
|
|
1334
1346
|
var log4 = logger4("webdriver");
|
|
1335
1347
|
var WebDriver = class _WebDriver {
|
|
1336
1348
|
static async newSession(options, modifier, userPrototype = {}, customCommandWrapper) {
|
|
1349
|
+
var _a;
|
|
1337
1350
|
const envLogLevel = process.env.WDIO_LOG_LEVEL;
|
|
1338
1351
|
options.logLevel = envLogLevel != null ? envLogLevel : options.logLevel;
|
|
1339
1352
|
const params = validateConfig(DEFAULTS, options);
|
|
@@ -1371,8 +1384,9 @@ var WebDriver = class _WebDriver {
|
|
|
1371
1384
|
);
|
|
1372
1385
|
const client = monad(sessionId, customCommandWrapper);
|
|
1373
1386
|
if (isBidi(capabilities)) {
|
|
1374
|
-
await client._bidiHandler.waitForConnected()
|
|
1375
|
-
|
|
1387
|
+
if (await client._bidiHandler.waitForConnected()) {
|
|
1388
|
+
(_a = client._bidiHandler.socket) == null ? void 0 : _a.on("message", parseBidiMessage.bind(client));
|
|
1389
|
+
}
|
|
1376
1390
|
}
|
|
1377
1391
|
if (params.enableDirectConnect) {
|
|
1378
1392
|
setupDirectConnect(client);
|
|
@@ -1414,7 +1428,10 @@ var WebDriver = class _WebDriver {
|
|
|
1414
1428
|
const monad = webdriverMonad(options, modifier, prototype);
|
|
1415
1429
|
const client = monad(options.sessionId, commandWrapper);
|
|
1416
1430
|
if (isBidi(options.capabilities || {})) {
|
|
1417
|
-
(_b = client._bidiHandler) == null ? void 0 : _b.
|
|
1431
|
+
(_b = client._bidiHandler) == null ? void 0 : _b.waitForConnected().then(() => {
|
|
1432
|
+
var _a2;
|
|
1433
|
+
(_a2 = client._bidiHandler) == null ? void 0 : _a2.socket.on("message", parseBidiMessage.bind(client));
|
|
1434
|
+
});
|
|
1418
1435
|
}
|
|
1419
1436
|
return client;
|
|
1420
1437
|
}
|
|
@@ -1426,7 +1443,7 @@ var WebDriver = class _WebDriver {
|
|
|
1426
1443
|
* @returns {string} the new session id of the browser
|
|
1427
1444
|
*/
|
|
1428
1445
|
static async reloadSession(instance, newCapabilities) {
|
|
1429
|
-
var _a, _b;
|
|
1446
|
+
var _a, _b, _c;
|
|
1430
1447
|
const capabilities = newCapabilities ? newCapabilities : Object.assign({}, instance.requestedCapabilities);
|
|
1431
1448
|
let params = { ...instance.options, capabilities };
|
|
1432
1449
|
for (const prop of ["protocol", "hostname", "port", "path", "queryParams", "user", "key"]) {
|
|
@@ -1461,7 +1478,7 @@ var WebDriver = class _WebDriver {
|
|
|
1461
1478
|
if (isBidi(instance.capabilities || {})) {
|
|
1462
1479
|
const bidiReqOpts = instance.options.strictSSL ? {} : { rejectUnauthorized: false };
|
|
1463
1480
|
await ((_a = instance._bidiHandler) == null ? void 0 : _a.reconnect(newSessionCapabilities.webSocketUrl, bidiReqOpts));
|
|
1464
|
-
(_b = instance._bidiHandler) == null ? void 0 : _b.socket.on("message", parseBidiMessage.bind(instance));
|
|
1481
|
+
(_c = (_b = instance._bidiHandler) == null ? void 0 : _b.socket) == null ? void 0 : _c.on("message", parseBidiMessage.bind(instance));
|
|
1465
1482
|
}
|
|
1466
1483
|
return sessionId;
|
|
1467
1484
|
}
|
|
@@ -1626,7 +1643,7 @@ var WebDriverResponseError = class _WebDriverResponseError extends WebDriverErro
|
|
|
1626
1643
|
// package.json
|
|
1627
1644
|
var package_default = {
|
|
1628
1645
|
name: "webdriver",
|
|
1629
|
-
version: "9.
|
|
1646
|
+
version: "9.12.1",
|
|
1630
1647
|
description: "A Node.js bindings implementation for the W3C WebDriver and Mobile JSONWire Protocol",
|
|
1631
1648
|
author: "Christian Bromann <mail@bromann.dev>",
|
|
1632
1649
|
homepage: "https://github.com/webdriverio/webdriverio/tree/main/packages/webdriver",
|
|
@@ -1883,9 +1900,25 @@ var FetchRequest = class extends WebDriverRequest {
|
|
|
1883
1900
|
|
|
1884
1901
|
// src/browser.ts
|
|
1885
1902
|
var browser_default = WebDriver;
|
|
1903
|
+
var log6 = logger6("webdriver");
|
|
1886
1904
|
environment.value = {
|
|
1887
1905
|
Request: FetchRequest,
|
|
1888
1906
|
Socket: BrowserSocket,
|
|
1907
|
+
createBidiConnection: (webSocketUrl, options) => {
|
|
1908
|
+
log6.info("Connecting to webSocketUrl ".concat(webSocketUrl));
|
|
1909
|
+
const ws = new BrowserSocket(webSocketUrl, options);
|
|
1910
|
+
return new Promise((resolve) => {
|
|
1911
|
+
ws.on("open", () => {
|
|
1912
|
+
log6.info("Connected session to Bidi protocol");
|
|
1913
|
+
resolve(ws);
|
|
1914
|
+
});
|
|
1915
|
+
ws.on("error", (err) => {
|
|
1916
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
1917
|
+
log6.warn("Couldn't connect to Bidi protocol: ".concat(error.message));
|
|
1918
|
+
resolve(void 0);
|
|
1919
|
+
});
|
|
1920
|
+
});
|
|
1921
|
+
},
|
|
1889
1922
|
variables: {}
|
|
1890
1923
|
};
|
|
1891
1924
|
export {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import WebSocket, { type ClientOptions } from 'ws';
|
|
2
|
+
export declare function createBidiConnection(webSocketUrl: string, options?: ClientOptions): Promise<WebSocket | undefined>;
|
|
3
|
+
/**
|
|
4
|
+
* Resolve hostnames to IPv4 and IPv6 addresses
|
|
5
|
+
* @returns list of websocket urls to try
|
|
6
|
+
* @see https://github.com/webdriverio/webdriverio/issues/14039
|
|
7
|
+
*/
|
|
8
|
+
export declare function listWebsocketCandidateUrls(webSocketUrl: string): Promise<string[]>;
|
|
9
|
+
/**
|
|
10
|
+
* Connect to a websocket
|
|
11
|
+
* @param candidateUrls - list of websocket urls to try
|
|
12
|
+
* @returns true if the connection was successful
|
|
13
|
+
*/
|
|
14
|
+
export declare function connectWebsocket(candidateUrls: string[], options?: ClientOptions): Promise<WebSocket | undefined>;
|
|
15
|
+
//# sourceMappingURL=bidi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bidi.d.ts","sourceRoot":"","sources":["../../src/node/bidi.ts"],"names":[],"mappings":"AAMA,OAAO,SAAS,EAAE,EAAE,KAAK,aAAa,EAAE,MAAM,IAAI,CAAA;AAKlD,wBAAsB,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAGxH;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqBxF;AAcD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAkDvH"}
|
package/build/node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAGA,OAAO,SAAS,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAGA,OAAO,SAAS,MAAM,YAAY,CAAA;AAMlC,eAAe,SAAS,CAAA;AACxB,cAAc,YAAY,CAAA"}
|
package/build/node.js
CHANGED
|
@@ -22,6 +22,9 @@ var environment = {
|
|
|
22
22
|
get Socket() {
|
|
23
23
|
throw new Error("Socket is not available in this environment");
|
|
24
24
|
},
|
|
25
|
+
get createBidiConnection() {
|
|
26
|
+
throw new Error("createBidiConnection is not available in this environment");
|
|
27
|
+
},
|
|
25
28
|
get variables() {
|
|
26
29
|
return {};
|
|
27
30
|
}
|
|
@@ -158,26 +161,30 @@ Actual: ${actual}` + moreInfo
|
|
|
158
161
|
}
|
|
159
162
|
function manageSessionAbortions() {
|
|
160
163
|
const abort = new AbortController();
|
|
164
|
+
const abortOnSessionEnd = (result) => {
|
|
165
|
+
if (result.command !== "deleteSession") {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const abortListeners = sessionAbortListeners.get(this.sessionId);
|
|
169
|
+
if (abortListeners) {
|
|
170
|
+
for (const abortListener of abortListeners) {
|
|
171
|
+
abortListener.abort();
|
|
172
|
+
}
|
|
173
|
+
abortListeners.clear();
|
|
174
|
+
sessionAbortListeners.set(this.sessionId, null);
|
|
175
|
+
}
|
|
176
|
+
};
|
|
161
177
|
let abortListenerForCurrentSession = sessionAbortListeners.get(this.sessionId);
|
|
162
178
|
if (typeof abortListenerForCurrentSession === "undefined") {
|
|
163
179
|
abortListenerForCurrentSession = /* @__PURE__ */ new Set();
|
|
164
180
|
sessionAbortListeners.set(this.sessionId, abortListenerForCurrentSession);
|
|
181
|
+
this.on("result", abortOnSessionEnd);
|
|
165
182
|
}
|
|
166
183
|
if (abortListenerForCurrentSession === null) {
|
|
167
184
|
return { isAborted: true, abortSignal: void 0, cleanup: () => {
|
|
168
185
|
} };
|
|
169
186
|
}
|
|
170
187
|
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
188
|
return {
|
|
182
189
|
isAborted: false,
|
|
183
190
|
abortSignal: abort.signal,
|
|
@@ -356,8 +363,10 @@ var RESPONSE_TIMEOUT = 1e3 * 60;
|
|
|
356
363
|
var BidiCore = class {
|
|
357
364
|
#id = 0;
|
|
358
365
|
#ws;
|
|
359
|
-
#waitForConnected
|
|
366
|
+
#waitForConnected;
|
|
367
|
+
#resolveWaitForConnected;
|
|
360
368
|
#webSocketUrl;
|
|
369
|
+
#clientOptions;
|
|
361
370
|
#pendingCommands = /* @__PURE__ */ new Map();
|
|
362
371
|
client;
|
|
363
372
|
/**
|
|
@@ -366,9 +375,12 @@ var BidiCore = class {
|
|
|
366
375
|
_isConnected = false;
|
|
367
376
|
constructor(webSocketUrl, opts) {
|
|
368
377
|
this.#webSocketUrl = webSocketUrl;
|
|
369
|
-
|
|
370
|
-
this.#
|
|
371
|
-
|
|
378
|
+
this.#clientOptions = opts;
|
|
379
|
+
this.#resolveWaitForConnected = () => {
|
|
380
|
+
};
|
|
381
|
+
this.#waitForConnected = new Promise((resolve) => {
|
|
382
|
+
this.#resolveWaitForConnected = resolve;
|
|
383
|
+
});
|
|
372
384
|
}
|
|
373
385
|
/**
|
|
374
386
|
* We initiate the Bidi instance before a WebdriverIO instance is created.
|
|
@@ -379,23 +391,14 @@ var BidiCore = class {
|
|
|
379
391
|
this.client = client;
|
|
380
392
|
}
|
|
381
393
|
async connect() {
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
394
|
+
log2.info(`Connecting to webSocketUrl ${this.#webSocketUrl}`);
|
|
395
|
+
this.#ws = await environment.value.createBidiConnection(this.#webSocketUrl, this.#clientOptions);
|
|
396
|
+
this._isConnected = Boolean(this.#ws);
|
|
397
|
+
this.#resolveWaitForConnected(this._isConnected);
|
|
398
|
+
if (this.#ws) {
|
|
399
|
+
this.#ws.on("message", this.#handleResponse.bind(this));
|
|
385
400
|
}
|
|
386
|
-
this
|
|
387
|
-
this.#ws.on("open", () => {
|
|
388
|
-
log2.info("Connected session to Bidi protocol");
|
|
389
|
-
this._isConnected = true;
|
|
390
|
-
resolve(this._isConnected);
|
|
391
|
-
});
|
|
392
|
-
this.#ws.on("error", (err) => {
|
|
393
|
-
log2.warn(`Couldn't connect to Bidi protocol: ${err.message}`);
|
|
394
|
-
this._isConnected = false;
|
|
395
|
-
resolve(this._isConnected);
|
|
396
|
-
});
|
|
397
|
-
});
|
|
398
|
-
return this.#waitForConnected;
|
|
401
|
+
return this._isConnected;
|
|
399
402
|
}
|
|
400
403
|
close() {
|
|
401
404
|
if (!this._isConnected) {
|
|
@@ -403,16 +406,18 @@ var BidiCore = class {
|
|
|
403
406
|
}
|
|
404
407
|
log2.info(`Close Bidi connection to ${this.#webSocketUrl}`);
|
|
405
408
|
this._isConnected = false;
|
|
406
|
-
this.#ws
|
|
407
|
-
|
|
408
|
-
|
|
409
|
+
if (this.#ws) {
|
|
410
|
+
this.#ws.off("message", this.#handleResponse.bind(this));
|
|
411
|
+
this.#ws.close();
|
|
412
|
+
this.#ws.terminate();
|
|
413
|
+
this.#ws = void 0;
|
|
414
|
+
}
|
|
409
415
|
}
|
|
410
416
|
reconnect(webSocketUrl, opts) {
|
|
411
417
|
log2.info(`Reconnect to new Bidi session at ${webSocketUrl}`);
|
|
412
418
|
this.close();
|
|
413
419
|
this.#webSocketUrl = webSocketUrl;
|
|
414
|
-
this.#
|
|
415
|
-
this.#ws.on("message", this.#handleResponse.bind(this));
|
|
420
|
+
this.#clientOptions = opts;
|
|
416
421
|
return this.connect();
|
|
417
422
|
}
|
|
418
423
|
/**
|
|
@@ -489,7 +494,7 @@ ${driverStack}`;
|
|
|
489
494
|
return payload;
|
|
490
495
|
}
|
|
491
496
|
sendAsync(params) {
|
|
492
|
-
if (!this._isConnected) {
|
|
497
|
+
if (!this.#ws || !this._isConnected) {
|
|
493
498
|
throw new Error("No connection to WebDriver Bidi was established");
|
|
494
499
|
}
|
|
495
500
|
log2.info("BIDI COMMAND", ...parseBidiCommand(params));
|
|
@@ -1189,7 +1194,7 @@ function getPrototype({ isW3C, isChromium, isFirefox, isMobile, isSauce, isSelen
|
|
|
1189
1194
|
}
|
|
1190
1195
|
return prototype;
|
|
1191
1196
|
}
|
|
1192
|
-
function getEnvironmentVars({ isW3C, isMobile, isIOS, isAndroid, isFirefox, isSauce, isSeleniumStandalone, isChromium }) {
|
|
1197
|
+
function getEnvironmentVars({ isW3C, isMobile, isIOS, isAndroid, isFirefox, isSauce, isSeleniumStandalone, isChromium, isWindowsApp, isMacApp }) {
|
|
1193
1198
|
return {
|
|
1194
1199
|
isW3C: { value: isW3C },
|
|
1195
1200
|
isMobile: { value: isMobile },
|
|
@@ -1208,7 +1213,9 @@ function getEnvironmentVars({ isW3C, isMobile, isIOS, isAndroid, isFirefox, isSa
|
|
|
1208
1213
|
return Boolean(this._bidiHandler?.isConnected);
|
|
1209
1214
|
}
|
|
1210
1215
|
},
|
|
1211
|
-
isChromium: { value: isChromium }
|
|
1216
|
+
isChromium: { value: isChromium },
|
|
1217
|
+
isWindowsApp: { value: isWindowsApp },
|
|
1218
|
+
isMacApp: { value: isMacApp }
|
|
1212
1219
|
};
|
|
1213
1220
|
}
|
|
1214
1221
|
function setupDirectConnect(client) {
|
|
@@ -1354,8 +1361,9 @@ var WebDriver = class _WebDriver {
|
|
|
1354
1361
|
);
|
|
1355
1362
|
const client = monad(sessionId, customCommandWrapper);
|
|
1356
1363
|
if (isBidi(capabilities)) {
|
|
1357
|
-
await client._bidiHandler.waitForConnected()
|
|
1358
|
-
|
|
1364
|
+
if (await client._bidiHandler.waitForConnected()) {
|
|
1365
|
+
client._bidiHandler.socket?.on("message", parseBidiMessage.bind(client));
|
|
1366
|
+
}
|
|
1359
1367
|
}
|
|
1360
1368
|
if (params.enableDirectConnect) {
|
|
1361
1369
|
setupDirectConnect(client);
|
|
@@ -1396,7 +1404,9 @@ var WebDriver = class _WebDriver {
|
|
|
1396
1404
|
const monad = webdriverMonad(options, modifier, prototype);
|
|
1397
1405
|
const client = monad(options.sessionId, commandWrapper);
|
|
1398
1406
|
if (isBidi(options.capabilities || {})) {
|
|
1399
|
-
client._bidiHandler?.
|
|
1407
|
+
client._bidiHandler?.waitForConnected().then(() => {
|
|
1408
|
+
client._bidiHandler?.socket.on("message", parseBidiMessage.bind(client));
|
|
1409
|
+
});
|
|
1400
1410
|
}
|
|
1401
1411
|
return client;
|
|
1402
1412
|
}
|
|
@@ -1442,7 +1452,7 @@ var WebDriver = class _WebDriver {
|
|
|
1442
1452
|
if (isBidi(instance.capabilities || {})) {
|
|
1443
1453
|
const bidiReqOpts = instance.options.strictSSL ? {} : { rejectUnauthorized: false };
|
|
1444
1454
|
await instance._bidiHandler?.reconnect(newSessionCapabilities.webSocketUrl, bidiReqOpts);
|
|
1445
|
-
instance._bidiHandler?.socket
|
|
1455
|
+
instance._bidiHandler?.socket?.on("message", parseBidiMessage.bind(instance));
|
|
1446
1456
|
}
|
|
1447
1457
|
return sessionId;
|
|
1448
1458
|
}
|
|
@@ -1565,7 +1575,7 @@ var WebDriverResponseError = class _WebDriverResponseError extends WebDriverErro
|
|
|
1565
1575
|
// package.json
|
|
1566
1576
|
var package_default = {
|
|
1567
1577
|
name: "webdriver",
|
|
1568
|
-
version: "9.
|
|
1578
|
+
version: "9.12.1",
|
|
1569
1579
|
description: "A Node.js bindings implementation for the W3C WebDriver and Mobile JSONWire Protocol",
|
|
1570
1580
|
author: "Christian Bromann <mail@bromann.dev>",
|
|
1571
1581
|
homepage: "https://github.com/webdriverio/webdriverio/tree/main/packages/webdriver",
|
|
@@ -1834,6 +1844,97 @@ var FetchRequest2 = class extends WebDriverRequest {
|
|
|
1834
1844
|
}
|
|
1835
1845
|
};
|
|
1836
1846
|
|
|
1847
|
+
// src/node/bidi.ts
|
|
1848
|
+
import { isIP } from "node:net";
|
|
1849
|
+
import dns2 from "node:dns/promises";
|
|
1850
|
+
import logger6 from "@wdio/logger";
|
|
1851
|
+
import WebSocket from "ws";
|
|
1852
|
+
var log6 = logger6("webdriver");
|
|
1853
|
+
var CONNECTION_TIMEOUT = 1e4;
|
|
1854
|
+
async function createBidiConnection(webSocketUrl, options) {
|
|
1855
|
+
const candidateUrls = await listWebsocketCandidateUrls(webSocketUrl);
|
|
1856
|
+
return connectWebsocket(candidateUrls, options);
|
|
1857
|
+
}
|
|
1858
|
+
async function listWebsocketCandidateUrls(webSocketUrl) {
|
|
1859
|
+
const parsedUrl = new URL(webSocketUrl);
|
|
1860
|
+
const candidateUrls = [webSocketUrl];
|
|
1861
|
+
if (isIP(parsedUrl.hostname)) {
|
|
1862
|
+
return candidateUrls;
|
|
1863
|
+
}
|
|
1864
|
+
try {
|
|
1865
|
+
const candidateIps = await dns2.lookup(parsedUrl.hostname, { family: 0, all: true });
|
|
1866
|
+
if (candidateIps.length > 1) {
|
|
1867
|
+
const hostnameMapper = (result) => webSocketUrl.replace(parsedUrl.hostname, result.address);
|
|
1868
|
+
candidateUrls.push(...candidateIps.map(hostnameMapper));
|
|
1869
|
+
}
|
|
1870
|
+
} catch (error) {
|
|
1871
|
+
log6.error(`Could not resolve hostname ${parsedUrl.hostname}: ${error}`);
|
|
1872
|
+
}
|
|
1873
|
+
return candidateUrls;
|
|
1874
|
+
}
|
|
1875
|
+
async function connectWebsocket(candidateUrls, options) {
|
|
1876
|
+
const websockets = candidateUrls.map((candidateUrl) => {
|
|
1877
|
+
log6.debug(`Attempt to connect to webSocketUrl ${candidateUrl}`);
|
|
1878
|
+
try {
|
|
1879
|
+
const ws2 = new WebSocket(candidateUrl, options);
|
|
1880
|
+
return ws2;
|
|
1881
|
+
} catch {
|
|
1882
|
+
return void 0;
|
|
1883
|
+
}
|
|
1884
|
+
}).filter(Boolean);
|
|
1885
|
+
const wsConnectPromises = websockets.map((ws2, index) => {
|
|
1886
|
+
const promise = new Promise((resolve) => {
|
|
1887
|
+
ws2.once("open", () => resolve({ ws: ws2, isConnected: true, index }));
|
|
1888
|
+
ws2.once("error", (err) => {
|
|
1889
|
+
log6.debug(`Could not connect to Bidi protocol at ${candidateUrls[index]}: ${err.message}`);
|
|
1890
|
+
resolve({ ws: ws2, isConnected: false, errorMessage: err.message, index });
|
|
1891
|
+
});
|
|
1892
|
+
});
|
|
1893
|
+
return { promise, index };
|
|
1894
|
+
});
|
|
1895
|
+
const connectionTimeoutPromise = new Promise((resolve) => {
|
|
1896
|
+
setTimeout(() => {
|
|
1897
|
+
log6.error(`Could not connect to Bidi protocol of any candidate url in time: "${candidateUrls.join('", "')}"`);
|
|
1898
|
+
return resolve(void 0);
|
|
1899
|
+
}, CONNECTION_TIMEOUT);
|
|
1900
|
+
});
|
|
1901
|
+
const wsInfo = await Promise.race([
|
|
1902
|
+
firstResolved(wsConnectPromises),
|
|
1903
|
+
connectionTimeoutPromise
|
|
1904
|
+
]);
|
|
1905
|
+
const socketsToCleanup = wsInfo ? websockets.filter((_, index) => wsInfo.index !== index) : websockets;
|
|
1906
|
+
for (const socket of socketsToCleanup) {
|
|
1907
|
+
socket.removeAllListeners();
|
|
1908
|
+
if (socket.readyState === WebSocket.OPEN || socket.readyState === WebSocket.CLOSING) {
|
|
1909
|
+
socket.terminate();
|
|
1910
|
+
} else {
|
|
1911
|
+
socket.once("open", () => socket.terminate());
|
|
1912
|
+
}
|
|
1913
|
+
}
|
|
1914
|
+
if (wsInfo?.isConnected) {
|
|
1915
|
+
log6.info(`Connected to Bidi protocol at ${candidateUrls[wsInfo.index]}`);
|
|
1916
|
+
return wsInfo.ws;
|
|
1917
|
+
}
|
|
1918
|
+
return void 0;
|
|
1919
|
+
}
|
|
1920
|
+
function firstResolved(promises, errorMessages = []) {
|
|
1921
|
+
if (promises.length === 0) {
|
|
1922
|
+
const sep = "\n - ";
|
|
1923
|
+
const errorMessage = errorMessages.length > 0 ? sep + errorMessages.join(sep) : "";
|
|
1924
|
+
log6.error("Could not connect to Bidi protocol" + errorMessage);
|
|
1925
|
+
return Promise.resolve(void 0);
|
|
1926
|
+
}
|
|
1927
|
+
return Promise.race(promises.map(({ promise }) => promise)).then((result) => {
|
|
1928
|
+
if (result.isConnected) {
|
|
1929
|
+
return result;
|
|
1930
|
+
}
|
|
1931
|
+
return firstResolved(
|
|
1932
|
+
promises.filter(({ index }) => index !== result.index),
|
|
1933
|
+
[...errorMessages, result.errorMessage || "unknown error"]
|
|
1934
|
+
);
|
|
1935
|
+
});
|
|
1936
|
+
}
|
|
1937
|
+
|
|
1837
1938
|
// src/node.ts
|
|
1838
1939
|
var node_default = WebDriver;
|
|
1839
1940
|
environment.value = {
|
|
@@ -1851,6 +1952,7 @@ environment.value = {
|
|
|
1851
1952
|
process.env.WDIO_UNIT_TESTS ? FetchRequest2 : FetchRequest
|
|
1852
1953
|
),
|
|
1853
1954
|
Socket: ws,
|
|
1955
|
+
createBidiConnection,
|
|
1854
1956
|
variables: {
|
|
1855
1957
|
WEBDRIVER_CACHE_DIR: process.env.WEBDRIVER_CACHE_DIR || os.tmpdir(),
|
|
1856
1958
|
PROXY_URL: process.env.HTTP_PROXY || process.env.HTTPS_PROXY
|
package/build/types.d.ts
CHANGED
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;
|
|
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;IACf,YAAY,EAAE,OAAO,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;CACpB;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,MAAM,WAAW,qBAAqB;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,OAAO,CAAA;CAChB;AACD,MAAM,WAAW,oBAAoB;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,OAAO,CAAA;CAClB;AACD,KAAK,sBAAsB,GAAG;IAC1B,OAAO,EAAE,qBAAqB,CAAA;IAC9B,MAAM,EAAE,oBAAoB,CAAA;IAC5B,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACrC,UAAU,EAAE,eAAe,CAAC;IAC5B,qBAAqB,EAAE,uBAAuB,CAAA;IAC9C,eAAe,EAAE,iBAAiB,CAAA;IAClC,eAAe,EAAE,iBAAiB,CAAA;IAClC,aAAa,EAAE,eAAe,CAAA;CACjC,CAAA;AACD,MAAM,MAAM,YAAY,GAAG;KACtB,KAAK,IAAI,MAAM,IAAI,CAAC,qBAAqB,EAAE,aAAa,GAAG,kBAAkB,CAAC,GAAG,aAAa,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC;CACrJ,CAAA;AAED,KAAK,QAAQ,CAAC,CAAC,SAAS;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,EAAE,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS;IAAE,MAAM,EAAE,CAAC,CAAA;CAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAA;AAC9H,MAAM,MAAM,QAAQ,GAAG;KAClB,KAAK,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC;CAC7D,GAAG,sBAAsB,CAAA;AAC1B,UAAU,gBAAgB;IACtB,EAAE,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAA;IAClG,IAAI,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAA;CACvG;AAED,MAAM,WAAW,UAAW,SAAQ,YAAY,EAAE,YAAY;IAE1D,SAAS,EAAE,MAAM,CAAA;IAEjB,YAAY,EAAE,WAAW,CAAC,YAAY,CAAA;IAEtC,qBAAqB,EAAE,YAAY,CAAC,yBAAyB,CAAC,cAAc,CAAC,CAAA;IAE7E,OAAO,EAAE,OAAO,CAAC,SAAS,CAAA;CAC7B;AAED,MAAM,WAAW,MAAO,SAAQ,IAAI,CAAC,UAAU,EAAE,MAAM,gBAAgB,CAAC,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB;CAAG;AAE5H,MAAM,WAAW,aAAc,SAAQ,OAAO,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;IACpF,SAAS,EAAE,MAAM,CAAA;IAEjB,YAAY,CAAC,EAAE,WAAW,CAAC,YAAY,CAAA;IAEvC,qBAAqB,CAAC,EAAE,YAAY,CAAC,yBAAyB,CAAC,cAAc,CAAC,CAAA;CACjF"}
|
package/build/utils.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ export declare function getPrototype({ isW3C, isChromium, isFirefox, isMobile, i
|
|
|
32
32
|
* @param {Object} options driver instance or option object containing these flags
|
|
33
33
|
* @return {Object} prototype object
|
|
34
34
|
*/
|
|
35
|
-
export declare function getEnvironmentVars({ isW3C, isMobile, isIOS, isAndroid, isFirefox, isSauce, isSeleniumStandalone, isChromium }: Partial<SessionFlags>): PropertyDescriptorMap;
|
|
35
|
+
export declare function getEnvironmentVars({ isW3C, isMobile, isIOS, isAndroid, isFirefox, isSauce, isSeleniumStandalone, isChromium, isWindowsApp, isMacApp }: Partial<SessionFlags>): PropertyDescriptorMap;
|
|
36
36
|
/**
|
|
37
37
|
* Decorate the client's options object with host updates based on the presence of
|
|
38
38
|
* directConnect capabilities in the new session response. Note that this
|
package/build/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAU/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAM1C,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAoBxF;;GAEG;AACH,wBAAsB,qBAAqB,CAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,WAAW,CAAC,YAAY,CAAA;CAAE,CAAC,CAgEzI;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAE,YAAY,EAAE,WAAW,CAAC,YAAY,QAiC3E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAE,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,WAkExE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAE,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,oBAAoB,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,sCAiD7H;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,qBAAqB,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAU/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAM1C,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAoBxF;;GAEG;AACH,wBAAsB,qBAAqB,CAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,WAAW,CAAC,YAAY,CAAA;CAAE,CAAC,CAgEzI;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAE,YAAY,EAAE,WAAW,CAAC,YAAY,QAiC3E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAE,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,WAkExE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAE,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,oBAAoB,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,sCAiD7H;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,qBAAqB,CAuBpM;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,QAgBhD;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,QAAS,kBAAkB,WAAU,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,WAmD1F,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CACxB,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,OAAc,EACzB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACrC,qBAAqB,CA6CvB;AAED,wBAAgB,gBAAgB,CAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,QAWjE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "webdriver",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.12.2",
|
|
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.12.2",
|
|
42
42
|
"@wdio/logger": "9.4.4",
|
|
43
|
-
"@wdio/protocols": "9.
|
|
44
|
-
"@wdio/types": "9.
|
|
45
|
-
"@wdio/utils": "9.
|
|
43
|
+
"@wdio/protocols": "9.12.2",
|
|
44
|
+
"@wdio/types": "9.12.2",
|
|
45
|
+
"@wdio/utils": "9.12.2",
|
|
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": "dc30cc8863706e3522c78ebb75b0c4a44746aa5b"
|
|
51
51
|
}
|