@luminati-io/webdriverio8
Version:
Next-gen browser and mobile automation test framework for Node.js
42 lines • 3.29 kB
JavaScript
import logger from '@wdio/logger';
import { shadowFnFactory } from '../../scripts/shadowFnFactory.js';
import { getElement } from '../../utils/getElementObject.js';
import { getBrowserObject } from '../../utils/index.js';
import { findStrategy } from '../../utils/findStrategy.js';
import { SHADOW_ELEMENT_KEY } from '../../constants.js';
const log = logger('webdriverio');
/**
*
* Access an element 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 an element inside a shadowRoot', async () => {
const innerEl = await $('custom-component').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 {Element}
* @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.findElementFromShadowRoot(shadowRoot[SHADOW_ELEMENT_KEY], using, value);
return getElement.call(this, selector, res, { isShadowElement: true });
}
catch (err) {
log.warn(`Failed to fetch element within shadow DOM using WebDriver command: ${err.message}!\n` +
'Falling back to JavaScript shim.');
return this.$(shadowFnFactory(selector));
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhZG93JC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9lbGVtZW50L3NoYWRvdyQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sY0FBYyxDQUFBO0FBRWpDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBQzFELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBRXZELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQTtBQUVqQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxDQUV6QixRQUFnQjtJQUVoQixNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN0QyxJQUFJLENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDckUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxZQUFZLENBQUMsUUFBa0IsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNwRixNQUFNLEdBQUcsR0FBRyxNQUFNLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDakcsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFrQixFQUFFLEdBQUcsRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ3BGLENBQUM7SUFBQyxPQUFPLEdBQVksRUFBRSxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxJQUFJLENBQ0osc0VBQXVFLEdBQWEsQ0FBQyxPQUFPLEtBQUs7WUFDakcsa0NBQWtDLENBQ3JDLENBQUE7UUFDRCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7SUFDNUMsQ0FBQztBQUNMLENBQUMifQ==