UNPKG

@luminati-io/webdriverio8

Version:

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

50 lines (48 loc) 3.44 kB
import { getElement } from '../../utils/getElementObject.js'; import { ELEMENT_KEY } from '../../constants.js'; /** * * The `custom$` allows you to use a custom strategy declared by using `browser.addLocatorStrategy`. * Read more on custom selector stratgies in the [Selector docs](../../selectors#custom-selector-strategies). * * <example> :example.js it('should fetch the project title', async () => { await browser.url('https://webdriver.io') browser.addLocatorStrategy('myStrat', (selector) => { return document.querySelectorAll(selector) }) const projectTitle = await browser.custom$('myStrat', '.projectTitle') console.log(await projectTitle.getText()) // WEBDRIVER I/O }) * </example> * * @alias custom$ * @param {string} strategyName * @param {*} strategyArguments * @example https://github.com/webdriverio/example-recipes/blob/f5730428ec3605e856e90bf58be17c9c9da891de/queryElements/customStrategy.js#L2-L11 * @example https://github.com/webdriverio/example-recipes/blob/f5730428ec3605e856e90bf58be17c9c9da891de/queryElements/example.html#L8-L12 * @example https://github.com/webdriverio/example-recipes/blob/f5730428ec3605e856e90bf58be17c9c9da891de/queryElements/customStrategy.js#L16-L19 * @return {Element} */ export async function custom$(strategyName, ...strategyArguments) { const strategy = this.strategies.get(strategyName); if (!strategy) { throw Error('No strategy found for ' + strategyName); } const strategyRef = { strategy, strategyName, strategyArguments }; let res = await this.execute(strategy, ...strategyArguments); /** * if the user's script returns multiple elements * then we just return the first one as this method * is intended to return just one element */ if (Array.isArray(res)) { res = res[0]; } if (res && typeof res[ELEMENT_KEY] === 'string') { return await getElement.call(this, strategyRef, res); } return await getElement.call(this, strategyRef, new Error('no such element')); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tJC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9icm93c2VyL2N1c3RvbSQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUdoRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLE9BQU8sQ0FFekIsWUFBb0IsRUFDcEIsR0FBRyxpQkFBd0I7SUFFM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUEyQixDQUFBO0lBRTVFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNaLE1BQU0sS0FBSyxDQUFDLHdCQUF3QixHQUFHLFlBQVksQ0FBQyxDQUFBO0lBQ3hELENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQTtJQUVqRSxJQUFJLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsaUJBQWlCLENBQUMsQ0FBQTtJQUU1RDs7OztPQUlHO0lBQ0gsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDckIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNoQixDQUFDO0lBRUQsSUFBSSxHQUFHLElBQUksT0FBTyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUMsT0FBTyxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUN4RCxDQUFDO0lBRUQsT0FBTyxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUE7QUFDakYsQ0FBQyJ9