webdriverio 9.7.2 → 9.8.0

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