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.
@@ -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 | undefined>;
19
+ connect(): Promise<boolean>;
20
20
  close(): void;
21
- reconnect(webSocketUrl: string, opts?: ClientOptions): Promise<boolean | undefined>;
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
@@ -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;;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"}
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"}
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,YAAY,CAAA;AAIlC,eAAe,SAAS,CAAA;AACxB,cAAc,YAAY,CAAA"}
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"}
@@ -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;CAalC,CAAA"}
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"}
@@ -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;IA2ElB;;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;IAiDT;;;;;;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"}
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, Promise.resolve(false));
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
- log2.info("Connect to webSocketUrl ".concat(__privateGet(this, _webSocketUrl)));
380
- __privateSet(this, _ws, new environment.value.Socket(__privateGet(this, _webSocketUrl), opts));
381
- __privateGet(this, _ws).on("message", __privateMethod(this, _BidiCore_instances, handleResponse_fn).bind(this));
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
- if (process.env.WDIO_UNIT_TESTS) {
393
- this._isConnected = true;
394
- return;
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
- __privateSet(this, _waitForConnected, new Promise((resolve) => {
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).off("message", __privateMethod(this, _BidiCore_instances, handleResponse_fn).bind(this));
417
- __privateGet(this, _ws).close();
418
- __privateGet(this, _ws).terminate();
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, _ws, new environment.value.Socket(__privateGet(this, _webSocketUrl), opts));
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
- client._bidiHandler.socket.on("message", parseBidiMessage.bind(client));
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.socket.on("message", parseBidiMessage.bind(client));
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.10.1",
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"}
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAGA,OAAO,SAAS,MAAM,YAAY,CAAA;AAKlC,eAAe,SAAS,CAAA;AACxB,cAAc,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 = Promise.resolve(false);
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
- log2.info(`Connect to webSocketUrl ${this.#webSocketUrl}`);
370
- this.#ws = new environment.value.Socket(this.#webSocketUrl, opts);
371
- this.#ws.on("message", this.#handleResponse.bind(this));
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
- if (process.env.WDIO_UNIT_TESTS) {
383
- this._isConnected = true;
384
- return;
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.#waitForConnected = new Promise((resolve) => {
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.off("message", this.#handleResponse.bind(this));
407
- this.#ws.close();
408
- this.#ws.terminate();
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.#ws = new environment.value.Socket(this.#webSocketUrl, opts);
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
- client._bidiHandler.socket.on("message", parseBidiMessage.bind(client));
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?.socket.on("message", parseBidiMessage.bind(client));
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.on("message", parseBidiMessage.bind(instance));
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.10.1",
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
@@ -23,6 +23,8 @@ export interface SessionFlags {
23
23
  isSauce: boolean;
24
24
  isSeleniumStandalone: boolean;
25
25
  isBidi: boolean;
26
+ isWindowsApp: boolean;
27
+ isMacApp: boolean;
26
28
  }
27
29
  type Fn = (...args: unknown[]) => unknown;
28
30
  type ValueOf<T> = T[keyof T];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
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
@@ -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,CAqB5K;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"}
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.11.0",
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.11.0",
41
+ "@wdio/config": "9.12.2",
42
42
  "@wdio/logger": "9.4.4",
43
- "@wdio/protocols": "9.7.0",
44
- "@wdio/types": "9.10.1",
45
- "@wdio/utils": "9.11.0",
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": "79a39e09a5eeabebac2f068b8d29f0ae4921fa20"
50
+ "gitHead": "dc30cc8863706e3522c78ebb75b0c4a44746aa5b"
51
51
  }