webdriverio 9.7.2 → 9.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/node.js CHANGED
@@ -143,8 +143,8 @@ var SessionManager = class {
143
143
  * @param browser WebdriverIO.Browser
144
144
  * @param scope scope of the session manager, e.g. context, network etc.
145
145
  */
146
- constructor(browser, scope) {
147
- this.#browser = browser;
146
+ constructor(browser2, scope) {
147
+ this.#browser = browser2;
148
148
  this.#browser.on("command", this.#onCommand.bind(this));
149
149
  this.#scope = scope;
150
150
  }
@@ -174,17 +174,17 @@ var SessionManager = class {
174
174
  !process.env.WDIO_UNIT_TESTS
175
175
  );
176
176
  }
177
- static getSessionManager(browser, Manager) {
177
+ static getSessionManager(browser2, Manager) {
178
178
  const scope = Manager.name;
179
179
  let sessionManagerInstances = sessionManager.get(scope);
180
180
  if (!sessionManagerInstances) {
181
181
  sessionManagerInstances = /* @__PURE__ */ new Map();
182
182
  sessionManager.set(scope, sessionManagerInstances);
183
183
  }
184
- let sessionManagerInstance = sessionManagerInstances.get(browser);
184
+ let sessionManagerInstance = sessionManagerInstances.get(browser2);
185
185
  if (!sessionManagerInstance) {
186
- sessionManagerInstance = new Manager(browser);
187
- sessionManagerInstances.set(browser, sessionManagerInstance);
186
+ sessionManagerInstance = new Manager(browser2);
187
+ sessionManagerInstances.set(browser2, sessionManagerInstance);
188
188
  }
189
189
  return sessionManagerInstance;
190
190
  }
@@ -211,19 +211,19 @@ function getMobileContext({ capabilities, isAndroid, isNativeContext }) {
211
211
  isAndroid && capabilities?.browserName?.toLowerCase() === "chrome" ? "CHROMIUM" : void 0
212
212
  );
213
213
  }
214
- function calculateAndroidPinchAndZoomSpeed({ browser, duration, scale }) {
215
- const deviceScreenSize = (browser.capabilities?.deviceScreenSize || "1080x2400").split("x").reduce((a, b) => a * b);
214
+ function calculateAndroidPinchAndZoomSpeed({ browser: browser2, duration, scale }) {
215
+ const deviceScreenSize = (browser2.capabilities?.deviceScreenSize || "1080x2400").split("x").reduce((a, b) => a * b);
216
216
  const baseDistance = Math.sqrt(deviceScreenSize);
217
217
  const gestureDistance = Math.max(baseDistance * Math.abs(scale), baseDistance * 0.1);
218
218
  const durationSeconds = duration / 1e3;
219
219
  return Math.floor(gestureDistance / durationSeconds);
220
220
  }
221
- function validatePinchAndZoomOptions({ browser, gesture, options }) {
221
+ function validatePinchAndZoomOptions({ browser: browser2, gesture, options }) {
222
222
  if (typeof options !== "undefined" && (typeof options !== "object" || Array.isArray(options))) {
223
223
  throw new TypeError("Options must be an object");
224
224
  }
225
225
  const DEFAULT_SCALE = 0.5;
226
- const DEFAULT_DURATION = browser.isIOS ? 1.5 : 1500;
226
+ const DEFAULT_DURATION = browser2.isIOS ? 1.5 : 1500;
227
227
  const MIN_SCALE = 0;
228
228
  const MAX_SCALE = 1;
229
229
  const MIN_DURATION_MS = 500;
@@ -232,29 +232,29 @@ function validatePinchAndZoomOptions({ browser, gesture, options }) {
232
232
  const scale = typeof scaleOption === "number" ? scaleOption >= MIN_SCALE && scaleOption <= MAX_SCALE ? scaleOption : (() => {
233
233
  throw new Error(`The 'scale' option must be a number between ${MIN_SCALE} and ${MAX_SCALE}`);
234
234
  })() : DEFAULT_SCALE;
235
- const duration = typeof durationOption === "number" ? durationOption >= MIN_DURATION_MS && durationOption <= MAX_DURATION_MS ? browser.isIOS ? durationOption / 1e3 : durationOption : (() => {
235
+ const duration = typeof durationOption === "number" ? durationOption >= MIN_DURATION_MS && durationOption <= MAX_DURATION_MS ? browser2.isIOS ? durationOption / 1e3 : durationOption : (() => {
236
236
  throw new Error(`The 'duration' option must be between ${MIN_DURATION_MS} and ${MAX_DURATION_MS} ms (${MIN_DURATION_MS / 1e3} and ${MAX_DURATION_MS / 1e3} seconds)`);
237
237
  })() : DEFAULT_DURATION;
238
238
  return {
239
239
  duration,
240
- scale: browser.isIOS && gesture === "zoom" ? scale * 10 : scale
240
+ scale: browser2.isIOS && gesture === "zoom" ? scale * 10 : scale
241
241
  };
242
242
  }
243
243
 
244
244
  // src/session/context.ts
245
245
  var log2 = logger2("webdriverio:context");
246
246
  var COMMANDS_REQUIRING_RESET = ["deleteSession", "refresh", "switchToParentFrame"];
247
- function getContextManager(browser) {
248
- return SessionManager.getSessionManager(browser, ContextManager);
247
+ function getContextManager(browser2) {
248
+ return SessionManager.getSessionManager(browser2, ContextManager);
249
249
  }
250
250
  var ContextManager = class _ContextManager extends SessionManager {
251
251
  #browser;
252
252
  #currentContext;
253
253
  #mobileContext;
254
254
  #isNativeContext;
255
- constructor(browser) {
256
- super(browser, _ContextManager.name);
257
- this.#browser = browser;
255
+ constructor(browser2) {
256
+ super(browser2, _ContextManager.name);
257
+ this.#browser = browser2;
258
258
  const capabilities = this.#browser.capabilities;
259
259
  this.#isNativeContext = getNativeContext({ capabilities, isMobile: this.#browser.isMobile });
260
260
  this.#mobileContext = getMobileContext({
@@ -267,6 +267,22 @@ var ContextManager = class _ContextManager extends SessionManager {
267
267
  return;
268
268
  }
269
269
  this.#browser.on("command", this.#onCommand.bind(this));
270
+ this.#browser.sessionSubscribe({
271
+ events: ["browsingContext.navigationStarted"]
272
+ });
273
+ this.#browser.on("browsingContext.navigationStarted", async (nav) => {
274
+ if (!this.#currentContext || nav.context === this.#currentContext) {
275
+ return;
276
+ }
277
+ const { contexts } = await this.#browser.browsingContextGetTree({});
278
+ const hasContext = this.findContext(this.#currentContext, contexts, "byContextId");
279
+ const newContext = contexts.find((context) => context.context === nav.context);
280
+ if (!hasContext && newContext) {
281
+ this.setCurrentContext(newContext.context);
282
+ this.#browser.switchToWindow(this.#currentContext);
283
+ return;
284
+ }
285
+ });
270
286
  if (this.#browser.isMobile) {
271
287
  this.#browser.on("result", this.#onCommandResultMobile.bind(this));
272
288
  }
@@ -445,11 +461,11 @@ async function saveScreenshot(filepath) {
445
461
  await assertDirectoryExists(absoluteFilepath);
446
462
  let screenBuffer;
447
463
  if (this.isBidi) {
448
- const browser = getBrowserObject(this);
449
- const contextManager = getContextManager(browser);
464
+ const browser2 = getBrowserObject(this);
465
+ const contextManager = getContextManager(browser2);
450
466
  const context = await contextManager.getCurrentContext();
451
467
  const tree = await this.browsingContextGetTree({});
452
- const { data } = contextManager.findParentContext(context, tree.contexts) ? await browser.$("html").getElement().then(
468
+ const { data } = contextManager.findParentContext(context, tree.contexts) ? await browser2.$("html").getElement().then(
453
469
  (el) => this.takeElementScreenshot(el.elementId).then((data2) => ({ data: data2 }))
454
470
  ) : await this.browsingContextCaptureScreenshot({ context });
455
471
  screenBuffer = data;
@@ -495,8 +511,8 @@ import logger3 from "@wdio/logger";
495
511
  import { getBrowserObject as getBrowserObject2 } from "@wdio/utils";
496
512
  var log3 = logger3("webdriverio");
497
513
  async function implicitWait(currentElement, commandName) {
498
- const browser = getBrowserObject2(currentElement);
499
- const skipForMobileScroll = browser.isMobile && await browser.isNativeContext && (commandName === "scrollIntoView" || commandName === "tap");
514
+ const browser2 = getBrowserObject2(currentElement);
515
+ const skipForMobileScroll = browser2.isMobile && await browser2.isNativeContext && (commandName === "scrollIntoView" || commandName === "tap");
500
516
  if (!currentElement.elementId && !commandName.match(/(waitUntil|waitFor|isExisting|is?\w+Displayed|is?\w+Clickable)/) && !skipForMobileScroll) {
501
517
  log3.debug(
502
518
  `command ${commandName} was called on an element ("${currentElement.selector}") that wasn't found, waiting for it...`
@@ -626,13 +642,13 @@ var WebDriverError = class extends Error {
626
642
  }
627
643
  };
628
644
  function getElement(selector, res, props = { isReactElement: false, isShadowElement: false }) {
629
- const browser = getBrowserObject3(this);
645
+ const browser2 = getBrowserObject3(this);
630
646
  const browserCommandKeys = Object.keys(browser_exports);
631
647
  const propertiesObject = {
632
648
  /**
633
649
  * filter out browser commands from object
634
650
  */
635
- ...Object.entries(clone(browser.__propertiesObject__)).reduce((commands, [name, descriptor]) => {
651
+ ...Object.entries(clone(browser2.__propertiesObject__)).reduce((commands, [name, descriptor]) => {
636
652
  if (!browserCommandKeys.includes(name)) {
637
653
  commands[name] = descriptor;
638
654
  }
@@ -664,19 +680,19 @@ function getElement(selector, res, props = { isReactElement: false, isShadowElem
664
680
  const elementInstance = element(this.sessionId, elementErrorHandler(wrapCommand));
665
681
  const origAddCommand = elementInstance.addCommand.bind(elementInstance);
666
682
  elementInstance.addCommand = (name, fn) => {
667
- browser.__propertiesObject__[name] = { value: fn };
683
+ browser2.__propertiesObject__[name] = { value: fn };
668
684
  origAddCommand(name, fn);
669
685
  };
670
686
  return elementInstance;
671
687
  }
672
688
  var getElements = function getElements2(selector, elemResponse, props = { isReactElement: false, isShadowElement: false }) {
673
- const browser = getBrowserObject3(this);
689
+ const browser2 = getBrowserObject3(this);
674
690
  const browserCommandKeys = Object.keys(browser_exports);
675
691
  const propertiesObject = {
676
692
  /**
677
693
  * filter out browser commands from object
678
694
  */
679
- ...Object.entries(clone(browser.__propertiesObject__)).reduce((commands, [name, descriptor]) => {
695
+ ...Object.entries(clone(browser2.__propertiesObject__)).reduce((commands, [name, descriptor]) => {
680
696
  if (!browserCommandKeys.includes(name)) {
681
697
  commands[name] = descriptor;
682
698
  }
@@ -715,7 +731,7 @@ var getElements = function getElements2(selector, elemResponse, props = { isReac
715
731
  const elementInstance = element(this.sessionId, elementErrorHandler(wrapCommand));
716
732
  const origAddCommand = elementInstance.addCommand.bind(elementInstance);
717
733
  elementInstance.addCommand = (name, fn) => {
718
- browser.__propertiesObject__[name] = { value: fn };
734
+ browser2.__propertiesObject__[name] = { value: fn };
719
735
  origAddCommand(name, fn);
720
736
  };
721
737
  return elementInstance;
@@ -1617,8 +1633,8 @@ var ClockManager = class {
1617
1633
  #browser;
1618
1634
  #resetFn = () => Promise.resolve();
1619
1635
  #isInstalled = false;
1620
- constructor(browser) {
1621
- this.#browser = browser;
1636
+ constructor(browser2) {
1637
+ this.#browser = browser2;
1622
1638
  }
1623
1639
  /**
1624
1640
  * Install fake timers on the browser. If you call the `emulate` command, WebdriverIO will automatically install
@@ -3060,13 +3076,13 @@ var deviceDescriptorsSource = {
3060
3076
  };
3061
3077
 
3062
3078
  // src/commands/browser/emulate.ts
3063
- function storeRestoreFunction(browser, scope, fn) {
3064
- if (!restoreFunctions.has(browser)) {
3065
- restoreFunctions.set(browser, /* @__PURE__ */ new Map());
3079
+ function storeRestoreFunction(browser2, scope, fn) {
3080
+ if (!restoreFunctions.has(browser2)) {
3081
+ restoreFunctions.set(browser2, /* @__PURE__ */ new Map());
3066
3082
  }
3067
- const restoreFunctionsList = restoreFunctions.get(browser)?.get(scope);
3083
+ const restoreFunctionsList = restoreFunctions.get(browser2)?.get(scope);
3068
3084
  const updatedList = restoreFunctionsList ? [...restoreFunctionsList, fn] : [fn];
3069
- restoreFunctions.get(browser)?.set(scope, updatedList);
3085
+ restoreFunctions.get(browser2)?.set(scope, updatedList);
3070
3086
  }
3071
3087
  async function emulate(scope, options) {
3072
3088
  if (!this.isBidi) {
@@ -3457,8 +3473,8 @@ var ReferenceValue = class {
3457
3473
 
3458
3474
  // src/session/polyfill.ts
3459
3475
  import logger5 from "@wdio/logger";
3460
- function getPolyfillManager(browser) {
3461
- return SessionManager.getSessionManager(browser, PolyfillManager);
3476
+ function getPolyfillManager(browser2) {
3477
+ return SessionManager.getSessionManager(browser2, PolyfillManager);
3462
3478
  }
3463
3479
  var log5 = logger5("webdriverio:PolyfillManager");
3464
3480
  var polyfillFn = function webdriverioPolyfill() {
@@ -3473,9 +3489,9 @@ var PolyfillManager = class _PolyfillManager extends SessionManager {
3473
3489
  #initialize;
3474
3490
  #browser;
3475
3491
  #scriptsRegisteredInContexts = /* @__PURE__ */ new Set();
3476
- constructor(browser) {
3477
- super(browser, _PolyfillManager.name);
3478
- this.#browser = browser;
3492
+ constructor(browser2) {
3493
+ super(browser2, _PolyfillManager.name);
3494
+ this.#browser = browser2;
3479
3495
  if (!this.isEnabled()) {
3480
3496
  this.#initialize = Promise.resolve(true);
3481
3497
  return;
@@ -3525,8 +3541,8 @@ async function execute(script, ...args) {
3525
3541
  throw new Error("number or type of arguments don't agree with execute protocol command");
3526
3542
  }
3527
3543
  if (this.isBidi && !this.isMultiremote) {
3528
- const browser = getBrowserObject4(this);
3529
- const contextManager = getContextManager(browser);
3544
+ const browser2 = getBrowserObject4(this);
3545
+ const contextManager = getContextManager(browser2);
3530
3546
  const context = await contextManager.getCurrentContext();
3531
3547
  const userScript = typeof script === "string" ? new Function(script) : script;
3532
3548
  const functionDeclaration = createFunctionDeclarationFromString(userScript);
@@ -3538,7 +3554,7 @@ async function execute(script, ...args) {
3538
3554
  context
3539
3555
  }
3540
3556
  };
3541
- const result = await browser.scriptCallFunction(params);
3557
+ const result = await browser2.scriptCallFunction(params);
3542
3558
  return parseScriptResult(params, result);
3543
3559
  }
3544
3560
  if (typeof script === "function") {
@@ -3558,8 +3574,8 @@ async function executeAsync(script, ...args) {
3558
3574
  throw new Error("number or type of arguments don't agree with execute protocol command");
3559
3575
  }
3560
3576
  if (this.isBidi && !this.isMultiremote) {
3561
- const browser = getBrowserObject5(this);
3562
- const contextManager = getContextManager(browser);
3577
+ const browser2 = getBrowserObject5(this);
3578
+ const contextManager = getContextManager(browser2);
3563
3579
  const context = await contextManager.getCurrentContext();
3564
3580
  const userScript = typeof script === "string" ? new Function(script) : script;
3565
3581
  const functionDeclaration = new Function(`
@@ -3581,7 +3597,7 @@ async function executeAsync(script, ...args) {
3581
3597
  context
3582
3598
  }
3583
3599
  };
3584
- const result = await browser.scriptCallFunction(params);
3600
+ const result = await browser2.scriptCallFunction(params);
3585
3601
  return parseScriptResult(params, result);
3586
3602
  }
3587
3603
  if (typeof script === "function") {
@@ -3733,8 +3749,8 @@ async function getPuppeteer() {
3733
3749
  // src/commands/browser/getWindowSize.ts
3734
3750
  import { getBrowserObject as getBrowserObject6 } from "@wdio/utils";
3735
3751
  async function getWindowSize() {
3736
- const browser = getBrowserObject6(this);
3737
- const { width, height } = await browser.getWindowRect();
3752
+ const browser2 = getBrowserObject6(this);
3753
+ const { width, height } = await browser2.getWindowRect();
3738
3754
  return { width, height };
3739
3755
  }
3740
3756
 
@@ -3952,18 +3968,18 @@ var WebDriverInterception = class _WebDriverInterception {
3952
3968
  #requestOverwrites = [];
3953
3969
  #respondOverwrites = [];
3954
3970
  #calls = [];
3955
- constructor(pattern, mockId, filterOptions, browser) {
3971
+ constructor(pattern, mockId, filterOptions, browser2) {
3956
3972
  this.#pattern = pattern;
3957
3973
  this.#mockId = mockId;
3958
3974
  this.#filterOptions = filterOptions;
3959
- this.#browser = browser;
3960
- browser.on("network.beforeRequestSent", this.#handleBeforeRequestSent.bind(this));
3961
- browser.on("network.responseStarted", this.#handleResponseStarted.bind(this));
3975
+ this.#browser = browser2;
3976
+ browser2.on("network.beforeRequestSent", this.#handleBeforeRequestSent.bind(this));
3977
+ browser2.on("network.responseStarted", this.#handleResponseStarted.bind(this));
3962
3978
  }
3963
- static async initiate(url2, filterOptions, browser) {
3979
+ static async initiate(url2, filterOptions, browser2) {
3964
3980
  const pattern = parseUrlPattern(url2);
3965
3981
  if (!hasSubscribedToEvents) {
3966
- await browser.sessionSubscribe({
3982
+ await browser2.sessionSubscribe({
3967
3983
  events: [
3968
3984
  "network.beforeRequestSent",
3969
3985
  "network.responseStarted"
@@ -3972,7 +3988,7 @@ var WebDriverInterception = class _WebDriverInterception {
3972
3988
  log8.info("subscribed to network events");
3973
3989
  hasSubscribedToEvents = true;
3974
3990
  }
3975
- const interception = await browser.networkAddIntercept({
3991
+ const interception = await browser2.networkAddIntercept({
3976
3992
  phases: ["beforeRequestSent", "responseStarted"],
3977
3993
  urlPatterns: [{
3978
3994
  type: "pattern",
@@ -3983,7 +3999,7 @@ var WebDriverInterception = class _WebDriverInterception {
3983
3999
  search: getPatternParam(pattern, "search")
3984
4000
  }]
3985
4001
  });
3986
- return new _WebDriverInterception(pattern, interception.intercept, filterOptions, browser);
4002
+ return new _WebDriverInterception(pattern, interception.intercept, filterOptions, browser2);
3987
4003
  }
3988
4004
  #emit(event, args) {
3989
4005
  if (!this.#eventHandler.has(event)) {
@@ -4275,8 +4291,8 @@ async function mock(url2, filterOptions) {
4275
4291
  if (!this.isBidi) {
4276
4292
  throw new Error("Mocking is only supported when running tests using WebDriver Bidi");
4277
4293
  }
4278
- const browser = getBrowserObject7(this);
4279
- const contextManager = getContextManager(browser);
4294
+ const browser2 = getBrowserObject7(this);
4295
+ const contextManager = getContextManager(browser2);
4280
4296
  const context = await contextManager.getCurrentContext();
4281
4297
  if (!SESSION_MOCKS[context]) {
4282
4298
  SESSION_MOCKS[context] = /* @__PURE__ */ new Set();
@@ -4396,8 +4412,8 @@ import logger13 from "@wdio/logger";
4396
4412
  import logger12 from "@wdio/logger";
4397
4413
  import customElementWrapper from "./scripts/customElement.js";
4398
4414
  var log12 = logger12("webdriverio:ShadowRootManager");
4399
- function getShadowRootManager(browser) {
4400
- return SessionManager.getSessionManager(browser, ShadowRootManager);
4415
+ function getShadowRootManager(browser2) {
4416
+ return SessionManager.getSessionManager(browser2, ShadowRootManager);
4401
4417
  }
4402
4418
  var ShadowRootManager = class _ShadowRootManager extends SessionManager {
4403
4419
  #browser;
@@ -4405,9 +4421,9 @@ var ShadowRootManager = class _ShadowRootManager extends SessionManager {
4405
4421
  #shadowRoots = /* @__PURE__ */ new Map();
4406
4422
  #documentElement;
4407
4423
  #frameDepth = 0;
4408
- constructor(browser) {
4409
- super(browser, _ShadowRootManager.name);
4410
- this.#browser = browser;
4424
+ constructor(browser2) {
4425
+ super(browser2, _ShadowRootManager.name);
4426
+ this.#browser = browser2;
4411
4427
  if (!this.isEnabled()) {
4412
4428
  this.#initialize = Promise.resolve(true);
4413
4429
  return;
@@ -4662,8 +4678,8 @@ var ShadowRootTree = class _ShadowRootTree {
4662
4678
  };
4663
4679
 
4664
4680
  // src/session/networkManager.ts
4665
- function getNetworkManager(browser) {
4666
- return SessionManager.getSessionManager(browser, NetworkManager);
4681
+ function getNetworkManager(browser2) {
4682
+ return SessionManager.getSessionManager(browser2, NetworkManager);
4667
4683
  }
4668
4684
  var UNKNOWN_NAVIGATION_ID = "UNKNOWN_NAVIGATION_ID";
4669
4685
  var SUPPORTED_NAVIGATION_PROTOCOLS = ["http", "https", "data", "file"];
@@ -4672,9 +4688,9 @@ var NetworkManager = class _NetworkManager extends SessionManager {
4672
4688
  #initialize;
4673
4689
  #requests = /* @__PURE__ */ new Map();
4674
4690
  #lastNetworkId;
4675
- constructor(browser) {
4676
- super(browser, _NetworkManager.name);
4677
- this.#browser = browser;
4691
+ constructor(browser2) {
4692
+ super(browser2, _NetworkManager.name);
4693
+ this.#browser = browser2;
4678
4694
  if (!this.isEnabled()) {
4679
4695
  this.#initialize = Promise.resolve(true);
4680
4696
  return;
@@ -4849,16 +4865,16 @@ function headerListToObject(headers) {
4849
4865
  }
4850
4866
 
4851
4867
  // src/session/dialog.ts
4852
- function getDialogManager(browser) {
4853
- return SessionManager.getSessionManager(browser, DialogManager);
4868
+ function getDialogManager(browser2) {
4869
+ return SessionManager.getSessionManager(browser2, DialogManager);
4854
4870
  }
4855
4871
  var DialogManager = class _DialogManager extends SessionManager {
4856
4872
  #browser;
4857
4873
  #initialize;
4858
4874
  #autoHandleDialog = true;
4859
- constructor(browser) {
4860
- super(browser, _DialogManager.name);
4861
- this.#browser = browser;
4875
+ constructor(browser2) {
4876
+ super(browser2, _DialogManager.name);
4877
+ this.#browser = browser2;
4862
4878
  if (!this.isEnabled()) {
4863
4879
  this.#initialize = Promise.resolve(true);
4864
4880
  return;
@@ -4907,12 +4923,12 @@ var Dialog = class {
4907
4923
  #message;
4908
4924
  #defaultValue;
4909
4925
  #type;
4910
- constructor(event, browser) {
4926
+ constructor(event, browser2) {
4911
4927
  this.#message = event.message;
4912
4928
  this.#defaultValue = event.defaultValue;
4913
4929
  this.#type = event.type;
4914
4930
  this.#context = event.context;
4915
- this.#browser = browser;
4931
+ this.#browser = browser2;
4916
4932
  }
4917
4933
  message() {
4918
4934
  return this.#message;
@@ -5114,8 +5130,8 @@ async function setWindowSize(width, height) {
5114
5130
  if (width < minWindowSize2 || width > maxWindowSize2 || height < minWindowSize2 || height > maxWindowSize2) {
5115
5131
  throw new Error("setWindowSize expects width and height to be a number in the 0 to 2^31 \u2212 1 range");
5116
5132
  }
5117
- const browser = getBrowserObject8(this);
5118
- await browser.setWindowRect(null, null, width, height);
5133
+ const browser2 = getBrowserObject8(this);
5134
+ await browser2.setWindowRect(null, null, width, height);
5119
5135
  }
5120
5136
 
5121
5137
  // src/commands/browser/switchWindow.ts
@@ -5314,6 +5330,7 @@ async function switchFrame(context) {
5314
5330
  if (!result || result.type !== "success" || result.result.type !== "boolean" || !result.result.value) {
5315
5331
  continue;
5316
5332
  }
5333
+ await browser.switchFrame(null);
5317
5334
  await this.switchFrame(contextId);
5318
5335
  return contextId;
5319
5336
  }
@@ -5323,23 +5340,23 @@ async function switchFrame(context) {
5323
5340
  `Invalid type for context parameter: ${typeof context}, expected one of number, string or null. Check out our docs: https://webdriver.io/docs/api/browser/switchFrame.html`
5324
5341
  );
5325
5342
  }
5326
- function switchToFrameHelper(browser, context) {
5327
- const sessionContext = getContextManager(browser);
5343
+ function switchToFrameHelper(browser2, context) {
5344
+ const sessionContext = getContextManager(browser2);
5328
5345
  sessionContext.setCurrentContext(context);
5329
5346
  }
5330
- async function switchToFrameUsingElement(browser, element) {
5331
- const frame = await browser.execute(
5347
+ async function switchToFrameUsingElement(browser2, element) {
5348
+ const frame = await browser2.execute(
5332
5349
  (iframe) => iframe.contentWindow,
5333
5350
  element
5334
5351
  );
5335
- switchToFrameHelper(browser, frame.context);
5352
+ switchToFrameHelper(browser2, frame.context);
5336
5353
  const elementId = element[ELEMENT_KEY8];
5337
- await switchToFrame(browser, { [ELEMENT_KEY8]: elementId });
5354
+ await switchToFrame(browser2, { [ELEMENT_KEY8]: elementId });
5338
5355
  return frame.context;
5339
5356
  }
5340
- function switchToFrame(browser, frame) {
5357
+ function switchToFrame(browser2, frame) {
5341
5358
  process.env.DISABLE_WEBDRIVERIO_DEPRECATION_WARNINGS = "true";
5342
- return browser.switchToFrame(frame).finally(async () => {
5359
+ return browser2.switchToFrame(frame).finally(async () => {
5343
5360
  delete process.env.DISABLE_WEBDRIVERIO_DEPRECATION_WARNINGS;
5344
5361
  });
5345
5362
  }
@@ -5350,8 +5367,8 @@ import { getBrowserObject as getBrowserObject9 } from "@wdio/utils";
5350
5367
  var log16 = logger16("webdriverio:throttle");
5351
5368
  async function throttle(params) {
5352
5369
  log16.warn('Command "throttle" is deprecated and will be removed with the next major version release! Use `throttleNetwork` instead.');
5353
- const browser = getBrowserObject9(this);
5354
- await browser.throttleNetwork(params);
5370
+ const browser2 = getBrowserObject9(this);
5371
+ await browser2.throttleNetwork(params);
5355
5372
  }
5356
5373
 
5357
5374
  // src/commands/browser/throttleCPU.ts
@@ -5450,8 +5467,8 @@ async function throttleNetwork(params) {
5450
5467
  throw new Error(`Invalid parameter for "throttleNetwork". Expected it to be typeof object or one of the following values: ${NETWORK_PRESET_TYPES.join(", ")} but found "${params}"`);
5451
5468
  }
5452
5469
  if (this.isSauce) {
5453
- const browser = getBrowserObject10(this);
5454
- await browser.sauceThrottleNetwork(params);
5470
+ const browser2 = getBrowserObject10(this);
5471
+ await browser2.sauceThrottleNetwork(params);
5455
5472
  return null;
5456
5473
  }
5457
5474
  const failedConnectionMessage = "No Puppeteer connection could be established which is required to use this command";
@@ -5613,8 +5630,8 @@ var SWIPE_DEFAULTS = {
5613
5630
  PERCENT: 0.95
5614
5631
  };
5615
5632
  async function swipe(options) {
5616
- const browser = this;
5617
- if (!browser.isNativeContext) {
5633
+ const browser2 = this;
5634
+ if (!browser2.isNativeContext) {
5618
5635
  throw new Error("The swipe command is only available for mobile platforms in the NATIVE context.");
5619
5636
  }
5620
5637
  let { scrollableElement, from, to } = options || {};
@@ -5622,18 +5639,18 @@ async function swipe(options) {
5622
5639
  log17.warn("`scrollableElement` is provided, so `from` and `to` will be ignored.");
5623
5640
  }
5624
5641
  if (!from || !to) {
5625
- scrollableElement = scrollableElement || await getScrollableElement(browser);
5642
+ scrollableElement = scrollableElement || await getScrollableElement(browser2);
5626
5643
  ({ from, to } = await calculateFromTo({
5627
- browser,
5644
+ browser: browser2,
5628
5645
  direction: options?.direction || SWIPE_DEFAULTS.DIRECTION,
5629
5646
  percentage: options?.percent,
5630
5647
  scrollableElement
5631
5648
  }));
5632
5649
  }
5633
- return w3cSwipe({ browser, duration: options?.duration || SWIPE_DEFAULTS.DURATION, from, to });
5650
+ return w3cSwipe({ browser: browser2, duration: options?.duration || SWIPE_DEFAULTS.DURATION, from, to });
5634
5651
  }
5635
5652
  async function calculateFromTo({
5636
- browser,
5653
+ browser: browser2,
5637
5654
  direction,
5638
5655
  percentage,
5639
5656
  scrollableElement
@@ -5648,7 +5665,7 @@ async function calculateFromTo({
5648
5665
  swipePercentage = percentage;
5649
5666
  }
5650
5667
  }
5651
- const { x, y, width, height } = await browser.getElementRect(await scrollableElement?.elementId);
5668
+ const { x, y, width, height } = await browser2.getElementRect(await scrollableElement?.elementId);
5652
5669
  const scrollRectangles = {
5653
5670
  top: { x: Math.round(x + width / 2), y: Math.round(y + height - height * swipePercentage) },
5654
5671
  right: { x: Math.round(x + width * swipePercentage), y: Math.round(y + height / 2) },
@@ -5679,35 +5696,35 @@ async function calculateFromTo({
5679
5696
  }
5680
5697
  return { from, to };
5681
5698
  }
5682
- async function getScrollableElement(browser) {
5699
+ async function getScrollableElement(browser2) {
5683
5700
  const defaultAndroidSelector = "//android.widget.ScrollView";
5684
5701
  const defaultIosSelector = '-ios predicate string:type == "XCUIElementTypeApplication"';
5685
- const selector = browser.isIOS ? (
5702
+ const selector = browser2.isIOS ? (
5686
5703
  // For iOS, we need to find the application element, if we can't find it, we should throw an error
5687
5704
  defaultIosSelector
5688
5705
  ) : (
5689
5706
  // There is always a scrollview for Android or, if this fails we should throw an error
5690
5707
  defaultAndroidSelector
5691
5708
  );
5692
- const scrollableElements = await browser.$$(
5709
+ const scrollableElements = await browser2.$$(
5693
5710
  selector
5694
5711
  );
5695
5712
  if (scrollableElements.length > 0) {
5696
5713
  return scrollableElements[0];
5697
5714
  }
5698
5715
  throw new Error(
5699
- `Default scrollable element '${browser.isIOS ? defaultIosSelector : defaultAndroidSelector}' was not found. Our advice is to provide a scrollable element like this:
5716
+ `Default scrollable element '${browser2.isIOS ? defaultIosSelector : defaultAndroidSelector}' was not found. Our advice is to provide a scrollable element like this:
5700
5717
 
5701
5718
  await browser.swipe({ scrollableElement: $('#scrollable') });
5702
5719
 
5703
5720
  `
5704
5721
  );
5705
5722
  }
5706
- async function w3cSwipe({ browser, duration, from, to }) {
5707
- await browser.action("pointer", {
5708
- parameters: { pointerType: browser.isMobile ? "touch" : "mouse" }
5723
+ async function w3cSwipe({ browser: browser2, duration, from, to }) {
5724
+ await browser2.action("pointer", {
5725
+ parameters: { pointerType: browser2.isMobile ? "touch" : "mouse" }
5709
5726
  }).move(from.x, from.y).down().pause(10).move({ duration, x: to.x, y: to.y }).up().perform();
5710
- return browser.pause(500);
5727
+ return browser2.pause(500);
5711
5728
  }
5712
5729
 
5713
5730
  // src/commands/mobile/tap.ts
@@ -5717,18 +5734,18 @@ var log18 = logger18("webdriver");
5717
5734
  async function tap(options) {
5718
5735
  const isElement2 = this.selector !== void 0;
5719
5736
  const element = isElement2 ? this : null;
5720
- const browser = isElement2 ? getBrowserObject11(this) : this;
5721
- if (!browser.isMobile) {
5737
+ const browser2 = isElement2 ? getBrowserObject11(this) : this;
5738
+ if (!browser2.isMobile) {
5722
5739
  throw new Error("The tap command is only available for mobile platforms.");
5723
5740
  }
5724
5741
  validateTapOptions(options);
5725
5742
  if (element) {
5726
- return await elementTap(browser, element, options);
5743
+ return await elementTap(browser2, element, options);
5727
5744
  }
5728
5745
  if (!options || options.x === void 0 || options.y === void 0) {
5729
5746
  throw new Error("The tap command requires x and y coordinates to be set for screen taps.");
5730
5747
  }
5731
- return await screenTap(browser, options);
5748
+ return await screenTap(browser2, options);
5732
5749
  }
5733
5750
  function validateTapOptions(options) {
5734
5751
  if (options) {
@@ -5754,9 +5771,9 @@ function validateTapOptions(options) {
5754
5771
  }
5755
5772
  }
5756
5773
  }
5757
- async function elementTap(browser, element, options) {
5758
- if (browser.isNativeContext) {
5759
- return await nativeTap(element, browser, options);
5774
+ async function elementTap(browser2, element, options) {
5775
+ if (browser2.isNativeContext) {
5776
+ return await nativeTap(element, browser2, options);
5760
5777
  }
5761
5778
  if (options) {
5762
5779
  log18.warn("The options object is not supported in Web environments and will be ignored.");
@@ -5766,18 +5783,18 @@ async function elementTap(browser, element, options) {
5766
5783
  async function webTap(element) {
5767
5784
  return element.click();
5768
5785
  }
5769
- async function executeNativeTap(browser, options) {
5770
- return await browser.execute(
5771
- `mobile: ${browser.isIOS ? "tap" : "clickGesture"}`,
5772
- { ...browser.isIOS ? { x: 0, y: 0 } : {}, ...options }
5786
+ async function executeNativeTap(browser2, options) {
5787
+ return await browser2.execute(
5788
+ `mobile: ${browser2.isIOS ? "tap" : "clickGesture"}`,
5789
+ { ...browser2.isIOS ? { x: 0, y: 0 } : {}, ...options }
5773
5790
  );
5774
5791
  }
5775
- async function nativeTap(element, browser, options = {}) {
5792
+ async function nativeTap(element, browser2, options = {}) {
5776
5793
  try {
5777
5794
  if (!element.elementId) {
5778
5795
  throw new Error("no such element");
5779
5796
  }
5780
- return await executeNativeTap(browser, { elementId: element.elementId });
5797
+ return await executeNativeTap(browser2, { elementId: element.elementId });
5781
5798
  } catch (error) {
5782
5799
  let err = error;
5783
5800
  if (typeof error === "string") {
@@ -5795,7 +5812,7 @@ async function nativeTap(element, browser, options = {}) {
5795
5812
  );
5796
5813
  try {
5797
5814
  await element.scrollIntoView(scrollIntoViewOptions);
5798
- return await executeNativeTap(browser, { elementId: element.elementId });
5815
+ return await executeNativeTap(browser2, { elementId: element.elementId });
5799
5816
  } catch (scrollError) {
5800
5817
  let err2 = scrollError;
5801
5818
  if (typeof scrollError === "string") {
@@ -5826,12 +5843,12 @@ await elem.tap({
5826
5843
  }
5827
5844
  }
5828
5845
  }
5829
- async function screenTap(browser, options) {
5846
+ async function screenTap(browser2, options) {
5830
5847
  const { x, y } = options;
5831
- if (browser.isNativeContext) {
5832
- return await executeNativeTap(browser, options);
5848
+ if (browser2.isNativeContext) {
5849
+ return await executeNativeTap(browser2, options);
5833
5850
  }
5834
- return await browser.action(
5851
+ return await browser2.action(
5835
5852
  "pointer",
5836
5853
  {
5837
5854
  parameters: { pointerType: "touch" }
@@ -5843,19 +5860,19 @@ async function screenTap(browser, options) {
5843
5860
  import logger19 from "@wdio/logger";
5844
5861
  var log19 = logger19("webdriver");
5845
5862
  async function getContext(options) {
5846
- const browser = this;
5847
- if (!browser.isMobile) {
5863
+ const browser2 = this;
5864
+ if (!browser2.isMobile) {
5848
5865
  throw new Error("The `getContext` command is only available for mobile platforms.");
5849
5866
  }
5850
- const currentAppiumContext = await browser.getAppiumContext();
5867
+ const currentAppiumContext = await browser2.getAppiumContext();
5851
5868
  if (!options || !options?.returnDetailedContext || currentAppiumContext === "NATIVE_APP") {
5852
5869
  return currentAppiumContext;
5853
5870
  }
5854
5871
  delete options.returnDetailedContext;
5855
- return getDetailedContext(browser, currentAppiumContext, options);
5872
+ return getDetailedContext(browser2, currentAppiumContext, options);
5856
5873
  }
5857
- async function getDetailedContext(browser, currentAppiumContext, options) {
5858
- const detailedContexts = await browser.getContexts({
5874
+ async function getDetailedContext(browser2, currentAppiumContext, options) {
5875
+ const detailedContexts = await browser2.getContexts({
5859
5876
  ...{ options },
5860
5877
  // Defaults
5861
5878
  returnDetailedContexts: true,
@@ -5882,13 +5899,13 @@ async function getDetailedContext(browser, currentAppiumContext, options) {
5882
5899
  import logger20 from "@wdio/logger";
5883
5900
  var log20 = logger20("webdriver");
5884
5901
  async function getContexts(options) {
5885
- const browser = this;
5886
- if (!browser.isMobile) {
5902
+ const browser2 = this;
5903
+ if (!browser2.isMobile) {
5887
5904
  throw new Error("The `getContexts` command is only available for mobile platforms.");
5888
5905
  }
5889
5906
  if (!options || !options.returnDetailedContexts) {
5890
5907
  log20.info("The standard Appium `contexts` method is used. If you want to get more detailed data, you can set `returnDetailedContexts` to `true`.");
5891
- return browser.getAppiumContexts();
5908
+ return browser2.getAppiumContexts();
5892
5909
  }
5893
5910
  const defaultOptions = {
5894
5911
  androidWebviewConnectionRetryTime: 500,
@@ -5897,7 +5914,7 @@ async function getContexts(options) {
5897
5914
  isAndroidWebviewVisible: true,
5898
5915
  returnAndroidDescriptionData: false
5899
5916
  };
5900
- return getCurrentContexts({ browser, ...{ ...defaultOptions, ...options } });
5917
+ return getCurrentContexts({ browser: browser2, ...{ ...defaultOptions, ...options } });
5901
5918
  }
5902
5919
  var CHROME_PACKAGE_NAME = "com.android.chrome";
5903
5920
  async function parsedAndroidContexts({
@@ -5964,18 +5981,18 @@ async function parsedAndroidContexts({
5964
5981
  return result;
5965
5982
  }
5966
5983
  async function getCurrentContexts({
5967
- browser,
5984
+ browser: browser2,
5968
5985
  androidWebviewConnectionRetryTime,
5969
5986
  androidWebviewConnectTimeout,
5970
5987
  filterByCurrentAndroidApp,
5971
5988
  isAndroidWebviewVisible,
5972
5989
  returnAndroidDescriptionData
5973
5990
  }) {
5974
- const contexts = await browser.execute("mobile: getContexts");
5975
- if (browser.isIOS) {
5991
+ const contexts = await browser2.execute("mobile: getContexts");
5992
+ if (browser2.isIOS) {
5976
5993
  return contexts;
5977
5994
  }
5978
- const packageName = await browser.getCurrentPackage();
5995
+ const packageName = await browser2.getCurrentPackage();
5979
5996
  const startTime = Date.now();
5980
5997
  const retryInterval = androidWebviewConnectionRetryTime;
5981
5998
  let isPackageNameMissing = false;
@@ -6014,8 +6031,8 @@ async function getCurrentContexts({
6014
6031
  import logger21 from "@wdio/logger";
6015
6032
  var log21 = logger21("webdriver");
6016
6033
  async function switchContext(options) {
6017
- const browser = this;
6018
- if (!browser.isMobile) {
6034
+ const browser2 = this;
6035
+ if (!browser2.isMobile) {
6019
6036
  throw new Error("The `switchContext` command is only available for mobile platforms.");
6020
6037
  }
6021
6038
  if (!options) {
@@ -6023,14 +6040,14 @@ async function switchContext(options) {
6023
6040
  }
6024
6041
  if (typeof options === "string") {
6025
6042
  log21.info("The standard Appium `context`-method is used. If you want to switch to a webview with a specific title or url, please provide an object with the `title` or `url` property. See https://webdriver.io/docs/api/mobile/switchContext for more information.");
6026
- return browser.switchAppiumContext(options);
6043
+ return browser2.switchAppiumContext(options);
6027
6044
  }
6028
6045
  if (!options.title && !options.url) {
6029
6046
  throw new Error("You need to provide at least a `title` or `url` property to use full potential of the `switchContext` command. See https://webdriver.io/docs/api/mobile/switchContext for more information.");
6030
6047
  }
6031
- return switchToContext({ browser, options });
6048
+ return switchToContext({ browser: browser2, options });
6032
6049
  }
6033
- async function switchToContext({ browser, options }) {
6050
+ async function switchToContext({ browser: browser2, options }) {
6034
6051
  const getContextsOptions = {
6035
6052
  returnDetailedContexts: true,
6036
6053
  filterByCurrentAndroidApp: false,
@@ -6039,19 +6056,19 @@ async function switchToContext({ browser, options }) {
6039
6056
  ...options?.androidWebviewConnectionRetryTime && { androidWebviewConnectionRetryTime: options.androidWebviewConnectionRetryTime },
6040
6057
  ...options?.androidWebviewConnectTimeout && { androidWebviewConnectTimeout: options.androidWebviewConnectTimeout }
6041
6058
  };
6042
- const contexts = await browser.getContexts(getContextsOptions);
6043
- const identifier = browser.isIOS ? (await browser.execute("mobile: activeAppInfo"))?.bundleId : await browser.getCurrentPackage();
6044
- const { matchingContext, reasons } = findMatchingContext({ browser, contexts, identifier, ...options?.title && { title: options.title }, ...options?.url && { url: options.url } });
6059
+ const contexts = await browser2.getContexts(getContextsOptions);
6060
+ const identifier = browser2.isIOS ? (await browser2.execute("mobile: activeAppInfo"))?.bundleId : await browser2.getCurrentPackage();
6061
+ const { matchingContext, reasons } = findMatchingContext({ browser: browser2, contexts, identifier, ...options?.title && { title: options.title }, ...options?.url && { url: options.url } });
6045
6062
  if (!matchingContext) {
6046
6063
  throw new Error(reasons.join("\n"));
6047
6064
  }
6048
6065
  log21.info("WebdriverIO found a matching context:", JSON.stringify(matchingContext, null, 2));
6049
- if (!browser.isIOS) {
6066
+ if (!browser2.isIOS) {
6050
6067
  const webviewName = `WEBVIEW_${identifier}`;
6051
- await browser.switchAppiumContext(webviewName);
6068
+ await browser2.switchAppiumContext(webviewName);
6052
6069
  }
6053
- const switchFunction = browser.isIOS ? browser.switchAppiumContext.bind(browser) : browser.switchToWindow.bind(browser);
6054
- const matchingContextId = browser.isIOS ? matchingContext.id : matchingContext.webviewPageId;
6070
+ const switchFunction = browser2.isIOS ? browser2.switchAppiumContext.bind(browser2) : browser2.switchToWindow.bind(browser2);
6071
+ const matchingContextId = browser2.isIOS ? matchingContext.id : matchingContext.webviewPageId;
6055
6072
  return switchFunction(matchingContextId);
6056
6073
  }
6057
6074
  function findMatchingContext({
@@ -6219,9 +6236,9 @@ async function actionClick(element, options) {
6219
6236
  if (!buttonValue.includes(button)) {
6220
6237
  throw new Error("Button type not supported.");
6221
6238
  }
6222
- const browser = getBrowserObject12(element);
6239
+ const browser2 = getBrowserObject12(element);
6223
6240
  if (x || y) {
6224
- const { width, height } = await browser.getElementRect(element.elementId);
6241
+ const { width, height } = await browser2.getElementRect(element.elementId);
6225
6242
  if (x && x < -Math.floor(width / 2) || x && x > Math.floor(width / 2)) {
6226
6243
  log22.warn("x would cause a out of bounds error as it goes outside of element");
6227
6244
  }
@@ -6230,8 +6247,8 @@ async function actionClick(element, options) {
6230
6247
  }
6231
6248
  }
6232
6249
  const clickNested = async () => {
6233
- await browser.action("pointer", {
6234
- parameters: { pointerType: browser.isMobile ? "touch" : "mouse" }
6250
+ await browser2.action("pointer", {
6251
+ parameters: { pointerType: browser2.isMobile ? "touch" : "mouse" }
6235
6252
  }).move({ origin: element, x, y }).down({ button }).pause(duration).up({ button }).perform(skipRelease);
6236
6253
  };
6237
6254
  try {
@@ -6290,8 +6307,8 @@ async function custom$2(strategyName, ...strategyArguments) {
6290
6307
  // src/commands/element/doubleClick.ts
6291
6308
  import { getBrowserObject as getBrowserObject15 } from "@wdio/utils";
6292
6309
  async function doubleClick() {
6293
- const browser = getBrowserObject15(this);
6294
- return browser.action("pointer", { parameters: { pointerType: "mouse" } }).move({ origin: this }).down().up().pause(10).down().up().perform();
6310
+ const browser2 = getBrowserObject15(this);
6311
+ return browser2.action("pointer", { parameters: { pointerType: "mouse" } }).move({ origin: this }).down().up().pause(10).down().up().perform();
6295
6312
  }
6296
6313
 
6297
6314
  // src/commands/element/dragAndDrop.ts
@@ -6315,8 +6332,8 @@ async function dragAndDrop(target, options = {}) {
6315
6332
  throw new Error('command dragAndDrop requires an WebdriverIO Element or and object with "x" and "y" variables as first parameter');
6316
6333
  }
6317
6334
  const ACTION_BUTTON = 0;
6318
- const browser = getBrowserObject16(this);
6319
- const defaultOptions = { duration: browser.isMobile ? 250 : 10 };
6335
+ const browser2 = getBrowserObject16(this);
6336
+ const defaultOptions = { duration: browser2.isMobile ? 250 : 10 };
6320
6337
  const { duration } = { ...defaultOptions, ...options };
6321
6338
  const isMovingToElement = moveToElement.constructor.name === "Element";
6322
6339
  const sourceRef = { [ELEMENT_KEY11]: this[ELEMENT_KEY11] };
@@ -6325,23 +6342,23 @@ async function dragAndDrop(target, options = {}) {
6325
6342
  const targetOrigin = isMovingToElement ? targetRef : "pointer";
6326
6343
  const targetX = isMovingToElement ? 0 : moveToCoordinates.x;
6327
6344
  const targetY = isMovingToElement ? 0 : moveToCoordinates.y;
6328
- return browser.action("pointer", {
6329
- parameters: { pointerType: browser.isMobile ? "touch" : "mouse" }
6345
+ return browser2.action("pointer", {
6346
+ parameters: { pointerType: browser2.isMobile ? "touch" : "mouse" }
6330
6347
  }).move({ duration: 0, origin, x: 0, y: 0 }).down({ button: ACTION_BUTTON }).pause(10).move({ duration, origin: targetOrigin, x: targetX, y: targetY }).up({ button: ACTION_BUTTON }).perform();
6331
6348
  }
6332
6349
 
6333
6350
  // src/commands/element/execute.ts
6334
6351
  import { getBrowserObject as getBrowserObject17 } from "@wdio/utils";
6335
6352
  async function execute2(script, ...args) {
6336
- const browser = getBrowserObject17(this);
6337
- return browser.execute(script, this, ...args);
6353
+ const browser2 = getBrowserObject17(this);
6354
+ return browser2.execute(script, this, ...args);
6338
6355
  }
6339
6356
 
6340
6357
  // src/commands/element/executeAsync.ts
6341
6358
  import { getBrowserObject as getBrowserObject18 } from "@wdio/utils";
6342
6359
  async function executeAsync2(script, ...args) {
6343
- const browser = getBrowserObject18(this);
6344
- return browser.executeAsync(script, this, ...args);
6360
+ const browser2 = getBrowserObject18(this);
6361
+ return browser2.executeAsync(script, this, ...args);
6345
6362
  }
6346
6363
 
6347
6364
  // src/commands/element/getAttribute.ts
@@ -6415,9 +6432,9 @@ function mergeEqualSymmetricalValue(cssValues) {
6415
6432
  return newCssValues.join(" ");
6416
6433
  }
6417
6434
  async function getPseudoElementCSSValue(elem, options) {
6418
- const browser = getBrowserObject19(elem);
6435
+ const browser2 = getBrowserObject19(elem);
6419
6436
  const { cssProperty, pseudoElement } = options;
6420
- const cssValue2 = await browser.execute(
6437
+ const cssValue2 = await browser2.execute(
6421
6438
  (elem2, pseudoElement2, cssProperty2) => window.getComputedStyle(elem2, pseudoElement2)[cssProperty2],
6422
6439
  elem,
6423
6440
  pseudoElement,
@@ -6450,7 +6467,7 @@ import getHTMLShadowScript from "./scripts/getHTMLShadow.js";
6450
6467
  var SHADOW_ID_ATTR_NAME = "data-wdio-shadow-id";
6451
6468
  var SHADOW_ID_ATTR = `[${SHADOW_ID_ATTR_NAME}]`;
6452
6469
  async function getHTML(options = {}) {
6453
- const browser = getBrowserObject20(this);
6470
+ const browser2 = getBrowserObject20(this);
6454
6471
  if (typeof options !== "object" && typeof options === "boolean") {
6455
6472
  options = { includeSelectorTag: options };
6456
6473
  } else if (typeof options !== "object") {
@@ -6464,7 +6481,7 @@ async function getHTML(options = {}) {
6464
6481
  excludeElements: []
6465
6482
  }, options);
6466
6483
  const basicGetHTML = (elementId, includeSelectorTag2) => {
6467
- return browser.execute(getHTMLScript, {
6484
+ return browser2.execute(getHTMLScript, {
6468
6485
  [ELEMENT_KEY12]: elementId,
6469
6486
  // w3c compatible
6470
6487
  ELEMENT: elementId
@@ -6480,12 +6497,12 @@ async function getHTML(options = {}) {
6480
6497
  );
6481
6498
  }
6482
6499
  const { load } = await import("cheerio");
6483
- const shadowRootManager = getShadowRootManager(browser);
6484
- const contextManager = getContextManager(browser);
6500
+ const shadowRootManager = getShadowRootManager(browser2);
6501
+ const contextManager = getContextManager(browser2);
6485
6502
  const context = await contextManager.getCurrentContext();
6486
6503
  const shadowRootElementPairs = shadowRootManager.getShadowElementPairsByContextId(context, this.elementId);
6487
6504
  const elementsWithShadowRootAndIdVerified = (await Promise.all(
6488
- shadowRootElementPairs.map(([elemId, elem]) => browser.execute((elem2) => elem2.tagName, { [ELEMENT_KEY12]: elemId }).then(
6505
+ shadowRootElementPairs.map(([elemId, elem]) => browser2.execute((elem2) => elem2.tagName, { [ELEMENT_KEY12]: elemId }).then(
6489
6506
  () => [elemId, elem],
6490
6507
  () => void 0
6491
6508
  ))
@@ -6494,7 +6511,7 @@ async function getHTML(options = {}) {
6494
6511
  { [ELEMENT_KEY12]: elemId },
6495
6512
  shadowId ? { [ELEMENT_KEY12]: shadowId } : void 0
6496
6513
  ]);
6497
- const { html, shadowElementHTML } = await browser.execute(
6514
+ const { html, shadowElementHTML } = await browser2.execute(
6498
6515
  getHTMLShadowScript,
6499
6516
  { [ELEMENT_KEY12]: this.elementId },
6500
6517
  includeSelectorTag,
@@ -6604,8 +6621,8 @@ async function isClickable() {
6604
6621
  if (this.isMobile && this.isNativeContext) {
6605
6622
  throw new Error("Method not supported in mobile native environment. It is unlikely that you need to use this command.");
6606
6623
  }
6607
- const browser = getBrowserObject21(this);
6608
- return browser.execute(isElementClickableScript, {
6624
+ const browser2 = getBrowserObject21(this);
6625
+ return browser2.execute(isElementClickableScript, {
6609
6626
  [ELEMENT_KEY13]: this.elementId,
6610
6627
  // w3c compatible
6611
6628
  ELEMENT: this.elementId
@@ -6618,12 +6635,12 @@ import { getBrowserObject as getBrowserObject22 } from "@wdio/utils";
6618
6635
  import isElementDisplayedLegacyScript from "./scripts/isElementDisplayed.js";
6619
6636
  import isElementInViewportScript from "./scripts/isElementInViewport.js";
6620
6637
  async function isDisplayed(commandParams = DEFAULT_PARAMS) {
6621
- const browser = getBrowserObject22(this);
6638
+ const browser2 = getBrowserObject22(this);
6622
6639
  if (!await hasElementId(this)) {
6623
6640
  return false;
6624
6641
  }
6625
- const isNativeApplication = !browser.capabilities.browserName;
6626
- if (browser.isMobile && isNativeApplication) {
6642
+ const isNativeApplication = !browser2.capabilities.browserName;
6643
+ if (browser2.isMobile && isNativeApplication) {
6627
6644
  if (commandParams?.withinViewport) {
6628
6645
  throw new Error(
6629
6646
  "Cannot determine element visibility within viewport for native mobile apps as it is not feasible to determine full vertical and horizontal application bounds. In most cases a basic visibility check should suffice."
@@ -6633,12 +6650,12 @@ async function isDisplayed(commandParams = DEFAULT_PARAMS) {
6633
6650
  }
6634
6651
  let hadToFallback = false;
6635
6652
  const [isDisplayed2, displayProperty] = await Promise.all([
6636
- browser.execute(function checkVisibility(elem, params) {
6653
+ browser2.execute(function checkVisibility(elem, params) {
6637
6654
  return elem.checkVisibility(params);
6638
6655
  }, this, commandParams).catch((err) => {
6639
6656
  if (err.message.includes("checkVisibility is not a function")) {
6640
6657
  hadToFallback = true;
6641
- return browser.execute(isElementDisplayedLegacyScript, this);
6658
+ return browser2.execute(isElementDisplayedLegacyScript, this);
6642
6659
  }
6643
6660
  throw err;
6644
6661
  }),
@@ -6649,9 +6666,9 @@ async function isDisplayed(commandParams = DEFAULT_PARAMS) {
6649
6666
  ]);
6650
6667
  const hasDisplayContentsCSSProperty = displayProperty.value === "contents";
6651
6668
  const shouldRecheckContentVisibility = !hadToFallback && hasDisplayContentsCSSProperty;
6652
- const finalResponse = shouldRecheckContentVisibility ? await browser.execute(isElementDisplayedLegacyScript, this).catch(() => false) : isDisplayed2;
6669
+ const finalResponse = shouldRecheckContentVisibility ? await browser2.execute(isElementDisplayedLegacyScript, this).catch(() => false) : isDisplayed2;
6653
6670
  if (finalResponse && commandParams?.withinViewport) {
6654
- return browser.execute(isElementInViewportScript, this);
6671
+ return browser2.execute(isElementInViewportScript, this);
6655
6672
  }
6656
6673
  return finalResponse;
6657
6674
  }
@@ -6677,9 +6694,9 @@ var getWebElement = (el) => ({
6677
6694
  // jsonwp compatible
6678
6695
  });
6679
6696
  async function isEqual(el) {
6680
- const browser = getBrowserObject23(this);
6681
- if (browser.isMobile) {
6682
- const context = await browser.getContext().catch(() => void 0);
6697
+ const browser2 = getBrowserObject23(this);
6698
+ if (browser2.isMobile) {
6699
+ const context = await browser2.getContext().catch(() => void 0);
6683
6700
  const contextId = typeof context === "string" ? context : context?.id;
6684
6701
  if (contextId && contextId.toLowerCase().includes("native")) {
6685
6702
  return this.elementId === el.elementId;
@@ -6687,7 +6704,7 @@ async function isEqual(el) {
6687
6704
  }
6688
6705
  let result;
6689
6706
  try {
6690
- result = await browser.execute(
6707
+ result = await browser2.execute(
6691
6708
  /* istanbul ignore next */
6692
6709
  function(el1, el2) {
6693
6710
  return el1 === el2;
@@ -6718,8 +6735,8 @@ import { ELEMENT_KEY as ELEMENT_KEY15 } from "webdriver";
6718
6735
  import { getBrowserObject as getBrowserObject24 } from "@wdio/utils";
6719
6736
  import isFocusedScript from "./scripts/isFocused.js";
6720
6737
  async function isFocused() {
6721
- const browser = await getBrowserObject24(this);
6722
- return browser.execute(isFocusedScript, {
6738
+ const browser2 = await getBrowserObject24(this);
6739
+ return browser2.execute(isFocusedScript, {
6723
6740
  [ELEMENT_KEY15]: this.elementId,
6724
6741
  // w3c compatible
6725
6742
  ELEMENT: this.elementId
@@ -6737,8 +6754,8 @@ import { ELEMENT_KEY as ELEMENT_KEY16 } from "webdriver";
6737
6754
  import { getBrowserObject as getBrowserObject25 } from "@wdio/utils";
6738
6755
  import isElementStable from "./scripts/isElementStable.js";
6739
6756
  async function isStable() {
6740
- const browser = getBrowserObject25(this);
6741
- return await browser.executeAsync(isElementStable, {
6757
+ const browser2 = getBrowserObject25(this);
6758
+ return await browser2.executeAsync(isElementStable, {
6742
6759
  [ELEMENT_KEY16]: this.elementId,
6743
6760
  // w3c compatible
6744
6761
  ELEMENT: this.elementId
@@ -6751,9 +6768,9 @@ import logger23 from "@wdio/logger";
6751
6768
  import { getBrowserObject as getBrowserObject26 } from "@wdio/utils";
6752
6769
  var log23 = logger23("webdriver");
6753
6770
  async function moveTo({ xOffset, yOffset } = {}) {
6754
- const browser = getBrowserObject26(this);
6771
+ const browser2 = getBrowserObject26(this);
6755
6772
  if (xOffset || yOffset) {
6756
- const { width, height } = await browser.getElementRect(this.elementId);
6773
+ const { width, height } = await browser2.getElementRect(this.elementId);
6757
6774
  if (xOffset && xOffset < -Math.floor(width / 2) || xOffset && xOffset > Math.floor(width / 2)) {
6758
6775
  log23.warn("xOffset would cause a out of bounds error as it goes outside of element");
6759
6776
  }
@@ -6762,7 +6779,7 @@ async function moveTo({ xOffset, yOffset } = {}) {
6762
6779
  }
6763
6780
  }
6764
6781
  const moveToNested = async () => {
6765
- await browser.action("pointer", { parameters: { pointerType: "mouse" } }).move({ origin: this, x: xOffset || 0, y: yOffset || 0 }).perform();
6782
+ await browser2.action("pointer", { parameters: { pointerType: "mouse" } }).move({ origin: this, x: xOffset || 0, y: yOffset || 0 }).perform();
6766
6783
  };
6767
6784
  try {
6768
6785
  await moveToNested();
@@ -6806,10 +6823,10 @@ function previousElement() {
6806
6823
  import { getBrowserObject as getBrowserObject27 } from "@wdio/utils";
6807
6824
  import { waitToLoadReact as waitToLoadReact3, react$$ as react$$Script2 } from "./scripts/resq.js";
6808
6825
  async function react$$2(selector, { props = {}, state = {} } = {}) {
6809
- const browser = await getBrowserObject27(this);
6826
+ const browser2 = await getBrowserObject27(this);
6810
6827
  await this.executeScript(resqScript.toString(), []);
6811
- await browser.execute(waitToLoadReact3);
6812
- const res = await browser.execute(
6828
+ await browser2.execute(waitToLoadReact3);
6829
+ const res = await browser2.execute(
6813
6830
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
6814
6831
  react$$Script2,
6815
6832
  selector,
@@ -6825,10 +6842,10 @@ async function react$$2(selector, { props = {}, state = {} } = {}) {
6825
6842
  import { getBrowserObject as getBrowserObject28 } from "@wdio/utils";
6826
6843
  import { waitToLoadReact as waitToLoadReact4, react$ as react$Script2 } from "./scripts/resq.js";
6827
6844
  async function react$2(selector, { props = {}, state = {} } = {}) {
6828
- const browser = await getBrowserObject28(this);
6845
+ const browser2 = await getBrowserObject28(this);
6829
6846
  await this.executeScript(resqScript.toString(), []);
6830
- await browser.execute(waitToLoadReact4);
6831
- const res = await browser.execute(
6847
+ await browser2.execute(waitToLoadReact4);
6848
+ const res = await browser2.execute(
6832
6849
  react$Script2,
6833
6850
  selector,
6834
6851
  props,
@@ -6849,11 +6866,11 @@ import { ELEMENT_KEY as ELEMENT_KEY17 } from "webdriver";
6849
6866
  import { getBrowserObject as getBrowserObject29 } from "@wdio/utils";
6850
6867
  var log24 = logger24("webdriverio");
6851
6868
  async function scrollIntoView(options = { block: "start", inline: "nearest" }) {
6852
- const browser = getBrowserObject29(this);
6853
- if (browser.isMobile) {
6854
- if (await browser.isNativeContext) {
6869
+ const browser2 = getBrowserObject29(this);
6870
+ if (browser2.isMobile) {
6871
+ if (await browser2.isNativeContext) {
6855
6872
  return nativeMobileScrollIntoView({
6856
- browser,
6873
+ browser: browser2,
6857
6874
  element: this,
6858
6875
  options: options || {}
6859
6876
  });
@@ -6861,9 +6878,9 @@ async function scrollIntoView(options = { block: "start", inline: "nearest" }) {
6861
6878
  return scrollIntoViewWeb.call(this, options);
6862
6879
  }
6863
6880
  try {
6864
- const elemRect = await browser.getElementRect(this.elementId);
6865
- const viewport = await browser.getWindowSize();
6866
- let [scrollX, scrollY] = await browser.execute(() => [
6881
+ const elemRect = await browser2.getElementRect(this.elementId);
6882
+ const viewport = await browser2.getWindowSize();
6883
+ let [scrollX, scrollY] = await browser2.execute(() => [
6867
6884
  window.scrollX,
6868
6885
  window.scrollY
6869
6886
  ]);
@@ -6898,7 +6915,7 @@ async function scrollIntoView(options = { block: "start", inline: "nearest" }) {
6898
6915
  }
6899
6916
  deltaX = Math.round(deltaX - scrollX);
6900
6917
  deltaY = Math.round(deltaY - scrollY);
6901
- await browser.action("wheel").scroll({ duration: 0, x: deltaX, y: deltaY, origin: this }).perform();
6918
+ await browser2.action("wheel").scroll({ duration: 0, x: deltaX, y: deltaY, origin: this }).perform();
6902
6919
  } catch (err) {
6903
6920
  log24.warn(
6904
6921
  `Failed to execute "scrollIntoView" using WebDriver Actions API: ${err.message}!
@@ -6908,7 +6925,7 @@ Re-attempting using \`Element.scrollIntoView\` via Web API.`
6908
6925
  }
6909
6926
  }
6910
6927
  async function mobileScrollUntilVisible({
6911
- browser,
6928
+ browser: browser2,
6912
6929
  direction,
6913
6930
  duration,
6914
6931
  element,
@@ -6928,7 +6945,7 @@ async function mobileScrollUntilVisible({
6928
6945
  if (isVisible) {
6929
6946
  break;
6930
6947
  }
6931
- await browser.swipe({
6948
+ await browser2.swipe({
6932
6949
  direction,
6933
6950
  ...duration ? { duration } : {},
6934
6951
  ...percent ? { percent } : {},
@@ -6940,7 +6957,7 @@ async function mobileScrollUntilVisible({
6940
6957
  return { hasScrolled, isVisible };
6941
6958
  }
6942
6959
  async function nativeMobileScrollIntoView({
6943
- browser,
6960
+ browser: browser2,
6944
6961
  element,
6945
6962
  options
6946
6963
  }) {
@@ -6953,7 +6970,7 @@ async function nativeMobileScrollIntoView({
6953
6970
  ...options || {}
6954
6971
  };
6955
6972
  const { hasScrolled, isVisible } = await mobileScrollUntilVisible({
6956
- browser,
6973
+ browser: browser2,
6957
6974
  element,
6958
6975
  maxScrolls: mobileOptions.maxScrolls,
6959
6976
  direction: mobileOptions.direction,
@@ -6962,7 +6979,7 @@ async function nativeMobileScrollIntoView({
6962
6979
  ...mobileOptions?.scrollableElement ? { scrollableElement: mobileOptions.scrollableElement } : {}
6963
6980
  });
6964
6981
  if (hasScrolled && isVisible) {
6965
- return browser.pause(1e3);
6982
+ return browser2.pause(1e3);
6966
6983
  } else if (isVisible) {
6967
6984
  return;
6968
6985
  }
@@ -6976,8 +6993,8 @@ await elem.scrollIntoView({
6976
6993
  `);
6977
6994
  }
6978
6995
  function scrollIntoViewWeb(options = { block: "start", inline: "nearest" }) {
6979
- const browser = getBrowserObject29(this);
6980
- return browser.execute(
6996
+ const browser2 = getBrowserObject29(this);
6997
+ return browser2.execute(
6981
6998
  (elem, options2) => elem.scrollIntoView(options2),
6982
6999
  {
6983
7000
  [ELEMENT_KEY17]: this.elementId,
@@ -7375,11 +7392,11 @@ var createRoleBaseXpathSelector = (role) => {
7375
7392
  // src/commands/element/shadow$$.ts
7376
7393
  var log25 = logger25("webdriverio");
7377
7394
  async function shadow$$(selector) {
7378
- const browser = getBrowserObject30(this);
7395
+ const browser2 = getBrowserObject30(this);
7379
7396
  try {
7380
- const shadowRoot = await browser.getElementShadowRoot(this.elementId);
7397
+ const shadowRoot = await browser2.getElementShadowRoot(this.elementId);
7381
7398
  const { using, value } = findStrategy(selector, this.isW3C, this.isMobile);
7382
- const res = await browser.findElementsFromShadowRoot(shadowRoot[SHADOW_ELEMENT_KEY], using, value);
7399
+ const res = await browser2.findElementsFromShadowRoot(shadowRoot[SHADOW_ELEMENT_KEY], using, value);
7383
7400
  const elements = await getElements.call(this, selector, res, { isShadowElement: true });
7384
7401
  return enhanceElementsArray(elements, this, selector);
7385
7402
  } catch (err) {
@@ -7398,11 +7415,11 @@ import { shadowFnFactory as shadowFnFactory2 } from "./scripts/shadowFnFactory.j
7398
7415
  import { getBrowserObject as getBrowserObject31 } from "@wdio/utils";
7399
7416
  var log26 = logger26("webdriverio");
7400
7417
  async function shadow$(selector) {
7401
- const browser = getBrowserObject31(this);
7418
+ const browser2 = getBrowserObject31(this);
7402
7419
  try {
7403
- const shadowRoot = await browser.getElementShadowRoot(this.elementId);
7420
+ const shadowRoot = await browser2.getElementShadowRoot(this.elementId);
7404
7421
  const { using, value } = findStrategy(selector, this.isW3C, this.isMobile);
7405
- const res = await browser.findElementFromShadowRoot(shadowRoot[SHADOW_ELEMENT_KEY2], using, value);
7422
+ const res = await browser2.findElementFromShadowRoot(shadowRoot[SHADOW_ELEMENT_KEY2], using, value);
7406
7423
  return getElement.call(this, selector, res, { isShadowElement: true });
7407
7424
  } catch (err) {
7408
7425
  log26.warn(
@@ -7510,8 +7527,8 @@ var waitUntil2 = waitUntil;
7510
7527
  // src/commands/mobile/longPress.ts
7511
7528
  import { getBrowserObject as getBrowserObject32 } from "@wdio/utils";
7512
7529
  function longPress(options) {
7513
- const browser = getBrowserObject32(this);
7514
- if (!browser.isMobile) {
7530
+ const browser2 = getBrowserObject32(this);
7531
+ if (!browser2.isMobile) {
7515
7532
  throw new Error("The longPress command is only available for mobile platforms.");
7516
7533
  }
7517
7534
  if (typeof options !== "undefined" && (typeof options !== "object" || Array.isArray(options))) {
@@ -7529,12 +7546,12 @@ function longPress(options) {
7529
7546
  // src/commands/mobile/pinch.ts
7530
7547
  import { getBrowserObject as getBrowserObject33 } from "@wdio/utils";
7531
7548
  async function pinch(options = {}) {
7532
- const browser = getBrowserObject33(this);
7533
- if (!browser.isMobile) {
7549
+ const browser2 = getBrowserObject33(this);
7550
+ if (!browser2.isMobile) {
7534
7551
  throw new Error("The pinch command is only available for mobile platforms.");
7535
7552
  }
7536
- const { duration, scale } = validatePinchAndZoomOptions({ browser, gesture: "pinch", options });
7537
- const gestureConfig = browser.isIOS ? {
7553
+ const { duration, scale } = validatePinchAndZoomOptions({ browser: browser2, gesture: "pinch", options });
7554
+ const gestureConfig = browser2.isIOS ? {
7538
7555
  elementId: await this.elementId,
7539
7556
  scale,
7540
7557
  velocity: -Math.abs(duration)
@@ -7542,29 +7559,29 @@ async function pinch(options = {}) {
7542
7559
  } : {
7543
7560
  elementId: await this.elementId,
7544
7561
  percent: scale,
7545
- speed: calculateAndroidPinchAndZoomSpeed({ browser, duration, scale })
7562
+ speed: calculateAndroidPinchAndZoomSpeed({ browser: browser2, duration, scale })
7546
7563
  };
7547
- return browser.execute(browser.isIOS ? "mobile: pinch" : "mobile: pinchCloseGesture", gestureConfig);
7564
+ return browser2.execute(browser2.isIOS ? "mobile: pinch" : "mobile: pinchCloseGesture", gestureConfig);
7548
7565
  }
7549
7566
 
7550
7567
  // src/commands/mobile/zoom.ts
7551
7568
  import { getBrowserObject as getBrowserObject34 } from "@wdio/utils";
7552
7569
  async function zoom(options = {}) {
7553
- const browser = getBrowserObject34(this);
7554
- if (!browser.isMobile) {
7570
+ const browser2 = getBrowserObject34(this);
7571
+ if (!browser2.isMobile) {
7555
7572
  throw new Error("The zoom command is only available for mobile platforms.");
7556
7573
  }
7557
- const { duration, scale } = validatePinchAndZoomOptions({ browser, gesture: "zoom", options });
7558
- const gestureConfig = browser.isIOS ? {
7574
+ const { duration, scale } = validatePinchAndZoomOptions({ browser: browser2, gesture: "zoom", options });
7575
+ const gestureConfig = browser2.isIOS ? {
7559
7576
  elementId: await this.elementId,
7560
7577
  scale,
7561
7578
  velocity: duration
7562
7579
  } : {
7563
7580
  elementId: await this.elementId,
7564
7581
  percent: scale,
7565
- speed: calculateAndroidPinchAndZoomSpeed({ browser, duration, scale })
7582
+ speed: calculateAndroidPinchAndZoomSpeed({ browser: browser2, duration, scale })
7566
7583
  };
7567
- return browser.execute(browser.isIOS ? "mobile: pinch" : "mobile: pinchOpenGesture", gestureConfig);
7584
+ return browser2.execute(browser2.isIOS ? "mobile: pinch" : "mobile: pinchOpenGesture", gestureConfig);
7568
7585
  }
7569
7586
 
7570
7587
  // src/utils/index.ts
@@ -7904,9 +7921,9 @@ function transformClassicToBidiSelector(using, value) {
7904
7921
  throw new Error(`Can't transform classic selector ${using} to Bidi selector`);
7905
7922
  }
7906
7923
  async function findDeepElement(selector) {
7907
- const browser = getBrowserObject35(this);
7908
- const shadowRootManager = getShadowRootManager(browser);
7909
- const contextManager = getContextManager(browser);
7924
+ const browser2 = getBrowserObject35(this);
7925
+ const shadowRootManager = getShadowRootManager(browser2);
7926
+ const contextManager = getContextManager(browser2);
7910
7927
  const context = await contextManager.getCurrentContext();
7911
7928
  const shadowRoots = shadowRootManager.getShadowElementsByContextId(
7912
7929
  context,
@@ -7915,7 +7932,7 @@ async function findDeepElement(selector) {
7915
7932
  const { using, value } = findStrategy(selector, this.isW3C, this.isMobile);
7916
7933
  const locator = transformClassicToBidiSelector(using, value);
7917
7934
  const startNodes = shadowRoots.length > 0 ? shadowRoots.map((shadowRootNodeId) => ({ sharedId: shadowRootNodeId })) : this.elementId ? [{ sharedId: this.elementId }] : void 0;
7918
- const deepElementResult = await browser.browsingContextLocateNodes({ locator, context, startNodes }).then(async (result) => {
7935
+ const deepElementResult = await browser2.browsingContextLocateNodes({ locator, context, startNodes }).then(async (result) => {
7919
7936
  const nodes = result.nodes.filter((node) => Boolean(node.sharedId)).map((node) => ({
7920
7937
  [ELEMENT_KEY18]: node.sharedId,
7921
7938
  locator
@@ -7924,7 +7941,7 @@ async function findDeepElement(selector) {
7924
7941
  return nodes[0];
7925
7942
  }
7926
7943
  const scopedNodes = await Promise.all(nodes.map(async (node) => {
7927
- const isIn = await browser.execute(
7944
+ const isIn = await browser2.execute(
7928
7945
  elementContains,
7929
7946
  { [ELEMENT_KEY18]: this.elementId },
7930
7947
  node
@@ -7934,7 +7951,7 @@ async function findDeepElement(selector) {
7934
7951
  return scopedNodes[0];
7935
7952
  }, (err) => {
7936
7953
  log27.warn(`Failed to execute browser.browsingContextLocateNodes({ ... }) due to ${err}, falling back to regular WebDriver Classic command`);
7937
- return this && "elementId" in this && this.elementId ? this.findElementFromElement(this.elementId, using, value) : browser.findElement(using, value);
7954
+ return this && "elementId" in this && this.elementId ? this.findElementFromElement(this.elementId, using, value) : browser2.findElement(using, value);
7938
7955
  });
7939
7956
  if (!deepElementResult) {
7940
7957
  return new Error(`Couldn't find element with selector "${selector}"`);
@@ -7942,9 +7959,9 @@ async function findDeepElement(selector) {
7942
7959
  return deepElementResult;
7943
7960
  }
7944
7961
  async function findDeepElements(selector) {
7945
- const browser = getBrowserObject35(this);
7946
- const shadowRootManager = getShadowRootManager(browser);
7947
- const contextManager = getContextManager(browser);
7962
+ const browser2 = getBrowserObject35(this);
7963
+ const shadowRootManager = getShadowRootManager(browser2);
7964
+ const contextManager = getContextManager(browser2);
7948
7965
  const context = await contextManager.getCurrentContext();
7949
7966
  const shadowRoots = shadowRootManager.getShadowElementsByContextId(
7950
7967
  context,
@@ -7953,7 +7970,7 @@ async function findDeepElements(selector) {
7953
7970
  const { using, value } = findStrategy(selector, this.isW3C, this.isMobile);
7954
7971
  const locator = transformClassicToBidiSelector(using, value);
7955
7972
  const startNodes = shadowRoots.length > 0 ? shadowRoots.map((shadowRootNodeId) => ({ sharedId: shadowRootNodeId })) : this.elementId ? [{ sharedId: this.elementId }] : void 0;
7956
- const deepElementResult = await browser.browsingContextLocateNodes({ locator, context, startNodes }).then(async (result) => {
7973
+ const deepElementResult = await browser2.browsingContextLocateNodes({ locator, context, startNodes }).then(async (result) => {
7957
7974
  const nodes = result.nodes.filter((node) => Boolean(node.sharedId)).map((node) => ({
7958
7975
  [ELEMENT_KEY18]: node.sharedId,
7959
7976
  locator
@@ -7962,7 +7979,7 @@ async function findDeepElements(selector) {
7962
7979
  return nodes;
7963
7980
  }
7964
7981
  const scopedNodes = await Promise.all(nodes.map(async (node) => {
7965
- const isIn = await browser.execute(
7982
+ const isIn = await browser2.execute(
7966
7983
  elementContains,
7967
7984
  { [ELEMENT_KEY18]: this.elementId },
7968
7985
  node
@@ -7972,7 +7989,7 @@ async function findDeepElements(selector) {
7972
7989
  return scopedNodes;
7973
7990
  }, (err) => {
7974
7991
  log27.warn(`Failed to execute browser.browsingContextLocateNodes({ ... }) due to ${err}, falling back to regular WebDriver Classic command`);
7975
- return this && "elementId" in this && this.elementId ? this.findElementsFromElement(this.elementId, using, value) : browser.findElements(using, value);
7992
+ return this && "elementId" in this && this.elementId ? this.findElementsFromElement(this.elementId, using, value) : browser2.findElements(using, value);
7976
7993
  });
7977
7994
  return deepElementResult;
7978
7995
  }
@@ -8472,7 +8489,7 @@ var NOOP2 = () => {
8472
8489
  var ProtocolStub = class {
8473
8490
  static async newSession(options) {
8474
8491
  const capabilities = emulateSessionCapabilities(options.capabilities);
8475
- const browser = {
8492
+ const browser2 = {
8476
8493
  options,
8477
8494
  capabilities,
8478
8495
  requestedCapabilities: capabilities,
@@ -8488,9 +8505,9 @@ var ProtocolStub = class {
8488
8505
  overwriteCommand: NOOP2,
8489
8506
  ...capabilitiesEnvironmentDetector(capabilities)
8490
8507
  };
8491
- browser.addCommand = (...args) => browser.customCommands.push(args);
8492
- browser.overwriteCommand = (...args) => browser.overwrittenCommands.push(args);
8493
- return browser;
8508
+ browser2.addCommand = (...args) => browser2.customCommands.push(args);
8509
+ browser2.overwriteCommand = (...args) => browser2.overwrittenCommands.push(args);
8510
+ return browser2;
8494
8511
  }
8495
8512
  /**
8496
8513
  * added just in case user wants to somehow reload webdriver before it was started.