webdriverio 9.26.1 → 9.27.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -33,8 +33,9 @@ import type { remote } from 'webdriver';
33
33
  *
34
34
  * @alias browser.getCookies
35
35
  * @param {remote.StorageCookieFilter} filter an object that allows to filter for cookies with specific attributes
36
+ * @param {string|null} sourceOrigin an optional source origin to fetch cookies for, if not provided it will default to the current page's origin, if explicitly set to null it will fetch cookies without a partition (only supported in BiDi)
36
37
  * @return {Cookie[]} requested cookies
37
38
  *
38
39
  */
39
- export declare function getCookies(this: WebdriverIO.Browser, filter?: string | string[] | remote.StorageCookieFilter): Promise<Cookie[]>;
40
+ export declare function getCookies(this: WebdriverIO.Browser, filter?: string | string[] | remote.StorageCookieFilter, sourceOrigin?: string | null): Promise<Cookie[]>;
40
41
  //# sourceMappingURL=getCookies.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getCookies.d.ts","sourceRoot":"","sources":["../../../src/commands/browser/getCookies.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAIvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAsB,UAAU,CAC5B,IAAI,EAAE,WAAW,CAAC,OAAO,EACzB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,mBAAmB,GACxD,OAAO,CAAC,MAAM,EAAE,CAAC,CAmDnB"}
1
+ {"version":3,"file":"getCookies.d.ts","sourceRoot":"","sources":["../../../src/commands/browser/getCookies.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAIvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,UAAU,CAC5B,IAAI,EAAE,WAAW,CAAC,OAAO,EACzB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,mBAAmB,EACvD,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAC7B,OAAO,CAAC,MAAM,EAAE,CAAC,CAuDnB"}
@@ -60,7 +60,6 @@ export * from './mobile/background.js';
60
60
  export * from './mobile/getStrings.js';
61
61
  export * from './mobile/setClipboard.js';
62
62
  export * from './mobile/getClipboard.js';
63
- export * from './mobile/queryAppState.js';
64
63
  export * from './mobile/toggleAirplaneMode.js';
65
64
  export * from './mobile/toggleData.js';
66
65
  export * from './mobile/toggleWiFi.js';
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/commands/browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/commands/browser.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,2BAA2B,CAAA;AACzC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,2BAA2B,CAAA;AACzC,cAAc,yBAAyB,CAAA;AACvC,cAAc,2BAA2B,CAAA;AACzC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,2BAA2B,CAAA;AACzC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kCAAkC,CAAA;AAChD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,2BAA2B,CAAA;AACzC,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,0BAA0B,CAAA;AACxC,cAAc,yBAAyB,CAAA;AACvC,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC;;GAEG;AACH,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,yBAAyB,CAAA;AACvC,cAAc,2BAA2B,CAAA;AACzC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,qCAAqC,CAAA;AACnD,cAAc,2BAA2B,CAAA;AACzC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,0BAA0B,CAAA;AACxC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,0BAA0B,CAAA;AACxC,cAAc,2BAA2B,CAAA;AACzC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,oCAAoC,CAAA;AAClD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA"}
@@ -15,7 +15,6 @@ export * from './mobile/background.js';
15
15
  export * from './mobile/getStrings.js';
16
16
  export * from './mobile/setClipboard.js';
17
17
  export * from './mobile/getClipboard.js';
18
- export * from './mobile/queryAppState.js';
19
18
  export * from './mobile/toggleAirplaneMode.js';
20
19
  export * from './mobile/toggleData.js';
21
20
  export * from './mobile/toggleWiFi.js';
@@ -1 +1 @@
1
- {"version":3,"file":"mobile.d.ts","sourceRoot":"","sources":["../../src/commands/mobile.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC,cAAc,yBAAyB,CAAA;AACvC,cAAc,2BAA2B,CAAA;AACzC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,2BAA2B,CAAA;AACzC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,qCAAqC,CAAA;AACnD,cAAc,2BAA2B,CAAA;AACzC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,0BAA0B,CAAA;AACxC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,0BAA0B,CAAA;AACxC,cAAc,2BAA2B,CAAA;AACzC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,oCAAoC,CAAA;AAClD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA"}
1
+ {"version":3,"file":"mobile.d.ts","sourceRoot":"","sources":["../../src/commands/mobile.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC,cAAc,yBAAyB,CAAA;AACvC,cAAc,2BAA2B,CAAA;AACzC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,qCAAqC,CAAA;AACnD,cAAc,2BAA2B,CAAA;AACzC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,0BAA0B,CAAA;AACxC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,0BAA0B,CAAA;AACxC,cAAc,2BAA2B,CAAA;AACzC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,oCAAoC,CAAA;AAClD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA"}
package/build/index.js CHANGED
@@ -154,7 +154,6 @@ __export(browser_exports, {
154
154
  powerAC: () => powerAC,
155
155
  powerCapacity: () => powerCapacity,
156
156
  pressKeyCode: () => pressKeyCode,
157
- queryAppState: () => queryAppState,
158
157
  react$: () => react$3,
159
158
  react$$: () => react$$3,
160
159
  relaunchActiveApp: () => relaunchActiveApp,
@@ -3562,7 +3561,7 @@ async function executeAsync(script, ...args) {
3562
3561
  // src/commands/browser/getCookies.ts
3563
3562
  import logger6 from "@wdio/logger";
3564
3563
  var log6 = logger6("webdriverio");
3565
- async function getCookies(filter) {
3564
+ async function getCookies(filter, sourceOrigin) {
3566
3565
  const usesMultipleFilter = Array.isArray(filter) && filter.length > 1;
3567
3566
  if (!this.isBidi || usesMultipleFilter) {
3568
3567
  return getCookiesClassic.call(this, filter);
@@ -3577,10 +3576,10 @@ async function getCookies(filter) {
3577
3576
  } catch {
3578
3577
  return getCookiesClassic.call(this, filter);
3579
3578
  }
3580
- const params = {
3579
+ const params = sourceOrigin === null ? {} : {
3581
3580
  partition: {
3582
3581
  type: "storageKey",
3583
- sourceOrigin: url2.origin
3582
+ sourceOrigin: sourceOrigin || url2.origin
3584
3583
  }
3585
3584
  };
3586
3585
  if (typeof cookieFilter !== "undefined") {
@@ -3941,8 +3940,9 @@ function getPatternParam(pattern, key) {
3941
3940
 
3942
3941
  // src/utils/interception/index.ts
3943
3942
  var log8 = logger8("WebDriverInterception");
3943
+ var DEFAULT_SPY_COLLECTED_BODY_SIZE = 10 * 1024 * 1024;
3944
3944
  var hasSubscribedToEvents = false;
3945
- var _pattern, _mockId, _filterOptions, _browser4, _eventHandler, _restored, _requestOverwrites, _respondOverwrites, _calls, _responseBodies, _WebDriverInterception_instances, emit_fn, addEventHandler_fn, handleBeforeRequestSent_fn, handleResponseStarted_fn, handleNetworkProvideResponseError_fn, isRequestMatching_fn, matchesFilterOptions_fn, _setOverwrite, ensureNotRestored_fn;
3945
+ var _pattern, _mockId, _filterOptions, _browser4, _eventHandler, _restored, _requestOverwrites, _respondOverwrites, _calls, _overwrittenResponseBodies, _WebDriverInterception_instances, emit_fn, addEventHandler_fn, handleBeforeRequestSent_fn, handleResponseStarted_fn, handleResponseCompleted_fn, handleNetworkProvideResponseError_fn, isRequestMatching_fn, matchesFilterOptions_fn, _setOverwrite, ensureNotRestored_fn;
3946
3946
  var _WebDriverInterception = class _WebDriverInterception {
3947
3947
  constructor(pattern, mockId, filterOptions, browser) {
3948
3948
  __privateAdd(this, _WebDriverInterception_instances);
@@ -3955,7 +3955,7 @@ var _WebDriverInterception = class _WebDriverInterception {
3955
3955
  __privateAdd(this, _requestOverwrites, []);
3956
3956
  __privateAdd(this, _respondOverwrites, []);
3957
3957
  __privateAdd(this, _calls, []);
3958
- __privateAdd(this, _responseBodies, /* @__PURE__ */ new Map());
3958
+ __privateAdd(this, _overwrittenResponseBodies, /* @__PURE__ */ new Map());
3959
3959
  __privateAdd(this, _setOverwrite, (overwriteProp, { overwrite, abort, once }) => {
3960
3960
  return once ? [
3961
3961
  ...overwriteProp.filter(({ once: once2 }) => once2),
@@ -3968,6 +3968,7 @@ var _WebDriverInterception = class _WebDriverInterception {
3968
3968
  __privateSet(this, _browser4, browser);
3969
3969
  browser.on("network.beforeRequestSent", __privateMethod(this, _WebDriverInterception_instances, handleBeforeRequestSent_fn).bind(this));
3970
3970
  browser.on("network.responseStarted", __privateMethod(this, _WebDriverInterception_instances, handleResponseStarted_fn).bind(this));
3971
+ browser.on("network.responseCompleted", __privateMethod(this, _WebDriverInterception_instances, handleResponseCompleted_fn).bind(this));
3971
3972
  }
3972
3973
  static async initiate(url2, filterOptions, browser) {
3973
3974
  const pattern = parseUrlPattern(url2);
@@ -3975,9 +3976,20 @@ var _WebDriverInterception = class _WebDriverInterception {
3975
3976
  await browser.sessionSubscribe({
3976
3977
  events: [
3977
3978
  "network.beforeRequestSent",
3978
- "network.responseStarted"
3979
+ "network.responseStarted",
3980
+ "network.responseCompleted"
3979
3981
  ]
3980
3982
  });
3983
+ try {
3984
+ if (browser.options.maxSpyCollectedBodySize !== 0) {
3985
+ await browser.networkAddDataCollector({
3986
+ dataTypes: ["response"],
3987
+ maxEncodedDataSize: typeof browser.options.maxSpyCollectedBodySize === "number" ? browser.options.maxSpyCollectedBodySize : DEFAULT_SPY_COLLECTED_BODY_SIZE
3988
+ });
3989
+ }
3990
+ } catch (error) {
3991
+ log8.warn("[BiDi] network.addDataCollector not supported: ".concat(error == null ? void 0 : error.message));
3992
+ }
3981
3993
  log8.info("subscribed to network events");
3982
3994
  hasSubscribedToEvents = true;
3983
3995
  }
@@ -4000,7 +4012,7 @@ var _WebDriverInterception = class _WebDriverInterception {
4000
4012
  * @returns {Buffer | null} The binary data as a Buffer, or null if no matching binary response is found
4001
4013
  */
4002
4014
  getBinaryResponse(requestId) {
4003
- const body = __privateGet(this, _responseBodies).get(requestId);
4015
+ const body = __privateGet(this, _overwrittenResponseBodies).get(requestId);
4004
4016
  if ((body == null ? void 0 : body.type) !== "base64") {
4005
4017
  return null;
4006
4018
  }
@@ -4023,7 +4035,7 @@ var _WebDriverInterception = class _WebDriverInterception {
4023
4035
  }
4024
4036
  }
4025
4037
  debugResponseBodies() {
4026
- return __privateGet(this, _responseBodies);
4038
+ return __privateGet(this, _overwrittenResponseBodies);
4027
4039
  }
4028
4040
  /**
4029
4041
  * allows access to all requests made with given pattern
@@ -4036,7 +4048,7 @@ var _WebDriverInterception = class _WebDriverInterception {
4036
4048
  */
4037
4049
  clear() {
4038
4050
  __privateSet(this, _calls, []);
4039
- __privateGet(this, _responseBodies).clear();
4051
+ __privateGet(this, _overwrittenResponseBodies).clear();
4040
4052
  return this;
4041
4053
  }
4042
4054
  /**
@@ -4174,7 +4186,7 @@ _restored = new WeakMap();
4174
4186
  _requestOverwrites = new WeakMap();
4175
4187
  _respondOverwrites = new WeakMap();
4176
4188
  _calls = new WeakMap();
4177
- _responseBodies = new WeakMap();
4189
+ _overwrittenResponseBodies = new WeakMap();
4178
4190
  _WebDriverInterception_instances = new WeakSet();
4179
4191
  emit_fn = function(event, args) {
4180
4192
  if (!__privateGet(this, _eventHandler).has(event)) {
@@ -4254,7 +4266,7 @@ handleResponseStarted_fn = function(request) {
4254
4266
  __privateMethod(this, _WebDriverInterception_instances, emit_fn).call(this, "overwrite", request);
4255
4267
  const responseData = parseOverwrite(overwrite, request);
4256
4268
  if (responseData.body) {
4257
- __privateGet(this, _responseBodies).set(request.request.request, responseData.body);
4269
+ __privateGet(this, _overwrittenResponseBodies).set(request.request.request, responseData.body);
4258
4270
  }
4259
4271
  return __privateGet(this, _browser4).networkProvideResponse({
4260
4272
  request: request.request.request,
@@ -4266,6 +4278,25 @@ handleResponseStarted_fn = function(request) {
4266
4278
  request: request.request.request
4267
4279
  }).catch(__privateMethod(this, _WebDriverInterception_instances, handleNetworkProvideResponseError_fn));
4268
4280
  };
4281
+ handleResponseCompleted_fn = async function(request) {
4282
+ if (__privateGet(this, _browser4).options.maxSpyCollectedBodySize === 0 || !__privateGet(this, _pattern).test(request.request.url) || !__privateMethod(this, _WebDriverInterception_instances, matchesFilterOptions_fn).call(this, request)) {
4283
+ return;
4284
+ }
4285
+ try {
4286
+ const { bytes } = await __privateGet(this, _browser4).networkGetData({
4287
+ request: request.request.request,
4288
+ dataType: "response"
4289
+ });
4290
+ if (bytes) {
4291
+ const call2 = __privateGet(this, _calls).find((call3) => call3.request.request === request.request.request);
4292
+ if (call2) {
4293
+ call2.body = bytes.value;
4294
+ }
4295
+ }
4296
+ } catch (err) {
4297
+ log8.debug("Failed to get response body for ".concat(request.request.request, ": ").concat(err.message));
4298
+ }
4299
+ };
4269
4300
  /**
4270
4301
  * It appears that the networkProvideResponse method may throw an "no such request" error even though the request
4271
4302
  * is marked as "blocked", in these cases we can safely ignore the error.
@@ -4608,7 +4639,7 @@ var log13 = logger13("webdriverio:ShadowRootManager");
4608
4639
  function getShadowRootManager(browser) {
4609
4640
  return SessionManager.getSessionManager(browser, ShadowRootManager);
4610
4641
  }
4611
- var _browser6, _initialize2, _shadowRoots, _documentElement, _frameDepth, _handleLogEntryListener, _commandResultHandlerListener, _handleBidiCommandListener, _ShadowRootManager_instances, handleBidiCommand_fn, commandResultHandler_fn;
4642
+ var _browser6, _initialize2, _shadowRoots, _currentDocumentIds, _documentElement, _frameDepth, _handleLogEntryListener, _commandResultHandlerListener, _handleBidiCommandListener, _ShadowRootManager_instances, handleBidiCommand_fn, commandResultHandler_fn;
4612
4643
  var _ShadowRootManager = class _ShadowRootManager extends SessionManager {
4613
4644
  constructor(browser) {
4614
4645
  super(browser, _ShadowRootManager.name);
@@ -4616,6 +4647,7 @@ var _ShadowRootManager = class _ShadowRootManager extends SessionManager {
4616
4647
  __privateAdd(this, _browser6);
4617
4648
  __privateAdd(this, _initialize2);
4618
4649
  __privateAdd(this, _shadowRoots, /* @__PURE__ */ new Map());
4650
+ __privateAdd(this, _currentDocumentIds, /* @__PURE__ */ new Map());
4619
4651
  __privateAdd(this, _documentElement);
4620
4652
  __privateAdd(this, _frameDepth, 0);
4621
4653
  __privateAdd(this, _handleLogEntryListener, this.handleLogEntry.bind(this));
@@ -4656,7 +4688,7 @@ var _ShadowRootManager = class _ShadowRootManager extends SessionManager {
4656
4688
  * capture shadow root elements propagated through console.debug
4657
4689
  */
4658
4690
  handleLogEntry(logEntry) {
4659
- var _a, _b, _c, _d;
4691
+ var _a, _b, _c, _d, _e, _f;
4660
4692
  const args = "args" in logEntry && logEntry.level === "debug" ? logEntry.args : void 0;
4661
4693
  if (!args || args[0].type !== "string" || args[0].value !== "[WDIO]" || args[1].type !== "string") {
4662
4694
  return;
@@ -4676,6 +4708,19 @@ var _ShadowRootManager = class _ShadowRootManager extends SessionManager {
4676
4708
  isDocument,
4677
4709
  documentElement
4678
4710
  ] = args;
4711
+ const ctxId = logEntry.source.context;
4712
+ if (shadowElem.sharedId) {
4713
+ const docMatch = shadowElem.sharedId.match(/\.d\.([A-F0-9]+)\./);
4714
+ if (docMatch) {
4715
+ const newDocId = docMatch[1];
4716
+ const currentDocId = __privateGet(this, _currentDocumentIds).get(ctxId);
4717
+ if (currentDocId && currentDocId !== newDocId) {
4718
+ log13.info("Document changed in context ".concat(ctxId, ": ").concat(currentDocId, " -> ").concat(newDocId, ", purging ").concat((_b = (_a = __privateGet(this, _shadowRoots).get(ctxId)) == null ? void 0 : _a.flat().length) != null ? _b : 0, " stale shadow roots"));
4719
+ __privateGet(this, _shadowRoots).delete(ctxId);
4720
+ }
4721
+ __privateGet(this, _currentDocumentIds).set(ctxId, newDocId);
4722
+ }
4723
+ }
4679
4724
  if (!__privateGet(this, _shadowRoots).has(logEntry.source.context)) {
4680
4725
  if (!rootElem.sharedId) {
4681
4726
  throw new Error('Expected "sharedId" parameter from object '.concat(rootElem));
@@ -4698,10 +4743,10 @@ var _ShadowRootManager = class _ShadowRootManager extends SessionManager {
4698
4743
  if (
4699
4744
  // we expect an element id
4700
4745
  !shadowElem.sharedId || // we expect the element to have a shadow root
4701
- !((_b = (_a = shadowElem.value) == null ? void 0 : _a.shadowRoot) == null ? void 0 : _b.sharedId) || // we expect the shadow root to have a proper type
4702
- ((_c = shadowElem.value.shadowRoot.value) == null ? void 0 : _c.nodeType) !== 11
4746
+ !((_d = (_c = shadowElem.value) == null ? void 0 : _c.shadowRoot) == null ? void 0 : _d.sharedId) || // we expect the shadow root to have a proper type
4747
+ ((_e = shadowElem.value.shadowRoot.value) == null ? void 0 : _e.nodeType) !== 11
4703
4748
  ) {
4704
- return log13.warn("Expected element with shadow root but found <".concat((_d = shadowElem.value) == null ? void 0 : _d.localName, " />"));
4749
+ return log13.warn("Expected element with shadow root but found <".concat((_f = shadowElem.value) == null ? void 0 : _f.localName, " />"));
4705
4750
  }
4706
4751
  log13.info("Registered new shadow root for element <".concat(shadowElem.value.localName, " /> with id ").concat(shadowElem.value.shadowRoot.sharedId));
4707
4752
  const newTree = new ShadowRootTree(
@@ -4716,7 +4761,10 @@ var _ShadowRootManager = class _ShadowRootManager extends SessionManager {
4716
4761
  }
4717
4762
  return;
4718
4763
  }
4719
- if (eventType === "removeShadowRoot" && args[2].type === "node" && args[2].sharedId) {
4764
+ if (eventType === "removeShadowRoot" && args[2].type === "node") {
4765
+ if (!args[2].sharedId) {
4766
+ return log13.warn("Received removeShadowRoot event without sharedId, element may have been garbage collected");
4767
+ }
4720
4768
  const tree = __privateGet(this, _shadowRoots).get(logEntry.source.context);
4721
4769
  if (!tree) {
4722
4770
  return;
@@ -4781,6 +4829,7 @@ var _ShadowRootManager = class _ShadowRootManager extends SessionManager {
4781
4829
  _browser6 = new WeakMap();
4782
4830
  _initialize2 = new WeakMap();
4783
4831
  _shadowRoots = new WeakMap();
4832
+ _currentDocumentIds = new WeakMap();
4784
4833
  _documentElement = new WeakMap();
4785
4834
  _frameDepth = new WeakMap();
4786
4835
  _handleLogEntryListener = new WeakMap();
@@ -4796,6 +4845,7 @@ handleBidiCommand_fn = function(command) {
4796
4845
  }
4797
4846
  const params = command.params;
4798
4847
  __privateGet(this, _shadowRoots).delete(params.context);
4848
+ __privateGet(this, _currentDocumentIds).delete(params.context);
4799
4849
  };
4800
4850
  /**
4801
4851
  * keep track of frame depth
@@ -4826,6 +4876,11 @@ var ShadowRootTree = class _ShadowRootTree {
4826
4876
  throw new Error('Method "addShadowElement" expects at least 2 arguments');
4827
4877
  }
4828
4878
  if (scope instanceof _ShadowRootTree) {
4879
+ for (const child of this.children) {
4880
+ if (child.element === scope.element) {
4881
+ return;
4882
+ }
4883
+ }
4829
4884
  this.children.add(scope);
4830
4885
  return;
4831
4886
  }
@@ -6666,23 +6721,6 @@ async function getClipboard(contentType) {
6666
6721
  }
6667
6722
  }
6668
6723
 
6669
- // src/commands/mobile/queryAppState.ts
6670
- async function queryAppState(appId, bundleId) {
6671
- const browser = this;
6672
- if (!browser.isMobile) {
6673
- throw new Error("The `queryAppState` command is only available for mobile platforms.");
6674
- }
6675
- try {
6676
- return await browser.execute("mobile: queryAppState", { appId, bundleId });
6677
- } catch (err) {
6678
- if (!isUnknownMethodError(err)) {
6679
- throw err;
6680
- }
6681
- logAppiumDeprecationWarning("mobile: queryAppState", "/appium/device/app_state");
6682
- return browser.appiumQueryAppState(appId, bundleId);
6683
- }
6684
- }
6685
-
6686
6724
  // src/commands/mobile/toggleAirplaneMode.ts
6687
6725
  async function toggleAirplaneMode(enabled) {
6688
6726
  const browser = this;
@@ -9555,16 +9593,50 @@ async function findDeepElement(selector) {
9555
9593
  }));
9556
9594
  nodes = returnUniqueNodes(nodes);
9557
9595
  if (!this.elementId) {
9596
+ if (shadowRoots.length > 0 && nodes.length > 0) {
9597
+ for (const node of nodes) {
9598
+ try {
9599
+ const connected = await browser.execute((el) => el.isConnected, node);
9600
+ if (connected) {
9601
+ return node;
9602
+ }
9603
+ shadowRootManager.deleteShadowRoot(node[ELEMENT_KEY20], context);
9604
+ } catch {
9605
+ shadowRootManager.deleteShadowRoot(node[ELEMENT_KEY20], context);
9606
+ }
9607
+ }
9608
+ log29.warn("All ".concat(nodes.length, ' BiDi results for "').concat(value, '" are detached, removed stale entries from shadow root tree'));
9609
+ return void 0;
9610
+ }
9558
9611
  return nodes[0];
9559
9612
  }
9560
9613
  const scopedNodes = await Promise.all(nodes.map(async (node) => {
9561
- const isIn = await browser.execute(
9562
- elementContains,
9563
- { [ELEMENT_KEY20]: this.elementId },
9564
- node
9565
- );
9566
- return [isIn, node];
9614
+ try {
9615
+ const isIn = await browser.execute(
9616
+ elementContains,
9617
+ { [ELEMENT_KEY20]: this.elementId },
9618
+ node
9619
+ );
9620
+ return [isIn, node];
9621
+ } catch {
9622
+ return [false, node];
9623
+ }
9567
9624
  })).then((elems) => elems.filter(([isIn]) => isIn).map(([, elem]) => elem));
9625
+ for (const node of scopedNodes) {
9626
+ try {
9627
+ const connected = await browser.execute((el) => el.isConnected, node);
9628
+ if (connected) {
9629
+ return node;
9630
+ }
9631
+ shadowRootManager.deleteShadowRoot(node[ELEMENT_KEY20], context);
9632
+ } catch {
9633
+ shadowRootManager.deleteShadowRoot(node[ELEMENT_KEY20], context);
9634
+ }
9635
+ }
9636
+ if (scopedNodes.length > 0) {
9637
+ log29.warn("All ".concat(scopedNodes.length, ' scoped BiDi results for "').concat(value, '" are detached, removed stale entries from shadow root tree'));
9638
+ return void 0;
9639
+ }
9568
9640
  return scopedNodes[0];
9569
9641
  }, (err) => {
9570
9642
  log29.warn("Failed to execute browser.browsingContextLocateNodes({ ... }) due to ".concat(err, ", falling back to regular WebDriver Classic command"));
@@ -9594,16 +9666,58 @@ async function findDeepElements(selector) {
9594
9666
  }));
9595
9667
  nodes = returnUniqueNodes(nodes);
9596
9668
  if (!this.elementId) {
9669
+ if (shadowRoots.length > 0 && nodes.length > 0) {
9670
+ const validNodes = [];
9671
+ for (const node of nodes) {
9672
+ try {
9673
+ const connected = await browser.execute((el) => el.isConnected, node);
9674
+ if (connected) {
9675
+ validNodes.push(node);
9676
+ } else {
9677
+ shadowRootManager.deleteShadowRoot(node[ELEMENT_KEY20], context);
9678
+ }
9679
+ } catch {
9680
+ shadowRootManager.deleteShadowRoot(node[ELEMENT_KEY20], context);
9681
+ }
9682
+ }
9683
+ if (validNodes.length > 0) {
9684
+ return validNodes;
9685
+ }
9686
+ return [];
9687
+ }
9597
9688
  return nodes;
9598
9689
  }
9599
9690
  const scopedNodes = await Promise.all(nodes.map(async (node) => {
9600
- const isIn = await browser.execute(
9601
- elementContains,
9602
- { [ELEMENT_KEY20]: this.elementId },
9603
- node
9604
- );
9605
- return [isIn, node];
9691
+ try {
9692
+ const isIn = await browser.execute(
9693
+ elementContains,
9694
+ { [ELEMENT_KEY20]: this.elementId },
9695
+ node
9696
+ );
9697
+ return [isIn, node];
9698
+ } catch {
9699
+ return [false, node];
9700
+ }
9606
9701
  })).then((elems) => elems.filter(([isIn]) => isIn).map(([, elem]) => elem));
9702
+ const connectedScopedNodes = [];
9703
+ for (const node of scopedNodes) {
9704
+ try {
9705
+ const connected = await browser.execute((el) => el.isConnected, node);
9706
+ if (connected) {
9707
+ connectedScopedNodes.push(node);
9708
+ } else {
9709
+ shadowRootManager.deleteShadowRoot(node[ELEMENT_KEY20], context);
9710
+ }
9711
+ } catch {
9712
+ shadowRootManager.deleteShadowRoot(node[ELEMENT_KEY20], context);
9713
+ }
9714
+ }
9715
+ if (connectedScopedNodes.length > 0) {
9716
+ return connectedScopedNodes;
9717
+ }
9718
+ if (scopedNodes.length > 0) {
9719
+ return [];
9720
+ }
9607
9721
  return scopedNodes;
9608
9722
  }, (err) => {
9609
9723
  log29.warn("Failed to execute browser.browsingContextLocateNodes({ ... }) due to ".concat(err, ", falling back to regular WebDriver Classic command"));
package/build/node.js CHANGED
@@ -760,7 +760,6 @@ __export(browser_exports, {
760
760
  powerAC: () => powerAC,
761
761
  powerCapacity: () => powerCapacity,
762
762
  pressKeyCode: () => pressKeyCode,
763
- queryAppState: () => queryAppState,
764
763
  react$: () => react$,
765
764
  react$$: () => react$$,
766
765
  relaunchActiveApp: () => relaunchActiveApp,
@@ -3753,7 +3752,7 @@ async function executeAsync(script, ...args) {
3753
3752
  // src/commands/browser/getCookies.ts
3754
3753
  import logger7 from "@wdio/logger";
3755
3754
  var log7 = logger7("webdriverio");
3756
- async function getCookies(filter) {
3755
+ async function getCookies(filter, sourceOrigin) {
3757
3756
  const usesMultipleFilter = Array.isArray(filter) && filter.length > 1;
3758
3757
  if (!this.isBidi || usesMultipleFilter) {
3759
3758
  return getCookiesClassic.call(this, filter);
@@ -3768,10 +3767,10 @@ async function getCookies(filter) {
3768
3767
  } catch {
3769
3768
  return getCookiesClassic.call(this, filter);
3770
3769
  }
3771
- const params = {
3770
+ const params = sourceOrigin === null ? {} : {
3772
3771
  partition: {
3773
3772
  type: "storageKey",
3774
- sourceOrigin: url2.origin
3773
+ sourceOrigin: sourceOrigin || url2.origin
3775
3774
  }
3776
3775
  };
3777
3776
  if (typeof cookieFilter !== "undefined") {
@@ -4122,6 +4121,7 @@ function getPatternParam(pattern, key) {
4122
4121
 
4123
4122
  // src/utils/interception/index.ts
4124
4123
  var log9 = logger9("WebDriverInterception");
4124
+ var DEFAULT_SPY_COLLECTED_BODY_SIZE = 10 * 1024 * 1024;
4125
4125
  var hasSubscribedToEvents = false;
4126
4126
  var WebDriverInterception = class _WebDriverInterception {
4127
4127
  #pattern;
@@ -4133,7 +4133,7 @@ var WebDriverInterception = class _WebDriverInterception {
4133
4133
  #requestOverwrites = [];
4134
4134
  #respondOverwrites = [];
4135
4135
  #calls = [];
4136
- #responseBodies = /* @__PURE__ */ new Map();
4136
+ #overwrittenResponseBodies = /* @__PURE__ */ new Map();
4137
4137
  constructor(pattern, mockId, filterOptions, browser) {
4138
4138
  this.#pattern = pattern;
4139
4139
  this.#mockId = mockId;
@@ -4141,6 +4141,7 @@ var WebDriverInterception = class _WebDriverInterception {
4141
4141
  this.#browser = browser;
4142
4142
  browser.on("network.beforeRequestSent", this.#handleBeforeRequestSent.bind(this));
4143
4143
  browser.on("network.responseStarted", this.#handleResponseStarted.bind(this));
4144
+ browser.on("network.responseCompleted", this.#handleResponseCompleted.bind(this));
4144
4145
  }
4145
4146
  static async initiate(url2, filterOptions, browser) {
4146
4147
  const pattern = parseUrlPattern(url2);
@@ -4148,9 +4149,20 @@ var WebDriverInterception = class _WebDriverInterception {
4148
4149
  await browser.sessionSubscribe({
4149
4150
  events: [
4150
4151
  "network.beforeRequestSent",
4151
- "network.responseStarted"
4152
+ "network.responseStarted",
4153
+ "network.responseCompleted"
4152
4154
  ]
4153
4155
  });
4156
+ try {
4157
+ if (browser.options.maxSpyCollectedBodySize !== 0) {
4158
+ await browser.networkAddDataCollector({
4159
+ dataTypes: ["response"],
4160
+ maxEncodedDataSize: typeof browser.options.maxSpyCollectedBodySize === "number" ? browser.options.maxSpyCollectedBodySize : DEFAULT_SPY_COLLECTED_BODY_SIZE
4161
+ });
4162
+ }
4163
+ } catch (error) {
4164
+ log9.warn(`[BiDi] network.addDataCollector not supported: ${error?.message}`);
4165
+ }
4154
4166
  log9.info("subscribed to network events");
4155
4167
  hasSubscribedToEvents = true;
4156
4168
  }
@@ -4243,7 +4255,7 @@ var WebDriverInterception = class _WebDriverInterception {
4243
4255
  this.#emit("overwrite", request);
4244
4256
  const responseData = parseOverwrite(overwrite, request);
4245
4257
  if (responseData.body) {
4246
- this.#responseBodies.set(request.request.request, responseData.body);
4258
+ this.#overwrittenResponseBodies.set(request.request.request, responseData.body);
4247
4259
  }
4248
4260
  return this.#browser.networkProvideResponse({
4249
4261
  request: request.request.request,
@@ -4255,6 +4267,25 @@ var WebDriverInterception = class _WebDriverInterception {
4255
4267
  request: request.request.request
4256
4268
  }).catch(this.#handleNetworkProvideResponseError);
4257
4269
  }
4270
+ async #handleResponseCompleted(request) {
4271
+ if (this.#browser.options.maxSpyCollectedBodySize === 0 || !this.#pattern.test(request.request.url) || !this.#matchesFilterOptions(request)) {
4272
+ return;
4273
+ }
4274
+ try {
4275
+ const { bytes } = await this.#browser.networkGetData({
4276
+ request: request.request.request,
4277
+ dataType: "response"
4278
+ });
4279
+ if (bytes) {
4280
+ const call2 = this.#calls.find((call3) => call3.request.request === request.request.request);
4281
+ if (call2) {
4282
+ call2.body = bytes.value;
4283
+ }
4284
+ }
4285
+ } catch (err) {
4286
+ log9.debug(`Failed to get response body for ${request.request.request}: ${err.message}`);
4287
+ }
4288
+ }
4258
4289
  /**
4259
4290
  * It appears that the networkProvideResponse method may throw an "no such request" error even though the request
4260
4291
  * is marked as "blocked", in these cases we can safely ignore the error.
@@ -4272,7 +4303,7 @@ var WebDriverInterception = class _WebDriverInterception {
4272
4303
  * @returns {Buffer | null} The binary data as a Buffer, or null if no matching binary response is found
4273
4304
  */
4274
4305
  getBinaryResponse(requestId) {
4275
- const body = this.#responseBodies.get(requestId);
4306
+ const body = this.#overwrittenResponseBodies.get(requestId);
4276
4307
  if (body?.type !== "base64") {
4277
4308
  return null;
4278
4309
  }
@@ -4295,7 +4326,7 @@ var WebDriverInterception = class _WebDriverInterception {
4295
4326
  }
4296
4327
  }
4297
4328
  debugResponseBodies() {
4298
- return this.#responseBodies;
4329
+ return this.#overwrittenResponseBodies;
4299
4330
  }
4300
4331
  #isRequestMatching(request) {
4301
4332
  const matches = this.#pattern && this.#pattern.test(request.request.url);
@@ -4352,7 +4383,7 @@ var WebDriverInterception = class _WebDriverInterception {
4352
4383
  */
4353
4384
  clear() {
4354
4385
  this.#calls = [];
4355
- this.#responseBodies.clear();
4386
+ this.#overwrittenResponseBodies.clear();
4356
4387
  return this;
4357
4388
  }
4358
4389
  /**
@@ -4691,6 +4722,7 @@ var ShadowRootManager = class _ShadowRootManager extends SessionManager {
4691
4722
  #browser;
4692
4723
  #initialize;
4693
4724
  #shadowRoots = /* @__PURE__ */ new Map();
4725
+ #currentDocumentIds = /* @__PURE__ */ new Map();
4694
4726
  #documentElement;
4695
4727
  #frameDepth = 0;
4696
4728
  #handleLogEntryListener = this.handleLogEntry.bind(this);
@@ -4731,6 +4763,7 @@ var ShadowRootManager = class _ShadowRootManager extends SessionManager {
4731
4763
  }
4732
4764
  const params = command.params;
4733
4765
  this.#shadowRoots.delete(params.context);
4766
+ this.#currentDocumentIds.delete(params.context);
4734
4767
  }
4735
4768
  /**
4736
4769
  * keep track of frame depth
@@ -4774,6 +4807,19 @@ var ShadowRootManager = class _ShadowRootManager extends SessionManager {
4774
4807
  isDocument,
4775
4808
  documentElement
4776
4809
  ] = args;
4810
+ const ctxId = logEntry.source.context;
4811
+ if (shadowElem.sharedId) {
4812
+ const docMatch = shadowElem.sharedId.match(/\.d\.([A-F0-9]+)\./);
4813
+ if (docMatch) {
4814
+ const newDocId = docMatch[1];
4815
+ const currentDocId = this.#currentDocumentIds.get(ctxId);
4816
+ if (currentDocId && currentDocId !== newDocId) {
4817
+ log14.info(`Document changed in context ${ctxId}: ${currentDocId} -> ${newDocId}, purging ${this.#shadowRoots.get(ctxId)?.flat().length ?? 0} stale shadow roots`);
4818
+ this.#shadowRoots.delete(ctxId);
4819
+ }
4820
+ this.#currentDocumentIds.set(ctxId, newDocId);
4821
+ }
4822
+ }
4777
4823
  if (!this.#shadowRoots.has(logEntry.source.context)) {
4778
4824
  if (!rootElem.sharedId) {
4779
4825
  throw new Error(`Expected "sharedId" parameter from object ${rootElem}`);
@@ -4814,7 +4860,10 @@ var ShadowRootManager = class _ShadowRootManager extends SessionManager {
4814
4860
  }
4815
4861
  return;
4816
4862
  }
4817
- if (eventType === "removeShadowRoot" && args[2].type === "node" && args[2].sharedId) {
4863
+ if (eventType === "removeShadowRoot" && args[2].type === "node") {
4864
+ if (!args[2].sharedId) {
4865
+ return log14.warn("Received removeShadowRoot event without sharedId, element may have been garbage collected");
4866
+ }
4818
4867
  const tree = this.#shadowRoots.get(logEntry.source.context);
4819
4868
  if (!tree) {
4820
4869
  return;
@@ -4891,6 +4940,11 @@ var ShadowRootTree = class _ShadowRootTree {
4891
4940
  throw new Error('Method "addShadowElement" expects at least 2 arguments');
4892
4941
  }
4893
4942
  if (scope instanceof _ShadowRootTree) {
4943
+ for (const child of this.children) {
4944
+ if (child.element === scope.element) {
4945
+ return;
4946
+ }
4947
+ }
4894
4948
  this.children.add(scope);
4895
4949
  return;
4896
4950
  }
@@ -6693,23 +6747,6 @@ async function getClipboard(contentType) {
6693
6747
  }
6694
6748
  }
6695
6749
 
6696
- // src/commands/mobile/queryAppState.ts
6697
- async function queryAppState(appId, bundleId) {
6698
- const browser = this;
6699
- if (!browser.isMobile) {
6700
- throw new Error("The `queryAppState` command is only available for mobile platforms.");
6701
- }
6702
- try {
6703
- return await browser.execute("mobile: queryAppState", { appId, bundleId });
6704
- } catch (err) {
6705
- if (!isUnknownMethodError(err)) {
6706
- throw err;
6707
- }
6708
- logAppiumDeprecationWarning("mobile: queryAppState", "/appium/device/app_state");
6709
- return browser.appiumQueryAppState(appId, bundleId);
6710
- }
6711
- }
6712
-
6713
6750
  // src/commands/mobile/toggleAirplaneMode.ts
6714
6751
  async function toggleAirplaneMode(enabled) {
6715
6752
  const browser = this;
@@ -9224,16 +9261,50 @@ async function findDeepElement(selector) {
9224
9261
  }));
9225
9262
  nodes = returnUniqueNodes(nodes);
9226
9263
  if (!this.elementId) {
9264
+ if (shadowRoots.length > 0 && nodes.length > 0) {
9265
+ for (const node of nodes) {
9266
+ try {
9267
+ const connected = await browser.execute((el) => el.isConnected, node);
9268
+ if (connected) {
9269
+ return node;
9270
+ }
9271
+ shadowRootManager.deleteShadowRoot(node[ELEMENT_KEY20], context);
9272
+ } catch {
9273
+ shadowRootManager.deleteShadowRoot(node[ELEMENT_KEY20], context);
9274
+ }
9275
+ }
9276
+ log30.warn(`All ${nodes.length} BiDi results for "${value}" are detached, removed stale entries from shadow root tree`);
9277
+ return void 0;
9278
+ }
9227
9279
  return nodes[0];
9228
9280
  }
9229
9281
  const scopedNodes = await Promise.all(nodes.map(async (node) => {
9230
- const isIn = await browser.execute(
9231
- elementContains,
9232
- { [ELEMENT_KEY20]: this.elementId },
9233
- node
9234
- );
9235
- return [isIn, node];
9282
+ try {
9283
+ const isIn = await browser.execute(
9284
+ elementContains,
9285
+ { [ELEMENT_KEY20]: this.elementId },
9286
+ node
9287
+ );
9288
+ return [isIn, node];
9289
+ } catch {
9290
+ return [false, node];
9291
+ }
9236
9292
  })).then((elems) => elems.filter(([isIn]) => isIn).map(([, elem]) => elem));
9293
+ for (const node of scopedNodes) {
9294
+ try {
9295
+ const connected = await browser.execute((el) => el.isConnected, node);
9296
+ if (connected) {
9297
+ return node;
9298
+ }
9299
+ shadowRootManager.deleteShadowRoot(node[ELEMENT_KEY20], context);
9300
+ } catch {
9301
+ shadowRootManager.deleteShadowRoot(node[ELEMENT_KEY20], context);
9302
+ }
9303
+ }
9304
+ if (scopedNodes.length > 0) {
9305
+ log30.warn(`All ${scopedNodes.length} scoped BiDi results for "${value}" are detached, removed stale entries from shadow root tree`);
9306
+ return void 0;
9307
+ }
9237
9308
  return scopedNodes[0];
9238
9309
  }, (err) => {
9239
9310
  log30.warn(`Failed to execute browser.browsingContextLocateNodes({ ... }) due to ${err}, falling back to regular WebDriver Classic command`);
@@ -9263,16 +9334,58 @@ async function findDeepElements(selector) {
9263
9334
  }));
9264
9335
  nodes = returnUniqueNodes(nodes);
9265
9336
  if (!this.elementId) {
9337
+ if (shadowRoots.length > 0 && nodes.length > 0) {
9338
+ const validNodes = [];
9339
+ for (const node of nodes) {
9340
+ try {
9341
+ const connected = await browser.execute((el) => el.isConnected, node);
9342
+ if (connected) {
9343
+ validNodes.push(node);
9344
+ } else {
9345
+ shadowRootManager.deleteShadowRoot(node[ELEMENT_KEY20], context);
9346
+ }
9347
+ } catch {
9348
+ shadowRootManager.deleteShadowRoot(node[ELEMENT_KEY20], context);
9349
+ }
9350
+ }
9351
+ if (validNodes.length > 0) {
9352
+ return validNodes;
9353
+ }
9354
+ return [];
9355
+ }
9266
9356
  return nodes;
9267
9357
  }
9268
9358
  const scopedNodes = await Promise.all(nodes.map(async (node) => {
9269
- const isIn = await browser.execute(
9270
- elementContains,
9271
- { [ELEMENT_KEY20]: this.elementId },
9272
- node
9273
- );
9274
- return [isIn, node];
9359
+ try {
9360
+ const isIn = await browser.execute(
9361
+ elementContains,
9362
+ { [ELEMENT_KEY20]: this.elementId },
9363
+ node
9364
+ );
9365
+ return [isIn, node];
9366
+ } catch {
9367
+ return [false, node];
9368
+ }
9275
9369
  })).then((elems) => elems.filter(([isIn]) => isIn).map(([, elem]) => elem));
9370
+ const connectedScopedNodes = [];
9371
+ for (const node of scopedNodes) {
9372
+ try {
9373
+ const connected = await browser.execute((el) => el.isConnected, node);
9374
+ if (connected) {
9375
+ connectedScopedNodes.push(node);
9376
+ } else {
9377
+ shadowRootManager.deleteShadowRoot(node[ELEMENT_KEY20], context);
9378
+ }
9379
+ } catch {
9380
+ shadowRootManager.deleteShadowRoot(node[ELEMENT_KEY20], context);
9381
+ }
9382
+ }
9383
+ if (connectedScopedNodes.length > 0) {
9384
+ return connectedScopedNodes;
9385
+ }
9386
+ if (scopedNodes.length > 0) {
9387
+ return [];
9388
+ }
9276
9389
  return scopedNodes;
9277
9390
  }, (err) => {
9278
9391
  log30.warn(`Failed to execute browser.browsingContextLocateNodes({ ... }) due to ${err}, falling back to regular WebDriver Classic command`);
@@ -1 +1 @@
1
- {"version":3,"file":"shadowRoot.d.ts","sourceRoot":"","sources":["../../src/session/shadowRoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,WAAW,CAAA;AAKtC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAK7C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,qBAEhE;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,cAAc;;gBAWrC,OAAO,EAAE,WAAW,CAAC,OAAO;IA0BxC,eAAe,IAAI,IAAI;IAOjB,UAAU;IA4BhB;;;OAGG;IACH,aAAa;IAIb;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ;IAkGvC,4BAA4B,CAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAkC1E,gCAAgC,CAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE;IAgBpG,qBAAqB,CAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IActF,gBAAgB,CAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAOvD;AAED,qBAAa,cAAc;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,QAAQ,sBAA4B;gBAEvB,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc;IAMxE;;OAEG;IACH,gBAAgB,CAAE,IAAI,EAAE,cAAc,GAAG,IAAI;IAC7C;;;;;OAKG;IACH,gBAAgB,CAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI;IA6B5D,IAAI,CAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAelD,cAAc,CAAE,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAe/D,kBAAkB,IAAK,MAAM,EAAE;IAO/B,IAAI,IAAK,cAAc,EAAE;IAIzB,MAAM,CAAE,OAAO,EAAE,MAAM,GAAG,OAAO;CAepC"}
1
+ {"version":3,"file":"shadowRoot.d.ts","sourceRoot":"","sources":["../../src/session/shadowRoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,WAAW,CAAA;AAKtC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAK7C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,qBAEhE;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,cAAc;;gBAYrC,OAAO,EAAE,WAAW,CAAC,OAAO;IA0BxC,eAAe,IAAI,IAAI;IAOjB,UAAU;IA6BhB;;;OAGG;IACH,aAAa;IAIb;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ;IA8HvC,4BAA4B,CAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAkC1E,gCAAgC,CAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE;IAgBpG,qBAAqB,CAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IActF,gBAAgB,CAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAOvD;AAED,qBAAa,cAAc;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,QAAQ,sBAA4B;gBAEvB,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc;IAMxE;;OAEG;IACH,gBAAgB,CAAE,IAAI,EAAE,cAAc,GAAG,IAAI;IAC7C;;;;;OAKG;IACH,gBAAgB,CAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI;IAkC5D,IAAI,CAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAelD,cAAc,CAAE,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAe/D,kBAAkB,IAAK,MAAM,EAAE;IAO/B,IAAI,IAAK,cAAc,EAAE;IAIzB,MAAM,CAAE,OAAO,EAAE,MAAM,GAAG,OAAO;CAepC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { JsonCompatible } from '@wdio/types';
2
2
  import { type local, type remote } from 'webdriver';
3
3
  import { URLPattern } from 'urlpattern-polyfill';
4
- import type { MockFilterOptions, RequestWithOptions, RespondWithOptions } from './types.js';
4
+ import type { MockFilterOptions, RequestWithOptions, RespondWithOptions, Response } from './types.js';
5
5
  import type { WaitForOptions } from '../../types.js';
6
6
  type RespondBody = string | JsonCompatible | Buffer;
7
7
  /**
@@ -24,12 +24,12 @@ export default class WebDriverInterception {
24
24
  * Simulate a responseStarted event for testing purposes
25
25
  * @param request NetworkResponseCompletedParameters to simulate
26
26
  */
27
- simulateResponseStarted(request: local.NetworkResponseCompletedParameters): void;
27
+ simulateResponseStarted(request: Response): void;
28
28
  debugResponseBodies(): Map<string, remote.NetworkBytesValue>;
29
29
  /**
30
30
  * allows access to all requests made with given pattern
31
31
  */
32
- get calls(): local.NetworkResponseCompletedParameters[];
32
+ get calls(): Response[];
33
33
  /**
34
34
  * Resets all information stored in the `mock.calls` set.
35
35
  */
@@ -92,7 +92,7 @@ export default class WebDriverInterception {
92
92
  on(event: 'match', callback: (match: local.NetworkBeforeRequestSentParameters) => void): WebDriverInterception;
93
93
  on(event: 'continue', callback: (requestId: string) => void): WebDriverInterception;
94
94
  on(event: 'fail', callback: (requestId: string) => void): WebDriverInterception;
95
- on(event: 'overwrite', callback: (response: local.NetworkResponseCompletedParameters) => void): WebDriverInterception;
95
+ on(event: 'overwrite', callback: (response: Response) => void): WebDriverInterception;
96
96
  waitForResponse({ timeout, interval, timeoutMsg, }?: WaitForOptions): Promise<boolean> | Promise<Promise<boolean>>;
97
97
  }
98
98
  export declare function parseUrlPattern(url: string | URLPattern): URLPattern;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/interception/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAKhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC3F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAMpD,KAAK,WAAW,GAAG,MAAM,GAAG,cAAc,GAAG,MAAM,CAAA;AAOnD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,qBAAqB;;gBAclC,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,iBAAiB,EAChC,OAAO,EAAE,WAAW,CAAC,OAAO;WAcnB,QAAQ,CACjB,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,iBAAiB,EAChC,OAAO,EAAE,WAAW,CAAC,OAAO;IAiMhC;;;;OAIG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAYnD;;;OAGG;IACI,uBAAuB,CAAC,OAAO,EAAE,KAAK,CAAC,kCAAkC,GAAG,IAAI;IAShF,mBAAmB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC;IAwEnE;;OAEG;IACH,IAAI,KAAK,IAAI,KAAK,CAAC,kCAAkC,EAAE,CAEtD;IAED;;OAEG;IACH,KAAK;IAML;;;OAGG;IACH,KAAK;IAOL;;;;OAIG;IACG,OAAO;IAgBb;;;;;OAKG;IACH,OAAO,CAAC,SAAS,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,OAAO;IAMrD;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,kBAAkB;IAIvC;;;;;;OAMG;IACH,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,GAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAM,EAAE,IAAI,CAAC,EAAE,OAAO;IAU3F;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,GAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAM;IAI/E;;;;OAIG;IACH,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO;IAMpB;;OAEG;IACH,SAAS;IAIT;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;IAO5C;;OAEG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM;IAIhC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,kCAAkC,KAAK,IAAI,GAAG,qBAAqB;IAClH,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,kCAAkC,KAAK,IAAI,GAAG,qBAAqB;IAC9G,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,qBAAqB;IACnF,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,qBAAqB;IAC/E,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,kCAAkC,KAAK,IAAI,GAAG,qBAAqB;IAarH,eAAe,CAAC,EACZ,OAA8C,EAC9C,QAAgD,EAChD,UAAU,GACb,GAAE,cAAmB;CA2BzB;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,cAqBvD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/interception/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAKhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAQpD,KAAK,WAAW,GAAG,MAAM,GAAG,cAAc,GAAG,MAAM,CAAA;AAOnD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,qBAAqB;;gBAclC,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,iBAAiB,EAChC,OAAO,EAAE,WAAW,CAAC,OAAO;WAenB,QAAQ,CACjB,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,iBAAiB,EAChC,OAAO,EAAE,WAAW,CAAC,OAAO;IAiPhC;;;;OAIG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAYnD;;;OAGG;IACI,uBAAuB,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI;IAShD,mBAAmB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC;IAwEnE;;OAEG;IACH,IAAI,KAAK,IAAI,QAAQ,EAAE,CAEtB;IAED;;OAEG;IACH,KAAK;IAML;;;OAGG;IACH,KAAK;IAOL;;;;OAIG;IACG,OAAO;IAgBb;;;;;OAKG;IACH,OAAO,CAAC,SAAS,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,OAAO;IAMrD;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,kBAAkB;IAIvC;;;;;;OAMG;IACH,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,GAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAM,EAAE,IAAI,CAAC,EAAE,OAAO;IAU3F;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,GAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAM;IAI/E;;;;OAIG;IACH,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO;IAMpB;;OAEG;IACH,SAAS;IAIT;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;IAO5C;;OAEG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM;IAIhC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,kCAAkC,KAAK,IAAI,GAAG,qBAAqB;IAClH,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,kCAAkC,KAAK,IAAI,GAAG,qBAAqB;IAC9G,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,qBAAqB;IACnF,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,qBAAqB;IAC/E,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,GAAG,qBAAqB;IAarF,eAAe,CAAC,EACZ,OAA8C,EAC9C,QAAgD,EAChD,UAAU,GACb,GAAE,cAAmB;CA2BzB;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,cAqBvD"}
@@ -1,5 +1,8 @@
1
1
  import type { local } from 'webdriver';
2
2
  import type { Cookie } from '@wdio/protocols';
3
+ export interface Response extends local.NetworkResponseCompletedParameters {
4
+ body?: string;
5
+ }
3
6
  export type MockFilterOptions = {
4
7
  method?: string | ((method: string) => boolean);
5
8
  requestHeaders?: Record<string, string> | ((headers: Record<string, string>) => boolean);
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/interception/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,MAAM,MAAM,iBAAiB,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,CAAA;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,CAAA;IACxF,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,CAAA;IACzF,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,CAAA;CAC1D,CAAA;AAED,KAAK,SAAS,CAAE,CAAC,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,CAAC,CAAC,CAAA;AAC3D,KAAK,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;AAE/E,MAAM,WAAW,kBAAkB;IAE/B,IAAI,CAAC,EAAE,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,kCAAkC,CAAC,CAAA;IAC/D,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACvE,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACrF,MAAM,CAAC,EAAE,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACrE,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,kCAAkC,CAAC,CAAA;CACpE;AAED,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,kBAAkB,EAAE,KAAK,GAAG,QAAQ,CAAC;IAClF,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,kCAAkC,CAAC,CAAA;CAC3E;AAED,MAAM,WAAW,kBAAkB;IAC/B,WAAW,CAAC,EAAE,kBAAkB,CAAA;CACnC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/interception/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,MAAM,WAAW,QAAS,SAAQ,KAAK,CAAC,kCAAkC;IACtE,IAAI,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,CAAA;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,CAAA;IACxF,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,CAAA;IACzF,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,CAAA;CAC1D,CAAA;AAED,KAAK,SAAS,CAAE,CAAC,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,CAAC,CAAC,CAAA;AAC3D,KAAK,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;AAE/E,MAAM,WAAW,kBAAkB;IAE/B,IAAI,CAAC,EAAE,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,kCAAkC,CAAC,CAAA;IAC/D,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACvE,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACrF,MAAM,CAAC,EAAE,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACrE,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,kCAAkC,CAAC,CAAA;CACpE;AAED,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,kBAAkB,EAAE,KAAK,GAAG,QAAQ,CAAC;IAClF,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,kCAAkC,CAAC,CAAA;CAC3E;AAED,MAAM,WAAW,kBAAkB;IAC/B,WAAW,CAAC,EAAE,kBAAkB,CAAA;CACnC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "webdriverio",
3
3
  "description": "Next-gen browser and mobile automation test framework for Node.js",
4
- "version": "9.26.1",
4
+ "version": "9.27.1",
5
5
  "homepage": "https://webdriver.io",
6
6
  "author": "Christian Bromann <mail@bromann.dev>",
7
7
  "license": "MIT",
@@ -77,12 +77,12 @@
77
77
  "dependencies": {
78
78
  "@types/node": "^20.11.30",
79
79
  "@types/sinonjs__fake-timers": "^8.1.5",
80
- "@wdio/config": "9.26.1",
80
+ "@wdio/config": "9.27.1",
81
81
  "@wdio/logger": "9.18.0",
82
- "@wdio/protocols": "9.26.1",
82
+ "@wdio/protocols": "9.27.1",
83
83
  "@wdio/repl": "9.16.2",
84
- "@wdio/types": "9.26.1",
85
- "@wdio/utils": "9.26.1",
84
+ "@wdio/types": "9.27.1",
85
+ "@wdio/utils": "9.27.1",
86
86
  "archiver": "^7.0.1",
87
87
  "aria-query": "^5.3.0",
88
88
  "cheerio": "^1.0.0-rc.12",
@@ -99,7 +99,7 @@
99
99
  "rgb2hex": "0.2.5",
100
100
  "serialize-error": "^12.0.0",
101
101
  "urlpattern-polyfill": "^10.0.0",
102
- "webdriver": "9.26.1"
102
+ "webdriver": "9.27.1"
103
103
  },
104
104
  "peerDependencies": {
105
105
  "puppeteer-core": ">=22.x || <=24.x"
@@ -109,5 +109,5 @@
109
109
  "optional": true
110
110
  }
111
111
  },
112
- "gitHead": "0149a736235a2fb00f84a50652193bb92c24cd8f"
112
+ "gitHead": "e2b5652f61da0858251860e7d3bc0c0aaffbb525"
113
113
  }
@@ -1,32 +0,0 @@
1
- /**
2
- *
3
- * Get the state of a given application on the device.
4
- *
5
- * > **Note:** Falls back to the deprecated Appium 2 protocol endpoint if the driver does not support the `mobile:` execute method.
6
- *
7
- * Returns one of the following numeric states:
8
- * - `0` — Not installed
9
- * - `1` — Not running
10
- * - `2` — Running in background (suspended)
11
- * - `3` — Running in background
12
- * - `4` — Running in foreground
13
- *
14
- * <example>
15
- :queryAppState.js
16
- it('should get the app state', async () => {
17
- // Check app state on Android
18
- const state = await browser.queryAppState('com.example.app')
19
- // Check app state on iOS
20
- const iosState = await browser.queryAppState(undefined, 'com.example.app')
21
- })
22
- * </example>
23
- *
24
- * @param {string} [appId] Application package name (Android).
25
- * @param {string} [bundleId] Application bundle identifier (iOS).
26
- *
27
- * @returns {`Promise<number>`} The application state (0–4).
28
- *
29
- * @support ["ios","android"]
30
- */
31
- export declare function queryAppState(this: WebdriverIO.Browser, appId?: string, bundleId?: string): Promise<number>;
32
- //# sourceMappingURL=queryAppState.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queryAppState.d.ts","sourceRoot":"","sources":["../../../src/commands/mobile/queryAppState.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,aAAa,CAC/B,IAAI,EAAE,WAAW,CAAC,OAAO,EACzB,KAAK,CAAC,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAiBjB"}