@luminati-io/webdriverio8
Version:
Next-gen browser and mobile automation test framework for Node.js
43 lines • 3.54 kB
JavaScript
import logger from '@wdio/logger';
import { shadowFnFactory } from '../../scripts/shadowFnFactory.js';
import { getElements } from '../../utils/getElementObject.js';
import { getBrowserObject, enhanceElementsArray } from '../../utils/index.js';
import { findStrategy } from '../../utils/findStrategy.js';
import { SHADOW_ELEMENT_KEY } from '../../constants.js';
const log = logger('webdriverio');
/**
*
* Access elements inside a given element's shadowRoot. If you are working
* with lots of nested shadow roots, an alternative approach to `shadow$$`
* is to use the [deep selector](https://webdriver.io/docs/selectors#deep-selectors).
*
* <example>
:shadow$$.js
it('should return elements inside a shadowRoot', async () => {
const innerEl = await $('.input').shadow$$('#innerEl');
console.log(await innerEl.getValue()); // outputs: 'test123'
});
* </example>
*
* @alias element.shadow$$
* @param {String|Function} selector selector or JS Function to fetch a certain element
* @return {ElementArray}
* @type utility
*
*/
export async function shadow$$(selector) {
const browser = getBrowserObject(this);
try {
const shadowRoot = await browser.getElementShadowRoot(this.elementId);
const { using, value } = findStrategy(selector, this.isW3C, this.isMobile);
const res = await browser.findElementsFromShadowRoot(shadowRoot[SHADOW_ELEMENT_KEY], using, value);
const elements = await getElements.call(this, selector, res, { isShadowElement: true });
return enhanceElementsArray(elements, this, selector);
}
catch (err) {
log.warn(`Failed to fetch element within shadow DOM using WebDriver command: ${err.message}!\n` +
'Falling back to JavaScript shim.');
return await this.$$(shadowFnFactory(selector, true));
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhZG93JCQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvZWxlbWVudC9zaGFkb3ckJC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFFakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFHdkQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFBO0FBRWpDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxRQUFRLENBRTFCLFFBQWdCO0lBRWhCLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFBO0lBRXRDLElBQUksQ0FBQztRQUNELE1BQU0sVUFBVSxHQUFHLE1BQU0sT0FBTyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUNyRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLFlBQVksQ0FBQyxRQUFrQixFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3BGLE1BQU0sR0FBRyxHQUFHLE1BQU0sT0FBTyxDQUFDLDBCQUEwQixDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUNsRyxNQUFNLFFBQVEsR0FBRyxNQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQW9CLEVBQUUsR0FBRyxFQUFFLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDbkcsT0FBTyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQW9CLENBQTZCLENBQUE7SUFDakcsQ0FBQztJQUFDLE9BQU8sR0FBWSxFQUFFLENBQUM7UUFDcEIsR0FBRyxDQUFDLElBQUksQ0FDSixzRUFBdUUsR0FBYSxDQUFDLE9BQU8sS0FBSztZQUNqRyxrQ0FBa0MsQ0FDckMsQ0FBQTtRQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUN6RCxDQUFDO0FBQ0wsQ0FBQyJ9