UNPKG

@luminati-io/webdriverio8

Version:

Next-gen browser and mobile automation test framework for Node.js

141 lines 11.8 kB
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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