@luminati-io/webdriverio8
Version:
Next-gen browser and mobile automation test framework for Node.js
57 lines (55 loc) • 4.14 kB
JavaScript
import { getElements } from '../../utils/getElementObject.js';
import { getBrowserObject, enhanceElementsArray } from '../../utils/index.js';
import { ELEMENT_KEY } from '../../constants.js';
/**
*
* The `customs$$` 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 get all the plugin wrapper buttons', async () => {
await browser.url('https://webdriver.io')
await browser.addLocatorStrategy('myStrat', (selector) => {
return document.querySelectorAll(selector)
})
const pluginRowBlock = await browser.custom$('myStrat', '.pluginRowBlock')
const pluginWrapper = await pluginRowBlock.custom$$('myStrat', '.pluginWrapper')
console.log(pluginWrapper.length) // 4
})
* </example>
*
* @alias custom$$
* @param {string} strategyName
* @param {*} strategyArguments
* @return {ElementArray}
*/
export async function custom$$(strategyName, ...strategyArguments) {
const browserObject = getBrowserObject(this);
const strategy = browserObject.strategies.get(strategyName);
if (!strategy) {
/* istanbul ignore next */
throw Error('No strategy found for ' + strategyName);
}
/**
* fail if root element is not found, similar to:
* $('.notExisting').$('.someElem')
*/
if (!this.elementId) {
throw Error(`Can't call custom$ on element with selector "${this.selector}" because element wasn't found`);
}
const strategyRef = { strategy, strategyName, strategyArguments: [...strategyArguments, this] };
let res = await browserObject.execute(strategy, ...strategyArguments, this);
/**
* if the user's script return just one element
* then we convert it to an array as this method
* should return multiple elements
*/
if (!Array.isArray(res)) {
res = [res];
}
res = res.filter((el) => !!el && typeof el[ELEMENT_KEY] === 'string');
const elements = res.length ? await getElements.call(this, strategyRef, res) : [];
return enhanceElementsArray(elements, this, strategyName, 'custom$$', strategyArguments);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tJCQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvZWxlbWVudC9jdXN0b20kJC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBR2hEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFFBQVEsQ0FFMUIsWUFBb0IsRUFDcEIsR0FBRyxpQkFBd0I7SUFFM0IsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDNUMsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUEyQixDQUFBO0lBRXJGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNaLDBCQUEwQjtRQUMxQixNQUFNLEtBQUssQ0FBQyx3QkFBd0IsR0FBRyxZQUFZLENBQUMsQ0FBQTtJQUN4RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNsQixNQUFNLEtBQUssQ0FBQyxnREFBZ0QsSUFBSSxDQUFDLFFBQVEsZ0NBQWdDLENBQUMsQ0FBQTtJQUM5RyxDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLENBQUMsR0FBRyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFBO0lBRS9GLElBQUksR0FBRyxHQUFHLE1BQU0sYUFBYSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUUzRTs7OztPQUlHO0lBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0QixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNmLENBQUM7SUFFRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQTtJQUVyRSxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBcUMsQ0FBQTtJQUNwSCxPQUFPLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFBO0FBQzVGLENBQUMifQ==