UNPKG

@luminati-io/webdriverio8

Version:

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

42 lines 3.29 kB
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==