@luminati-io/webdriverio8
Version:
Next-gen browser and mobile automation test framework for Node.js
141 lines • 11.8 kB
JavaScript
import { webdriverMonad, wrapCommand } from '@wdio/utils';
import clone from 'lodash.clonedeep';
import { getBrowserObject, getPrototype as getWDIOPrototype, getElementFromResponse } from './index.js';
import { elementErrorHandler } from '../middlewares.js';
import { ELEMENT_KEY } from '../constants.js';
import * as browserCommands from '../commands/browser.js';
class WebDriverError extends Error {
constructor(obj) {
const { name, stack } = obj;
const { error, stacktrace } = obj;
super(error || name || '');
Object.assign(this, {
message: obj.message,
stack: stacktrace || stack,
});
}
}
/**
* transforms a findElement response into a WDIO element
* @param {string} selector selector that was used to query the element
* @param {Object} res findElement response
* @return {Object} WDIO element object
*/
export const getElement = function findElement(selector, res, props = { isReactElement: false, isShadowElement: false }) {
const browser = getBrowserObject(this);
const browserCommandKeys = Object.keys(browserCommands);
const propertiesObject = {
/**
* filter out browser commands from object
*/
...(Object.entries(clone(browser.__propertiesObject__)).reduce((commands, [name, descriptor]) => {
if (!browserCommandKeys.includes(name)) {
commands[name] = descriptor;
}
return commands;
}, {})),
...getWDIOPrototype('element'),
scope: { value: 'element' }
};
const element = webdriverMonad(this.options, (client) => {
const elementId = getElementFromResponse(res);
if (elementId) {
/**
* set elementId for easy access
*/
client.elementId = elementId;
/**
* set element id with proper key so element can be passed into execute commands
*/
if (this.isW3C) {
client[ELEMENT_KEY] = elementId;
}
else {
client.ELEMENT = elementId;
}
}
else {
client.error = res;
}
client.selector = selector || '';
client.parent = this;
client.emit = this.emit.bind(this);
client.isReactElement = props.isReactElement;
client.isShadowElement = props.isShadowElement;
return client;
}, propertiesObject);
const elementInstance = element(this.sessionId, elementErrorHandler(wrapCommand));
const origAddCommand = elementInstance.addCommand.bind(elementInstance);
elementInstance.addCommand = (name, fn) => {
browser.__propertiesObject__[name] = { value: fn };
origAddCommand(name, fn);
};
return elementInstance;
};
/**
* transforms a findElements response into an array of WDIO elements
* @param {string} selector selector that was used to query the element
* @param {Object} res findElements response
* @return {Array} array of WDIO elements
*/
export const getElements = function getElements(selector, elemResponse, props = { isReactElement: false, isShadowElement: false }) {
const browser = getBrowserObject(this);
const browserCommandKeys = Object.keys(browserCommands);
const propertiesObject = {
/**
* filter out browser commands from object
*/
...(Object.entries(clone(browser.__propertiesObject__)).reduce((commands, [name, descriptor]) => {
if (!browserCommandKeys.includes(name)) {
commands[name] = descriptor;
}
return commands;
}, {})),
...getWDIOPrototype('element')
};
const elements = [elemResponse].flat(1).map((res, i) => {
/**
* if we already deal with an element, just return it
*/
if (res.selector) {
return res;
}
propertiesObject.scope = { value: 'element' };
const element = webdriverMonad(this.options, (client) => {
const elementId = getElementFromResponse(res);
if (elementId) {
/**
* set elementId for easy access
*/
client.elementId = elementId;
/**
* set element id with proper key so element can be passed into execute commands
*/
const elementKey = this.isW3C ? ELEMENT_KEY : 'ELEMENT';
client[elementKey] = elementId;
}
else {
res = res;
client.error = res instanceof Error ? res : new WebDriverError(res);
}
client.selector = Array.isArray(selector)
? selector[i].selector
: selector;
client.parent = this;
client.index = i;
client.emit = this.emit.bind(this);
client.isReactElement = props.isReactElement;
client.isShadowElement = props.isShadowElement;
return client;
}, propertiesObject);
const elementInstance = element(this.sessionId, elementErrorHandler(wrapCommand));
const origAddCommand = elementInstance.addCommand.bind(elementInstance);
elementInstance.addCommand = (name, fn) => {
browser.__propertiesObject__[name] = { value: fn };
origAddCommand(name, fn);
};
return elementInstance;
});
return elements;
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0RWxlbWVudE9iamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9nZXRFbGVtZW50T2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3pELE9BQU8sS0FBSyxNQUFNLGtCQUFrQixDQUFBO0FBR3BDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLElBQUksZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDdkcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDdkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzdDLE9BQU8sS0FBSyxlQUFlLE1BQU0sd0JBQXdCLENBQUE7QUFjekQsTUFBTSxjQUFlLFNBQVEsS0FBSztJQUM5QixZQUFZLEdBQW1DO1FBRTNDLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBWSxDQUFBO1FBQ3BDLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEdBQUcsR0FBNkIsQ0FBQTtRQUUzRCxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUMxQixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtZQUNoQixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87WUFDcEIsS0FBSyxFQUFFLFVBQVUsSUFBSSxLQUFLO1NBQzdCLENBQUMsQ0FBQTtJQUNOLENBQUM7Q0FDSjtBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLFNBQVMsV0FBVyxDQUUxQyxRQUFtQixFQUNuQixHQUE4QixFQUM5QixRQUF5QixFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRTtJQUUxRSxNQUFNLE9BQU8sR0FBRyxn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