webdriverio 9.2.4 → 9.2.5
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/context.d.ts.map +1 -1
- package/build/index.js +169 -163
- package/package.json +5 -5
package/build/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAEA,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,kBAS7D;AAED;;;;GAIG;AACH,qBAAa,cAAc;;gBAIX,OAAO,EAAE,WAAW,CAAC,OAAO;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAEA,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,kBAS7D;AAED;;;;GAIG;AACH,qBAAa,cAAc;;gBAIX,OAAO,EAAE,WAAW,CAAC,OAAO;IAoCxC;;OAEG;IACG,UAAU;IAUhB,iBAAiB,CAAE,OAAO,EAAE,MAAM;IAI5B,iBAAiB;CAM1B"}
|
package/build/index.js
CHANGED
|
@@ -150,13 +150,13 @@ var WebDriverError = class extends Error {
|
|
|
150
150
|
}
|
|
151
151
|
};
|
|
152
152
|
function getElement(selector, res, props = { isReactElement: false, isShadowElement: false }) {
|
|
153
|
-
const
|
|
153
|
+
const browser2 = getBrowserObject(this);
|
|
154
154
|
const browserCommandKeys = Object.keys(browser_exports);
|
|
155
155
|
const propertiesObject = {
|
|
156
156
|
/**
|
|
157
157
|
* filter out browser commands from object
|
|
158
158
|
*/
|
|
159
|
-
...Object.entries(clone(
|
|
159
|
+
...Object.entries(clone(browser2.__propertiesObject__)).reduce((commands, [name, descriptor]) => {
|
|
160
160
|
if (!browserCommandKeys.includes(name)) {
|
|
161
161
|
commands[name] = descriptor;
|
|
162
162
|
}
|
|
@@ -188,19 +188,19 @@ function getElement(selector, res, props = { isReactElement: false, isShadowElem
|
|
|
188
188
|
const elementInstance = element(this.sessionId, elementErrorHandler(wrapCommand));
|
|
189
189
|
const origAddCommand = elementInstance.addCommand.bind(elementInstance);
|
|
190
190
|
elementInstance.addCommand = (name, fn) => {
|
|
191
|
-
|
|
191
|
+
browser2.__propertiesObject__[name] = { value: fn };
|
|
192
192
|
origAddCommand(name, fn);
|
|
193
193
|
};
|
|
194
194
|
return elementInstance;
|
|
195
195
|
}
|
|
196
196
|
var getElements = function getElements2(selector, elemResponse, props = { isReactElement: false, isShadowElement: false }) {
|
|
197
|
-
const
|
|
197
|
+
const browser2 = getBrowserObject(this);
|
|
198
198
|
const browserCommandKeys = Object.keys(browser_exports);
|
|
199
199
|
const propertiesObject = {
|
|
200
200
|
/**
|
|
201
201
|
* filter out browser commands from object
|
|
202
202
|
*/
|
|
203
|
-
...Object.entries(clone(
|
|
203
|
+
...Object.entries(clone(browser2.__propertiesObject__)).reduce((commands, [name, descriptor]) => {
|
|
204
204
|
if (!browserCommandKeys.includes(name)) {
|
|
205
205
|
commands[name] = descriptor;
|
|
206
206
|
}
|
|
@@ -239,7 +239,7 @@ var getElements = function getElements2(selector, elemResponse, props = { isReac
|
|
|
239
239
|
const elementInstance = element(this.sessionId, elementErrorHandler(wrapCommand));
|
|
240
240
|
const origAddCommand = elementInstance.addCommand.bind(elementInstance);
|
|
241
241
|
elementInstance.addCommand = (name, fn) => {
|
|
242
|
-
|
|
242
|
+
browser2.__propertiesObject__[name] = { value: fn };
|
|
243
243
|
origAddCommand(name, fn);
|
|
244
244
|
};
|
|
245
245
|
return elementInstance;
|
|
@@ -1129,8 +1129,8 @@ var ClockManager = class {
|
|
|
1129
1129
|
#browser;
|
|
1130
1130
|
#resetFn = () => Promise.resolve();
|
|
1131
1131
|
#isInstalled = false;
|
|
1132
|
-
constructor(
|
|
1133
|
-
this.#browser =
|
|
1132
|
+
constructor(browser2) {
|
|
1133
|
+
this.#browser = browser2;
|
|
1134
1134
|
}
|
|
1135
1135
|
/**
|
|
1136
1136
|
* Install fake timers on the browser. If you call the `emulate` command, WebdriverIO will automatically install
|
|
@@ -2578,13 +2578,13 @@ var deviceDescriptorsSource = {
|
|
|
2578
2578
|
};
|
|
2579
2579
|
|
|
2580
2580
|
// src/commands/browser/emulate.ts
|
|
2581
|
-
function storeRestoreFunction(
|
|
2582
|
-
if (!restoreFunctions.has(
|
|
2583
|
-
restoreFunctions.set(
|
|
2581
|
+
function storeRestoreFunction(browser2, scope, fn) {
|
|
2582
|
+
if (!restoreFunctions.has(browser2)) {
|
|
2583
|
+
restoreFunctions.set(browser2, /* @__PURE__ */ new Map());
|
|
2584
2584
|
}
|
|
2585
|
-
const restoreFunctionsList = restoreFunctions.get(
|
|
2585
|
+
const restoreFunctionsList = restoreFunctions.get(browser2)?.get(scope);
|
|
2586
2586
|
const updatedList = restoreFunctionsList ? [...restoreFunctionsList, fn] : [fn];
|
|
2587
|
-
restoreFunctions.get(
|
|
2587
|
+
restoreFunctions.get(browser2)?.set(scope, updatedList);
|
|
2588
2588
|
}
|
|
2589
2589
|
async function emulate(scope, options) {
|
|
2590
2590
|
if (!this.isBidi) {
|
|
@@ -2975,21 +2975,21 @@ var ReferenceValue = class {
|
|
|
2975
2975
|
|
|
2976
2976
|
// src/context.ts
|
|
2977
2977
|
var contextManager = /* @__PURE__ */ new Map();
|
|
2978
|
-
function getContextManager(
|
|
2979
|
-
const existingContextManager = contextManager.get(
|
|
2978
|
+
function getContextManager(browser2) {
|
|
2979
|
+
const existingContextManager = contextManager.get(browser2);
|
|
2980
2980
|
if (existingContextManager) {
|
|
2981
2981
|
return existingContextManager;
|
|
2982
2982
|
}
|
|
2983
|
-
const newContext = new ContextManager(
|
|
2984
|
-
contextManager.set(
|
|
2983
|
+
const newContext = new ContextManager(browser2);
|
|
2984
|
+
contextManager.set(browser2, newContext);
|
|
2985
2985
|
return newContext;
|
|
2986
2986
|
}
|
|
2987
2987
|
var ContextManager = class {
|
|
2988
2988
|
#browser;
|
|
2989
2989
|
#currentContext;
|
|
2990
|
-
constructor(
|
|
2991
|
-
this.#browser =
|
|
2992
|
-
if (
|
|
2990
|
+
constructor(browser2) {
|
|
2991
|
+
this.#browser = browser2;
|
|
2992
|
+
if (!this.#isEnabled()) {
|
|
2993
2993
|
return;
|
|
2994
2994
|
}
|
|
2995
2995
|
this.#browser.on("command", (event) => {
|
|
@@ -3001,12 +3001,18 @@ var ContextManager = class {
|
|
|
3001
3001
|
}
|
|
3002
3002
|
});
|
|
3003
3003
|
}
|
|
3004
|
+
/**
|
|
3005
|
+
* Only run this session helper if BiDi is enabled and we're not in unit tests.
|
|
3006
|
+
*/
|
|
3007
|
+
#isEnabled() {
|
|
3008
|
+
return !process.env.WDIO_UNIT_TESTS && browser.isBidi;
|
|
3009
|
+
}
|
|
3004
3010
|
/**
|
|
3005
3011
|
* set context at the start of the session
|
|
3006
3012
|
*/
|
|
3007
3013
|
async initialize() {
|
|
3008
|
-
if (
|
|
3009
|
-
return "
|
|
3014
|
+
if (!this.#isEnabled()) {
|
|
3015
|
+
return "";
|
|
3010
3016
|
}
|
|
3011
3017
|
const windowHandle = await this.#browser.getWindowHandle();
|
|
3012
3018
|
this.#currentContext = windowHandle;
|
|
@@ -3028,19 +3034,19 @@ import logger4 from "@wdio/logger";
|
|
|
3028
3034
|
var polyfillManager = /* @__PURE__ */ new Map();
|
|
3029
3035
|
var log4 = logger4("webdriverio:PolyfillManager");
|
|
3030
3036
|
var NAME_POLYFILL = "var __defProp = Object.defineProperty;var __name = function (target, value) { return __defProp(target, 'name', { value: value, configurable: true }); };var __globalThis = (typeof globalThis === 'object' && globalThis) || (typeof window === 'object' && window);__globalThis.__name = __name;";
|
|
3031
|
-
function getPolyfillManager(
|
|
3032
|
-
const existingPolyfillManager = polyfillManager.get(
|
|
3037
|
+
function getPolyfillManager(browser2) {
|
|
3038
|
+
const existingPolyfillManager = polyfillManager.get(browser2);
|
|
3033
3039
|
if (existingPolyfillManager) {
|
|
3034
3040
|
return existingPolyfillManager;
|
|
3035
3041
|
}
|
|
3036
|
-
const newContext = new PolyfillManager(
|
|
3037
|
-
polyfillManager.set(
|
|
3042
|
+
const newContext = new PolyfillManager(browser2);
|
|
3043
|
+
polyfillManager.set(browser2, newContext);
|
|
3038
3044
|
return newContext;
|
|
3039
3045
|
}
|
|
3040
3046
|
var PolyfillManager = class {
|
|
3041
3047
|
#initialize;
|
|
3042
|
-
constructor(
|
|
3043
|
-
if (!
|
|
3048
|
+
constructor(browser2) {
|
|
3049
|
+
if (!browser2.isBidi || process.env.WDIO_UNIT_TESTS || browser2.options?.automationProtocol !== "webdriver") {
|
|
3044
3050
|
this.#initialize = Promise.resolve(true);
|
|
3045
3051
|
return;
|
|
3046
3052
|
}
|
|
@@ -3049,8 +3055,8 @@ var PolyfillManager = class {
|
|
|
3049
3055
|
return closure();
|
|
3050
3056
|
};
|
|
3051
3057
|
this.#initialize = Promise.all([
|
|
3052
|
-
|
|
3053
|
-
|
|
3058
|
+
browser2.addInitScript(polyfill, NAME_POLYFILL),
|
|
3059
|
+
browser2.execute(polyfill, NAME_POLYFILL)
|
|
3054
3060
|
]).then(() => {
|
|
3055
3061
|
log4.info("polyfill script added");
|
|
3056
3062
|
return true;
|
|
@@ -3067,8 +3073,8 @@ async function execute(script, ...args) {
|
|
|
3067
3073
|
throw new Error("number or type of arguments don't agree with execute protocol command");
|
|
3068
3074
|
}
|
|
3069
3075
|
if (this.isBidi && !this.isMultiremote) {
|
|
3070
|
-
const
|
|
3071
|
-
const contextManager2 = getContextManager(
|
|
3076
|
+
const browser2 = getBrowserObject2(this);
|
|
3077
|
+
const contextManager2 = getContextManager(browser2);
|
|
3072
3078
|
const context = await contextManager2.getCurrentContext();
|
|
3073
3079
|
const userScript = typeof script === "string" ? new Function(script) : script;
|
|
3074
3080
|
const functionDeclaration = new Function(`
|
|
@@ -3082,7 +3088,7 @@ async function execute(script, ...args) {
|
|
|
3082
3088
|
context
|
|
3083
3089
|
}
|
|
3084
3090
|
};
|
|
3085
|
-
const result = await
|
|
3091
|
+
const result = await browser2.scriptCallFunction(params);
|
|
3086
3092
|
return parseScriptResult(params, result);
|
|
3087
3093
|
}
|
|
3088
3094
|
if (typeof script === "function") {
|
|
@@ -3101,8 +3107,8 @@ async function executeAsync(script, ...args) {
|
|
|
3101
3107
|
throw new Error("number or type of arguments don't agree with execute protocol command");
|
|
3102
3108
|
}
|
|
3103
3109
|
if (this.isBidi && !this.isMultiremote) {
|
|
3104
|
-
const
|
|
3105
|
-
const contextManager2 = getContextManager(
|
|
3110
|
+
const browser2 = getBrowserObject3(this);
|
|
3111
|
+
const contextManager2 = getContextManager(browser2);
|
|
3106
3112
|
const context = await contextManager2.getCurrentContext();
|
|
3107
3113
|
const userScript = typeof script === "string" ? new Function(script) : script;
|
|
3108
3114
|
const functionDeclaration = new Function(`
|
|
@@ -3124,7 +3130,7 @@ async function executeAsync(script, ...args) {
|
|
|
3124
3130
|
context
|
|
3125
3131
|
}
|
|
3126
3132
|
};
|
|
3127
|
-
const result = await
|
|
3133
|
+
const result = await browser2.scriptCallFunction(params);
|
|
3128
3134
|
return parseScriptResult(params, result);
|
|
3129
3135
|
}
|
|
3130
3136
|
if (typeof script === "function") {
|
|
@@ -3275,8 +3281,8 @@ async function getPuppeteer() {
|
|
|
3275
3281
|
// src/commands/browser/getWindowSize.ts
|
|
3276
3282
|
import { getBrowserObject as getBrowserObject4 } from "@wdio/utils";
|
|
3277
3283
|
async function getWindowSize() {
|
|
3278
|
-
const
|
|
3279
|
-
const { width, height } = await
|
|
3284
|
+
const browser2 = getBrowserObject4(this);
|
|
3285
|
+
const { width, height } = await browser2.getWindowRect();
|
|
3280
3286
|
return { width, height };
|
|
3281
3287
|
}
|
|
3282
3288
|
|
|
@@ -3485,18 +3491,18 @@ var WebDriverInterception = class _WebDriverInterception {
|
|
|
3485
3491
|
#requestOverwrites = [];
|
|
3486
3492
|
#respondOverwrites = [];
|
|
3487
3493
|
#calls = [];
|
|
3488
|
-
constructor(pattern, mockId, filterOptions,
|
|
3494
|
+
constructor(pattern, mockId, filterOptions, browser2) {
|
|
3489
3495
|
this.#pattern = pattern;
|
|
3490
3496
|
this.#mockId = mockId;
|
|
3491
3497
|
this.#filterOptions = filterOptions;
|
|
3492
|
-
this.#browser =
|
|
3493
|
-
|
|
3494
|
-
|
|
3498
|
+
this.#browser = browser2;
|
|
3499
|
+
browser2.on("network.beforeRequestSent", this.#handleBeforeRequestSent.bind(this));
|
|
3500
|
+
browser2.on("network.responseStarted", this.#handleResponseStarted.bind(this));
|
|
3495
3501
|
}
|
|
3496
|
-
static async initiate(url6, filterOptions,
|
|
3502
|
+
static async initiate(url6, filterOptions, browser2) {
|
|
3497
3503
|
const pattern = parseUrlPattern(url6);
|
|
3498
3504
|
if (!hasSubscribedToEvents) {
|
|
3499
|
-
await
|
|
3505
|
+
await browser2.sessionSubscribe({
|
|
3500
3506
|
events: [
|
|
3501
3507
|
"network.beforeRequestSent",
|
|
3502
3508
|
"network.responseStarted"
|
|
@@ -3505,7 +3511,7 @@ var WebDriverInterception = class _WebDriverInterception {
|
|
|
3505
3511
|
log7.info("subscribed to network events");
|
|
3506
3512
|
hasSubscribedToEvents = true;
|
|
3507
3513
|
}
|
|
3508
|
-
const interception = await
|
|
3514
|
+
const interception = await browser2.networkAddIntercept({
|
|
3509
3515
|
phases: ["beforeRequestSent", "responseStarted"],
|
|
3510
3516
|
urlPatterns: [{
|
|
3511
3517
|
type: "pattern",
|
|
@@ -3516,7 +3522,7 @@ var WebDriverInterception = class _WebDriverInterception {
|
|
|
3516
3522
|
search: getPatternParam(pattern, "search")
|
|
3517
3523
|
}]
|
|
3518
3524
|
});
|
|
3519
|
-
return new _WebDriverInterception(pattern, interception.intercept, filterOptions,
|
|
3525
|
+
return new _WebDriverInterception(pattern, interception.intercept, filterOptions, browser2);
|
|
3520
3526
|
}
|
|
3521
3527
|
#handleBeforeRequestSent(request) {
|
|
3522
3528
|
if (!this.#isRequestMatching(request)) {
|
|
@@ -3792,8 +3798,8 @@ async function mock(url6, filterOptions) {
|
|
|
3792
3798
|
if (!this.isBidi) {
|
|
3793
3799
|
throw new Error("Mocking is only supported when running tests using WebDriver Bidi");
|
|
3794
3800
|
}
|
|
3795
|
-
const
|
|
3796
|
-
const contextManager2 = getContextManager(
|
|
3801
|
+
const browser2 = getBrowserObject5(this);
|
|
3802
|
+
const contextManager2 = getContextManager(browser2);
|
|
3797
3803
|
const context = await contextManager2.getCurrentContext();
|
|
3798
3804
|
if (!SESSION_MOCKS[context]) {
|
|
3799
3805
|
SESSION_MOCKS[context] = /* @__PURE__ */ new Set();
|
|
@@ -4015,8 +4021,8 @@ async function saveScreenshot(filepath) {
|
|
|
4015
4021
|
await assertDirectoryExists(absoluteFilepath);
|
|
4016
4022
|
let screenBuffer;
|
|
4017
4023
|
if (this.isBidi) {
|
|
4018
|
-
const
|
|
4019
|
-
const contextManager2 = getContextManager(
|
|
4024
|
+
const browser2 = getBrowserObject6(this);
|
|
4025
|
+
const contextManager2 = getContextManager(browser2);
|
|
4020
4026
|
const context = await contextManager2.getCurrentContext();
|
|
4021
4027
|
const { data } = await this.browsingContextCaptureScreenshot({ context });
|
|
4022
4028
|
screenBuffer = data;
|
|
@@ -4126,8 +4132,8 @@ async function setWindowSize(width, height) {
|
|
|
4126
4132
|
if (width < minWindowSize2 || width > maxWindowSize2 || height < minWindowSize2 || height > maxWindowSize2) {
|
|
4127
4133
|
throw new Error("setWindowSize expects width and height to be a number in the 0 to 2^31 \u2212 1 range");
|
|
4128
4134
|
}
|
|
4129
|
-
const
|
|
4130
|
-
await
|
|
4135
|
+
const browser2 = getBrowserObject7(this);
|
|
4136
|
+
await browser2.setWindowRect(null, null, width, height);
|
|
4131
4137
|
}
|
|
4132
4138
|
|
|
4133
4139
|
// src/commands/browser/switchWindow.ts
|
|
@@ -4313,18 +4319,18 @@ async function switchFrame(context) {
|
|
|
4313
4319
|
`Invalid type for context parameter: ${typeof context}, expected one of number, string or null. Check out our docs: https://webdriver.io/docs/api/browser/switchToFrame.html`
|
|
4314
4320
|
);
|
|
4315
4321
|
}
|
|
4316
|
-
function switchToFrameHelper(
|
|
4317
|
-
const sessionContext = getContextManager(
|
|
4322
|
+
function switchToFrameHelper(browser2, context) {
|
|
4323
|
+
const sessionContext = getContextManager(browser2);
|
|
4318
4324
|
sessionContext.setCurrentContext(context);
|
|
4319
4325
|
}
|
|
4320
|
-
async function switchToFrameUsingElement(
|
|
4321
|
-
const frame = await
|
|
4326
|
+
async function switchToFrameUsingElement(browser2, element) {
|
|
4327
|
+
const frame = await browser2.execute(
|
|
4322
4328
|
(iframe) => iframe.contentWindow,
|
|
4323
4329
|
element
|
|
4324
4330
|
);
|
|
4325
|
-
switchToFrameHelper(
|
|
4331
|
+
switchToFrameHelper(browser2, frame.context);
|
|
4326
4332
|
const elementId = element[ELEMENT_KEY8];
|
|
4327
|
-
await switchToFrame(
|
|
4333
|
+
await switchToFrame(browser2, { [ELEMENT_KEY8]: elementId });
|
|
4328
4334
|
return frame.context;
|
|
4329
4335
|
}
|
|
4330
4336
|
function byUrl(context, url6) {
|
|
@@ -4350,8 +4356,8 @@ function findContext(urlOrId, contexts, matcher) {
|
|
|
4350
4356
|
}
|
|
4351
4357
|
return void 0;
|
|
4352
4358
|
}
|
|
4353
|
-
async function getFlatContextTree(
|
|
4354
|
-
const tree = await
|
|
4359
|
+
async function getFlatContextTree(browser2) {
|
|
4360
|
+
const tree = await browser2.browsingContextGetTree({});
|
|
4355
4361
|
const mapContext = (context) => [
|
|
4356
4362
|
context.context,
|
|
4357
4363
|
...(context.children || []).map(mapContext)
|
|
@@ -4363,9 +4369,9 @@ async function getFlatContextTree(browser) {
|
|
|
4363
4369
|
}, {});
|
|
4364
4370
|
return allContexts;
|
|
4365
4371
|
}
|
|
4366
|
-
function switchToFrame(
|
|
4372
|
+
function switchToFrame(browser2, frame) {
|
|
4367
4373
|
process.env.DISABLE_WEBDRIVERIO_DEPRECATION_WARNINGS = "true";
|
|
4368
|
-
return
|
|
4374
|
+
return browser2.switchToFrame(frame).finally(() => {
|
|
4369
4375
|
delete process.env.DISABLE_WEBDRIVERIO_DEPRECATION_WARNINGS;
|
|
4370
4376
|
});
|
|
4371
4377
|
}
|
|
@@ -4376,8 +4382,8 @@ import { getBrowserObject as getBrowserObject8 } from "@wdio/utils";
|
|
|
4376
4382
|
var log14 = logger14("webdriverio:throttle");
|
|
4377
4383
|
async function throttle(params) {
|
|
4378
4384
|
log14.warn('Command "throttle" is deprecated and will be removed with the next major version release! Use `throttleNetwork` instead.');
|
|
4379
|
-
const
|
|
4380
|
-
await
|
|
4385
|
+
const browser2 = getBrowserObject8(this);
|
|
4386
|
+
await browser2.throttleNetwork(params);
|
|
4381
4387
|
}
|
|
4382
4388
|
|
|
4383
4389
|
// src/commands/browser/throttleCPU.ts
|
|
@@ -4476,8 +4482,8 @@ async function throttleNetwork(params) {
|
|
|
4476
4482
|
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}"`);
|
|
4477
4483
|
}
|
|
4478
4484
|
if (this.isSauce) {
|
|
4479
|
-
const
|
|
4480
|
-
await
|
|
4485
|
+
const browser2 = getBrowserObject9(this);
|
|
4486
|
+
await browser2.sauceThrottleNetwork(params);
|
|
4481
4487
|
return null;
|
|
4482
4488
|
}
|
|
4483
4489
|
const failedConnectionMessage = "No Puppeteer connection could be established which is required to use this command";
|
|
@@ -4522,13 +4528,13 @@ async function uploadFile(localPath) {
|
|
|
4522
4528
|
|
|
4523
4529
|
// src/networkManager.ts
|
|
4524
4530
|
var networkManager = /* @__PURE__ */ new Map();
|
|
4525
|
-
function getNetworkManager(
|
|
4526
|
-
const existingNetworkManager = networkManager.get(
|
|
4531
|
+
function getNetworkManager(browser2) {
|
|
4532
|
+
const existingNetworkManager = networkManager.get(browser2);
|
|
4527
4533
|
if (existingNetworkManager) {
|
|
4528
4534
|
return existingNetworkManager;
|
|
4529
4535
|
}
|
|
4530
|
-
const newContext = new NetworkManager(
|
|
4531
|
-
networkManager.set(
|
|
4536
|
+
const newContext = new NetworkManager(browser2);
|
|
4537
|
+
networkManager.set(browser2, newContext);
|
|
4532
4538
|
return newContext;
|
|
4533
4539
|
}
|
|
4534
4540
|
var UNKNOWN_NAVIGATION_ID = "UNKNOWN_NAVIGATION_ID";
|
|
@@ -4537,9 +4543,9 @@ var NetworkManager = class {
|
|
|
4537
4543
|
#initialize;
|
|
4538
4544
|
#requests = /* @__PURE__ */ new Map();
|
|
4539
4545
|
#lastNetworkId;
|
|
4540
|
-
constructor(
|
|
4541
|
-
this.#browser =
|
|
4542
|
-
if (!
|
|
4546
|
+
constructor(browser2) {
|
|
4547
|
+
this.#browser = browser2;
|
|
4548
|
+
if (!browser2.isBidi || process.env.WDIO_UNIT_TESTS || browser2.options?.automationProtocol !== "webdriver") {
|
|
4543
4549
|
this.#initialize = Promise.resolve(true);
|
|
4544
4550
|
return;
|
|
4545
4551
|
}
|
|
@@ -4928,9 +4934,9 @@ async function actionClick(element, options) {
|
|
|
4928
4934
|
if (!buttonValue.includes(button)) {
|
|
4929
4935
|
throw new Error("Button type not supported.");
|
|
4930
4936
|
}
|
|
4931
|
-
const
|
|
4937
|
+
const browser2 = getBrowserObject10(element);
|
|
4932
4938
|
if (x || y) {
|
|
4933
|
-
const { width, height } = await
|
|
4939
|
+
const { width, height } = await browser2.getElementRect(element.elementId);
|
|
4934
4940
|
if (x && x < -Math.floor(width / 2) || x && x > Math.floor(width / 2)) {
|
|
4935
4941
|
log15.warn("x would cause a out of bounds error as it goes outside of element");
|
|
4936
4942
|
}
|
|
@@ -4939,7 +4945,7 @@ async function actionClick(element, options) {
|
|
|
4939
4945
|
}
|
|
4940
4946
|
}
|
|
4941
4947
|
const clickNested = async () => {
|
|
4942
|
-
await
|
|
4948
|
+
await browser2.action("pointer", {
|
|
4943
4949
|
parameters: { pointerType: "mouse" }
|
|
4944
4950
|
}).move({ origin: element, x, y }).down({ button }).up({ button }).perform(skipRelease);
|
|
4945
4951
|
};
|
|
@@ -4999,8 +5005,8 @@ async function custom$2(strategyName, ...strategyArguments) {
|
|
|
4999
5005
|
// src/commands/element/doubleClick.ts
|
|
5000
5006
|
import { getBrowserObject as getBrowserObject13 } from "@wdio/utils";
|
|
5001
5007
|
async function doubleClick() {
|
|
5002
|
-
const
|
|
5003
|
-
return
|
|
5008
|
+
const browser2 = getBrowserObject13(this);
|
|
5009
|
+
return browser2.action("pointer", { parameters: { pointerType: "mouse" } }).move({ origin: this }).down().up().pause(10).down().up().perform();
|
|
5004
5010
|
}
|
|
5005
5011
|
|
|
5006
5012
|
// src/commands/element/dragAndDrop.ts
|
|
@@ -5031,22 +5037,22 @@ async function dragAndDrop(target, { duration = 10 } = {}) {
|
|
|
5031
5037
|
const targetOrigin = isMovingToElement ? targetRef : "pointer";
|
|
5032
5038
|
const targetX = isMovingToElement ? 0 : moveToCoordinates.x;
|
|
5033
5039
|
const targetY = isMovingToElement ? 0 : moveToCoordinates.y;
|
|
5034
|
-
const
|
|
5035
|
-
return
|
|
5040
|
+
const browser2 = getBrowserObject14(this);
|
|
5041
|
+
return browser2.action("pointer").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();
|
|
5036
5042
|
}
|
|
5037
5043
|
|
|
5038
5044
|
// src/commands/element/execute.ts
|
|
5039
5045
|
import { getBrowserObject as getBrowserObject15 } from "@wdio/utils";
|
|
5040
5046
|
async function execute2(script, ...args) {
|
|
5041
|
-
const
|
|
5042
|
-
return
|
|
5047
|
+
const browser2 = getBrowserObject15(this);
|
|
5048
|
+
return browser2.execute(script, this, ...args);
|
|
5043
5049
|
}
|
|
5044
5050
|
|
|
5045
5051
|
// src/commands/element/executeAsync.ts
|
|
5046
5052
|
import { getBrowserObject as getBrowserObject16 } from "@wdio/utils";
|
|
5047
5053
|
async function executeAsync2(script, ...args) {
|
|
5048
|
-
const
|
|
5049
|
-
return
|
|
5054
|
+
const browser2 = getBrowserObject16(this);
|
|
5055
|
+
return browser2.executeAsync(script, this, ...args);
|
|
5050
5056
|
}
|
|
5051
5057
|
|
|
5052
5058
|
// src/commands/element/getAttribute.ts
|
|
@@ -5120,9 +5126,9 @@ function mergeEqualSymmetricalValue(cssValues) {
|
|
|
5120
5126
|
return newCssValues.join(" ");
|
|
5121
5127
|
}
|
|
5122
5128
|
async function getPseudoElementCSSValue(elem, options) {
|
|
5123
|
-
const
|
|
5129
|
+
const browser2 = getBrowserObject17(elem);
|
|
5124
5130
|
const { cssProperty, pseudoElement } = options;
|
|
5125
|
-
const cssValue2 = await
|
|
5131
|
+
const cssValue2 = await browser2.execute(
|
|
5126
5132
|
(elem2, pseudoElement2, cssProperty2) => window.getComputedStyle(elem2, pseudoElement2)[cssProperty2],
|
|
5127
5133
|
elem,
|
|
5128
5134
|
pseudoElement,
|
|
@@ -5156,13 +5162,13 @@ import logger16 from "@wdio/logger";
|
|
|
5156
5162
|
import customElementWrapper from "./scripts/customElement.js";
|
|
5157
5163
|
var shadowRootManager = /* @__PURE__ */ new Map();
|
|
5158
5164
|
var log16 = logger16("webdriverio:ShadowRootManager");
|
|
5159
|
-
function getShadowRootManager(
|
|
5160
|
-
const existingShadowRootManager = shadowRootManager.get(
|
|
5165
|
+
function getShadowRootManager(browser2) {
|
|
5166
|
+
const existingShadowRootManager = shadowRootManager.get(browser2);
|
|
5161
5167
|
if (existingShadowRootManager) {
|
|
5162
5168
|
return existingShadowRootManager;
|
|
5163
5169
|
}
|
|
5164
|
-
const newContext = new ShadowRootManager(
|
|
5165
|
-
shadowRootManager.set(
|
|
5170
|
+
const newContext = new ShadowRootManager(browser2);
|
|
5171
|
+
shadowRootManager.set(browser2, newContext);
|
|
5166
5172
|
return newContext;
|
|
5167
5173
|
}
|
|
5168
5174
|
var ShadowRootManager = class {
|
|
@@ -5170,9 +5176,9 @@ var ShadowRootManager = class {
|
|
|
5170
5176
|
#initialize;
|
|
5171
5177
|
#shadowRoots = /* @__PURE__ */ new Map();
|
|
5172
5178
|
#frameDepth = 0;
|
|
5173
|
-
constructor(
|
|
5174
|
-
this.#browser =
|
|
5175
|
-
if (!
|
|
5179
|
+
constructor(browser2) {
|
|
5180
|
+
this.#browser = browser2;
|
|
5181
|
+
if (!browser2.isBidi || process.env.WDIO_UNIT_TESTS || browser2.options?.automationProtocol !== "webdriver") {
|
|
5176
5182
|
this.#initialize = Promise.resolve(true);
|
|
5177
5183
|
return;
|
|
5178
5184
|
}
|
|
@@ -5182,7 +5188,7 @@ var ShadowRootManager = class {
|
|
|
5182
5188
|
this.#browser.on("log.entryAdded", this.handleLogEntry.bind(this));
|
|
5183
5189
|
this.#browser.on("result", this.#commandResultHandler.bind(this));
|
|
5184
5190
|
this.#browser.on("bidiCommand", this.#handleBidiCommand.bind(this));
|
|
5185
|
-
|
|
5191
|
+
browser2.scriptAddPreloadScript({
|
|
5186
5192
|
functionDeclaration: customElementWrapper.toString()
|
|
5187
5193
|
});
|
|
5188
5194
|
}
|
|
@@ -5412,7 +5418,7 @@ import getHTMLShadowScript from "./scripts/getHTMLShadow.js";
|
|
|
5412
5418
|
var SHADOW_ID_ATTR_NAME = "data-wdio-shadow-id";
|
|
5413
5419
|
var SHADOW_ID_ATTR = `[${SHADOW_ID_ATTR_NAME}]`;
|
|
5414
5420
|
async function getHTML(options = {}) {
|
|
5415
|
-
const
|
|
5421
|
+
const browser2 = getBrowserObject18(this);
|
|
5416
5422
|
if (typeof options !== "object" && typeof options === "boolean") {
|
|
5417
5423
|
options = { includeSelectorTag: options };
|
|
5418
5424
|
} else if (typeof options !== "object") {
|
|
@@ -5426,7 +5432,7 @@ async function getHTML(options = {}) {
|
|
|
5426
5432
|
excludeElements: []
|
|
5427
5433
|
}, options);
|
|
5428
5434
|
const basicGetHTML = (elementId, includeSelectorTag2) => {
|
|
5429
|
-
return
|
|
5435
|
+
return browser2.execute(getHTMLScript, {
|
|
5430
5436
|
[ELEMENT_KEY12]: elementId,
|
|
5431
5437
|
// w3c compatible
|
|
5432
5438
|
ELEMENT: elementId
|
|
@@ -5442,12 +5448,12 @@ async function getHTML(options = {}) {
|
|
|
5442
5448
|
);
|
|
5443
5449
|
}
|
|
5444
5450
|
const { load } = await import("cheerio");
|
|
5445
|
-
const shadowRootManager2 = getShadowRootManager(
|
|
5446
|
-
const contextManager2 = getContextManager(
|
|
5451
|
+
const shadowRootManager2 = getShadowRootManager(browser2);
|
|
5452
|
+
const contextManager2 = getContextManager(browser2);
|
|
5447
5453
|
const context = await contextManager2.getCurrentContext();
|
|
5448
5454
|
const shadowRootElementPairs = shadowRootManager2.getShadowElementPairsByContextId(context, this.elementId);
|
|
5449
5455
|
const elementsWithShadowRootAndIdVerified = (await Promise.all(
|
|
5450
|
-
shadowRootElementPairs.map(([elemId, elem]) =>
|
|
5456
|
+
shadowRootElementPairs.map(([elemId, elem]) => browser2.execute((elem2) => elem2.tagName, { [ELEMENT_KEY12]: elemId }).then(
|
|
5451
5457
|
() => [elemId, elem],
|
|
5452
5458
|
() => void 0
|
|
5453
5459
|
))
|
|
@@ -5456,7 +5462,7 @@ async function getHTML(options = {}) {
|
|
|
5456
5462
|
{ [ELEMENT_KEY12]: elemId },
|
|
5457
5463
|
shadowId ? { [ELEMENT_KEY12]: shadowId } : void 0
|
|
5458
5464
|
]);
|
|
5459
|
-
const { html, shadowElementHTML } = await
|
|
5465
|
+
const { html, shadowElementHTML } = await browser2.execute(
|
|
5460
5466
|
getHTMLShadowScript,
|
|
5461
5467
|
{ [ELEMENT_KEY12]: this.elementId },
|
|
5462
5468
|
includeSelectorTag,
|
|
@@ -5566,8 +5572,8 @@ async function isClickable() {
|
|
|
5566
5572
|
if (this.isMobile && await this.getContext().catch(() => void 0) === "NATIVE_APP") {
|
|
5567
5573
|
throw new Error("Method not supported in mobile native environment. It is unlikely that you need to use this command.");
|
|
5568
5574
|
}
|
|
5569
|
-
const
|
|
5570
|
-
return
|
|
5575
|
+
const browser2 = getBrowserObject19(this);
|
|
5576
|
+
return browser2.execute(isElementClickableScript, {
|
|
5571
5577
|
[ELEMENT_KEY13]: this.elementId,
|
|
5572
5578
|
// w3c compatible
|
|
5573
5579
|
ELEMENT: this.elementId
|
|
@@ -5580,12 +5586,12 @@ import { getBrowserObject as getBrowserObject20 } from "@wdio/utils";
|
|
|
5580
5586
|
import isElementDisplayedScript from "./scripts/isElementDisplayed.js";
|
|
5581
5587
|
import isElementInViewportScript from "./scripts/isElementInViewport.js";
|
|
5582
5588
|
async function isDisplayed(commandParams = { withinViewport: false }) {
|
|
5583
|
-
const
|
|
5589
|
+
const browser2 = getBrowserObject20(this);
|
|
5584
5590
|
if (!await hasElementId(this)) {
|
|
5585
5591
|
return false;
|
|
5586
5592
|
}
|
|
5587
|
-
const isNativeApplication = !
|
|
5588
|
-
if (
|
|
5593
|
+
const isNativeApplication = !browser2.capabilities.browserName;
|
|
5594
|
+
if (browser2.isMobile && isNativeApplication) {
|
|
5589
5595
|
if (commandParams?.withinViewport) {
|
|
5590
5596
|
throw new Error(
|
|
5591
5597
|
"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."
|
|
@@ -5593,9 +5599,9 @@ async function isDisplayed(commandParams = { withinViewport: false }) {
|
|
|
5593
5599
|
}
|
|
5594
5600
|
return await this.isElementDisplayed(this.elementId);
|
|
5595
5601
|
}
|
|
5596
|
-
const isDisplayed2 = await
|
|
5602
|
+
const isDisplayed2 = await browser2.execute(isElementDisplayedScript, this);
|
|
5597
5603
|
if (isDisplayed2 && commandParams?.withinViewport) {
|
|
5598
|
-
return
|
|
5604
|
+
return browser2.execute(isElementInViewportScript, this);
|
|
5599
5605
|
}
|
|
5600
5606
|
return isDisplayed2;
|
|
5601
5607
|
}
|
|
@@ -5615,9 +5621,9 @@ var getWebElement = (el) => ({
|
|
|
5615
5621
|
// jsonwp compatible
|
|
5616
5622
|
});
|
|
5617
5623
|
async function isEqual(el) {
|
|
5618
|
-
const
|
|
5619
|
-
if (
|
|
5620
|
-
const context = await
|
|
5624
|
+
const browser2 = getBrowserObject21(this);
|
|
5625
|
+
if (browser2.isMobile) {
|
|
5626
|
+
const context = await browser2.getContext().catch(() => void 0);
|
|
5621
5627
|
const contextId = typeof context === "string" ? context : context?.id;
|
|
5622
5628
|
if (contextId && contextId.toLowerCase().includes("native")) {
|
|
5623
5629
|
return this.elementId === el.elementId;
|
|
@@ -5625,7 +5631,7 @@ async function isEqual(el) {
|
|
|
5625
5631
|
}
|
|
5626
5632
|
let result;
|
|
5627
5633
|
try {
|
|
5628
|
-
result = await
|
|
5634
|
+
result = await browser2.execute(
|
|
5629
5635
|
/* istanbul ignore next */
|
|
5630
5636
|
function(el1, el2) {
|
|
5631
5637
|
return el1 === el2;
|
|
@@ -5656,8 +5662,8 @@ import { ELEMENT_KEY as ELEMENT_KEY15 } from "webdriver";
|
|
|
5656
5662
|
import { getBrowserObject as getBrowserObject22 } from "@wdio/utils";
|
|
5657
5663
|
import isFocusedScript from "./scripts/isFocused.js";
|
|
5658
5664
|
async function isFocused() {
|
|
5659
|
-
const
|
|
5660
|
-
return
|
|
5665
|
+
const browser2 = await getBrowserObject22(this);
|
|
5666
|
+
return browser2.execute(isFocusedScript, {
|
|
5661
5667
|
[ELEMENT_KEY15]: this.elementId,
|
|
5662
5668
|
// w3c compatible
|
|
5663
5669
|
ELEMENT: this.elementId
|
|
@@ -5675,8 +5681,8 @@ import { ELEMENT_KEY as ELEMENT_KEY16 } from "webdriver";
|
|
|
5675
5681
|
import { getBrowserObject as getBrowserObject23 } from "@wdio/utils";
|
|
5676
5682
|
import isElementStable from "./scripts/isElementStable.js";
|
|
5677
5683
|
async function isStable() {
|
|
5678
|
-
const
|
|
5679
|
-
return await
|
|
5684
|
+
const browser2 = getBrowserObject23(this);
|
|
5685
|
+
return await browser2.executeAsync(isElementStable, {
|
|
5680
5686
|
[ELEMENT_KEY16]: this.elementId,
|
|
5681
5687
|
// w3c compatible
|
|
5682
5688
|
ELEMENT: this.elementId
|
|
@@ -5689,9 +5695,9 @@ import logger17 from "@wdio/logger";
|
|
|
5689
5695
|
import { getBrowserObject as getBrowserObject24 } from "@wdio/utils";
|
|
5690
5696
|
var log17 = logger17("webdriver");
|
|
5691
5697
|
async function moveTo({ xOffset, yOffset } = {}) {
|
|
5692
|
-
const
|
|
5698
|
+
const browser2 = getBrowserObject24(this);
|
|
5693
5699
|
if (xOffset || yOffset) {
|
|
5694
|
-
const { width, height } = await
|
|
5700
|
+
const { width, height } = await browser2.getElementRect(this.elementId);
|
|
5695
5701
|
if (xOffset && xOffset < -Math.floor(width / 2) || xOffset && xOffset > Math.floor(width / 2)) {
|
|
5696
5702
|
log17.warn("xOffset would cause a out of bounds error as it goes outside of element");
|
|
5697
5703
|
}
|
|
@@ -5700,7 +5706,7 @@ async function moveTo({ xOffset, yOffset } = {}) {
|
|
|
5700
5706
|
}
|
|
5701
5707
|
}
|
|
5702
5708
|
const moveToNested = async () => {
|
|
5703
|
-
await
|
|
5709
|
+
await browser2.action("pointer", { parameters: { pointerType: "mouse" } }).move({ origin: this, x: xOffset || 0, y: yOffset || 0 }).perform();
|
|
5704
5710
|
};
|
|
5705
5711
|
try {
|
|
5706
5712
|
await moveToNested();
|
|
@@ -5752,10 +5758,10 @@ async function react$$2(selector, { props = {}, state = {} } = {}) {
|
|
|
5752
5758
|
const resqScriptPath = url4.fileURLToPath(await resolve3("resq", import.meta.url));
|
|
5753
5759
|
resqScript3 = (await fs8.readFile(resqScriptPath)).toString();
|
|
5754
5760
|
}
|
|
5755
|
-
const
|
|
5761
|
+
const browser2 = await getBrowserObject25(this);
|
|
5756
5762
|
await this.executeScript(resqScript3.toString(), []);
|
|
5757
|
-
await
|
|
5758
|
-
const res = await
|
|
5763
|
+
await browser2.execute(waitToLoadReact3);
|
|
5764
|
+
const res = await browser2.execute(
|
|
5759
5765
|
react$$Script2,
|
|
5760
5766
|
selector,
|
|
5761
5767
|
props,
|
|
@@ -5778,10 +5784,10 @@ async function react$2(selector, { props = {}, state = {} } = {}) {
|
|
|
5778
5784
|
const resqScriptPath = url5.fileURLToPath(await resolve4("resq", import.meta.url));
|
|
5779
5785
|
resqScript4 = (await fs9.readFile(resqScriptPath)).toString();
|
|
5780
5786
|
}
|
|
5781
|
-
const
|
|
5787
|
+
const browser2 = await getBrowserObject26(this);
|
|
5782
5788
|
await this.executeScript(resqScript4.toString(), []);
|
|
5783
|
-
await
|
|
5784
|
-
const res = await
|
|
5789
|
+
await browser2.execute(waitToLoadReact4);
|
|
5790
|
+
const res = await browser2.execute(
|
|
5785
5791
|
react$Script2,
|
|
5786
5792
|
selector,
|
|
5787
5793
|
props,
|
|
@@ -5811,8 +5817,8 @@ import { ELEMENT_KEY as ELEMENT_KEY17 } from "webdriver";
|
|
|
5811
5817
|
import { getBrowserObject as getBrowserObject27 } from "@wdio/utils";
|
|
5812
5818
|
var log18 = logger18("webdriverio");
|
|
5813
5819
|
function scrollIntoViewWeb(options = { block: "start", inline: "nearest" }) {
|
|
5814
|
-
const
|
|
5815
|
-
return
|
|
5820
|
+
const browser2 = getBrowserObject27(this);
|
|
5821
|
+
return browser2.execute(
|
|
5816
5822
|
(elem, options2) => elem.scrollIntoView(options2),
|
|
5817
5823
|
{
|
|
5818
5824
|
[ELEMENT_KEY17]: this.elementId,
|
|
@@ -5824,14 +5830,14 @@ function scrollIntoViewWeb(options = { block: "start", inline: "nearest" }) {
|
|
|
5824
5830
|
);
|
|
5825
5831
|
}
|
|
5826
5832
|
async function scrollIntoView(options = { block: "start", inline: "nearest" }) {
|
|
5827
|
-
const
|
|
5828
|
-
if (
|
|
5833
|
+
const browser2 = getBrowserObject27(this);
|
|
5834
|
+
if (browser2.isMobile) {
|
|
5829
5835
|
return scrollIntoViewWeb.call(this, options);
|
|
5830
5836
|
}
|
|
5831
5837
|
try {
|
|
5832
|
-
const elemRect = await
|
|
5833
|
-
const viewport = await
|
|
5834
|
-
let [scrollX, scrollY] = await
|
|
5838
|
+
const elemRect = await browser2.getElementRect(this.elementId);
|
|
5839
|
+
const viewport = await browser2.getWindowSize();
|
|
5840
|
+
let [scrollX, scrollY] = await browser2.execute(() => [
|
|
5835
5841
|
window.scrollX,
|
|
5836
5842
|
window.scrollY
|
|
5837
5843
|
]);
|
|
@@ -5866,7 +5872,7 @@ async function scrollIntoView(options = { block: "start", inline: "nearest" }) {
|
|
|
5866
5872
|
}
|
|
5867
5873
|
deltaX = Math.round(deltaX - scrollX);
|
|
5868
5874
|
deltaY = Math.round(deltaY - scrollY);
|
|
5869
|
-
await
|
|
5875
|
+
await browser2.action("wheel").scroll({ duration: 0, x: deltaX, y: deltaY, origin: this }).perform();
|
|
5870
5876
|
} catch (err) {
|
|
5871
5877
|
log18.warn(
|
|
5872
5878
|
`Failed to execute "scrollIntoView" using WebDriver Actions API: ${err.message}!
|
|
@@ -6263,11 +6269,11 @@ var createRoleBaseXpathSelector = (role) => {
|
|
|
6263
6269
|
// src/commands/element/shadow$$.ts
|
|
6264
6270
|
var log19 = logger19("webdriverio");
|
|
6265
6271
|
async function shadow$$(selector) {
|
|
6266
|
-
const
|
|
6272
|
+
const browser2 = getBrowserObject28(this);
|
|
6267
6273
|
try {
|
|
6268
|
-
const shadowRoot = await
|
|
6274
|
+
const shadowRoot = await browser2.getElementShadowRoot(this.elementId);
|
|
6269
6275
|
const { using, value } = findStrategy(selector, this.isW3C, this.isMobile);
|
|
6270
|
-
const res = await
|
|
6276
|
+
const res = await browser2.findElementsFromShadowRoot(shadowRoot[SHADOW_ELEMENT_KEY], using, value);
|
|
6271
6277
|
const elements = await getElements.call(this, selector, res, { isShadowElement: true });
|
|
6272
6278
|
return enhanceElementsArray(elements, this, selector);
|
|
6273
6279
|
} catch (err) {
|
|
@@ -6286,11 +6292,11 @@ import { shadowFnFactory as shadowFnFactory2 } from "./scripts/shadowFnFactory.j
|
|
|
6286
6292
|
import { getBrowserObject as getBrowserObject29 } from "@wdio/utils";
|
|
6287
6293
|
var log20 = logger20("webdriverio");
|
|
6288
6294
|
async function shadow$(selector) {
|
|
6289
|
-
const
|
|
6295
|
+
const browser2 = getBrowserObject29(this);
|
|
6290
6296
|
try {
|
|
6291
|
-
const shadowRoot = await
|
|
6297
|
+
const shadowRoot = await browser2.getElementShadowRoot(this.elementId);
|
|
6292
6298
|
const { using, value } = findStrategy(selector, this.isW3C, this.isMobile);
|
|
6293
|
-
const res = await
|
|
6299
|
+
const res = await browser2.findElementFromShadowRoot(shadowRoot[SHADOW_ELEMENT_KEY2], using, value);
|
|
6294
6300
|
return getElement.call(this, selector, res, { isShadowElement: true });
|
|
6295
6301
|
} catch (err) {
|
|
6296
6302
|
log20.warn(
|
|
@@ -6717,9 +6723,9 @@ function transformClassicToBidiSelector(using, value) {
|
|
|
6717
6723
|
throw new Error(`Can't transform classic selector ${using} to Bidi selector`);
|
|
6718
6724
|
}
|
|
6719
6725
|
async function findDeepElement(selector) {
|
|
6720
|
-
const
|
|
6721
|
-
const shadowRootManager2 = getShadowRootManager(
|
|
6722
|
-
const contextManager2 = getContextManager(
|
|
6726
|
+
const browser2 = getBrowserObject30(this);
|
|
6727
|
+
const shadowRootManager2 = getShadowRootManager(browser2);
|
|
6728
|
+
const contextManager2 = getContextManager(browser2);
|
|
6723
6729
|
const context = await contextManager2.getCurrentContext();
|
|
6724
6730
|
const shadowRoots = shadowRootManager2.getShadowElementsByContextId(
|
|
6725
6731
|
context,
|
|
@@ -6728,7 +6734,7 @@ async function findDeepElement(selector) {
|
|
|
6728
6734
|
const { using, value } = findStrategy(selector, this.isW3C, this.isMobile);
|
|
6729
6735
|
const locator = transformClassicToBidiSelector(using, value);
|
|
6730
6736
|
const startNodes = shadowRoots.length > 0 ? shadowRoots.map((shadowRootNodeId) => ({ sharedId: shadowRootNodeId })) : this.elementId ? [{ sharedId: this.elementId }] : void 0;
|
|
6731
|
-
const deepElementResult = await
|
|
6737
|
+
const deepElementResult = await browser2.browsingContextLocateNodes({ locator, context, startNodes }).then(async (result) => {
|
|
6732
6738
|
const nodes = result.nodes.filter((node) => Boolean(node.sharedId)).map((node) => ({
|
|
6733
6739
|
[ELEMENT_KEY18]: node.sharedId,
|
|
6734
6740
|
locator
|
|
@@ -6737,7 +6743,7 @@ async function findDeepElement(selector) {
|
|
|
6737
6743
|
return nodes[0];
|
|
6738
6744
|
}
|
|
6739
6745
|
const scopedNodes = await Promise.all(nodes.map(async (node) => {
|
|
6740
|
-
const isIn = await
|
|
6746
|
+
const isIn = await browser2.execute(
|
|
6741
6747
|
elementContains,
|
|
6742
6748
|
{ [ELEMENT_KEY18]: this.elementId },
|
|
6743
6749
|
node
|
|
@@ -6747,7 +6753,7 @@ async function findDeepElement(selector) {
|
|
|
6747
6753
|
return scopedNodes[0];
|
|
6748
6754
|
}, (err) => {
|
|
6749
6755
|
log21.warn(`Failed to execute browser.browsingContextLocateNodes({ ... }) due to ${err}, falling back to regular WebDriver Classic command`);
|
|
6750
|
-
return this && "elementId" in this && this.elementId ? this.findElementFromElement(this.elementId, using, value) :
|
|
6756
|
+
return this && "elementId" in this && this.elementId ? this.findElementFromElement(this.elementId, using, value) : browser2.findElement(using, value);
|
|
6751
6757
|
});
|
|
6752
6758
|
if (!deepElementResult) {
|
|
6753
6759
|
return new Error(`Couldn't find element with selector "${selector}"`);
|
|
@@ -6755,9 +6761,9 @@ async function findDeepElement(selector) {
|
|
|
6755
6761
|
return deepElementResult;
|
|
6756
6762
|
}
|
|
6757
6763
|
async function findDeepElements(selector) {
|
|
6758
|
-
const
|
|
6759
|
-
const shadowRootManager2 = getShadowRootManager(
|
|
6760
|
-
const contextManager2 = getContextManager(
|
|
6764
|
+
const browser2 = getBrowserObject30(this);
|
|
6765
|
+
const shadowRootManager2 = getShadowRootManager(browser2);
|
|
6766
|
+
const contextManager2 = getContextManager(browser2);
|
|
6761
6767
|
const context = await contextManager2.getCurrentContext();
|
|
6762
6768
|
const shadowRoots = shadowRootManager2.getShadowElementsByContextId(
|
|
6763
6769
|
context,
|
|
@@ -6766,7 +6772,7 @@ async function findDeepElements(selector) {
|
|
|
6766
6772
|
const { using, value } = findStrategy(selector, this.isW3C, this.isMobile);
|
|
6767
6773
|
const locator = transformClassicToBidiSelector(using, value);
|
|
6768
6774
|
const startNodes = shadowRoots.length > 0 ? shadowRoots.map((shadowRootNodeId) => ({ sharedId: shadowRootNodeId })) : this.elementId ? [{ sharedId: this.elementId }] : void 0;
|
|
6769
|
-
const deepElementResult = await
|
|
6775
|
+
const deepElementResult = await browser2.browsingContextLocateNodes({ locator, context, startNodes }).then(async (result) => {
|
|
6770
6776
|
const nodes = result.nodes.filter((node) => Boolean(node.sharedId)).map((node) => ({
|
|
6771
6777
|
[ELEMENT_KEY18]: node.sharedId,
|
|
6772
6778
|
locator
|
|
@@ -6775,7 +6781,7 @@ async function findDeepElements(selector) {
|
|
|
6775
6781
|
return nodes;
|
|
6776
6782
|
}
|
|
6777
6783
|
const scopedNodes = await Promise.all(nodes.map(async (node) => {
|
|
6778
|
-
const isIn = await
|
|
6784
|
+
const isIn = await browser2.execute(
|
|
6779
6785
|
elementContains,
|
|
6780
6786
|
{ [ELEMENT_KEY18]: this.elementId },
|
|
6781
6787
|
node
|
|
@@ -6785,7 +6791,7 @@ async function findDeepElements(selector) {
|
|
|
6785
6791
|
return scopedNodes;
|
|
6786
6792
|
}, (err) => {
|
|
6787
6793
|
log21.warn(`Failed to execute browser.browsingContextLocateNodes({ ... }) due to ${err}, falling back to regular WebDriver Classic command`);
|
|
6788
|
-
return this && "elementId" in this && this.elementId ? this.findElementsFromElement(this.elementId, using, value) :
|
|
6794
|
+
return this && "elementId" in this && this.elementId ? this.findElementsFromElement(this.elementId, using, value) : browser2.findElements(using, value);
|
|
6789
6795
|
});
|
|
6790
6796
|
return deepElementResult;
|
|
6791
6797
|
}
|
|
@@ -7285,7 +7291,7 @@ var NOOP2 = () => {
|
|
|
7285
7291
|
var ProtocolStub = class {
|
|
7286
7292
|
static async newSession(options) {
|
|
7287
7293
|
const capabilities = emulateSessionCapabilities(options.capabilities);
|
|
7288
|
-
const
|
|
7294
|
+
const browser2 = {
|
|
7289
7295
|
options,
|
|
7290
7296
|
capabilities,
|
|
7291
7297
|
requestedCapabilities: capabilities,
|
|
@@ -7299,9 +7305,9 @@ var ProtocolStub = class {
|
|
|
7299
7305
|
off: NOOP2,
|
|
7300
7306
|
...capabilitiesEnvironmentDetector(capabilities)
|
|
7301
7307
|
};
|
|
7302
|
-
|
|
7303
|
-
|
|
7304
|
-
return
|
|
7308
|
+
browser2.addCommand = (...args) => browser2.customCommands.push(args);
|
|
7309
|
+
browser2.overwriteCommand = (...args) => browser2.overwrittenCommands.push(args);
|
|
7310
|
+
return browser2;
|
|
7305
7311
|
}
|
|
7306
7312
|
/**
|
|
7307
7313
|
* added just in case user wants to somehow reload webdriver before it was started.
|
|
@@ -7349,22 +7355,22 @@ async function getProtocolDriver(options) {
|
|
|
7349
7355
|
|
|
7350
7356
|
// src/dialog.ts
|
|
7351
7357
|
var dialogManager = /* @__PURE__ */ new Map();
|
|
7352
|
-
function getDialogManager(
|
|
7353
|
-
const existingDialogManager = dialogManager.get(
|
|
7358
|
+
function getDialogManager(browser2) {
|
|
7359
|
+
const existingDialogManager = dialogManager.get(browser2);
|
|
7354
7360
|
if (existingDialogManager) {
|
|
7355
7361
|
return existingDialogManager;
|
|
7356
7362
|
}
|
|
7357
|
-
const newContext = new DialogManager(
|
|
7358
|
-
dialogManager.set(
|
|
7363
|
+
const newContext = new DialogManager(browser2);
|
|
7364
|
+
dialogManager.set(browser2, newContext);
|
|
7359
7365
|
return newContext;
|
|
7360
7366
|
}
|
|
7361
7367
|
var DialogManager = class {
|
|
7362
7368
|
#browser;
|
|
7363
7369
|
#initialize;
|
|
7364
7370
|
#autoHandleDialog = true;
|
|
7365
|
-
constructor(
|
|
7366
|
-
this.#browser =
|
|
7367
|
-
if (!
|
|
7371
|
+
constructor(browser2) {
|
|
7372
|
+
this.#browser = browser2;
|
|
7373
|
+
if (!browser2.isBidi || process.env.WDIO_UNIT_TESTS || browser2.options?.automationProtocol !== "webdriver") {
|
|
7368
7374
|
this.#initialize = Promise.resolve(true);
|
|
7369
7375
|
return;
|
|
7370
7376
|
}
|
|
@@ -7406,12 +7412,12 @@ var Dialog = class {
|
|
|
7406
7412
|
#message;
|
|
7407
7413
|
#defaultValue;
|
|
7408
7414
|
#type;
|
|
7409
|
-
constructor(event,
|
|
7415
|
+
constructor(event, browser2) {
|
|
7410
7416
|
this.#message = event.message;
|
|
7411
7417
|
this.#defaultValue = event.defaultValue;
|
|
7412
7418
|
this.#type = event.type;
|
|
7413
7419
|
this.#context = event.context;
|
|
7414
|
-
this.#browser =
|
|
7420
|
+
this.#browser = browser2;
|
|
7415
7421
|
}
|
|
7416
7422
|
message() {
|
|
7417
7423
|
return this.#message;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "webdriverio",
|
|
3
3
|
"description": "Next-gen browser and mobile automation test framework for Node.js",
|
|
4
|
-
"version": "9.2.
|
|
4
|
+
"version": "9.2.5",
|
|
5
5
|
"homepage": "https://webdriver.io",
|
|
6
6
|
"author": "Christian Bromann <mail@bromann.dev>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -76,12 +76,12 @@
|
|
|
76
76
|
"dependencies": {
|
|
77
77
|
"@types/node": "^20.11.30",
|
|
78
78
|
"@types/sinonjs__fake-timers": "^8.1.5",
|
|
79
|
-
"@wdio/config": "9.2.
|
|
79
|
+
"@wdio/config": "9.2.5",
|
|
80
80
|
"@wdio/logger": "9.1.3",
|
|
81
81
|
"@wdio/protocols": "9.2.2",
|
|
82
82
|
"@wdio/repl": "9.0.8",
|
|
83
83
|
"@wdio/types": "9.2.2",
|
|
84
|
-
"@wdio/utils": "9.2.
|
|
84
|
+
"@wdio/utils": "9.2.5",
|
|
85
85
|
"archiver": "^7.0.1",
|
|
86
86
|
"aria-query": "^5.3.0",
|
|
87
87
|
"cheerio": "^1.0.0-rc.12",
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
"rgb2hex": "0.2.5",
|
|
101
101
|
"serialize-error": "^11.0.3",
|
|
102
102
|
"urlpattern-polyfill": "^10.0.0",
|
|
103
|
-
"webdriver": "9.2.
|
|
103
|
+
"webdriver": "9.2.5"
|
|
104
104
|
},
|
|
105
105
|
"peerDependencies": {
|
|
106
106
|
"puppeteer-core": "^22.3.0"
|
|
@@ -110,5 +110,5 @@
|
|
|
110
110
|
"optional": true
|
|
111
111
|
}
|
|
112
112
|
},
|
|
113
|
-
"gitHead": "
|
|
113
|
+
"gitHead": "4c2bcd9c674afd799436639d215aac7b6861fcc1"
|
|
114
114
|
}
|