github.com/web-platform-tests/wpt.fyi@v0.0.0-20240530210107-70cf978996f1/webdriver/util.js (about)

     1  const puppeteer = require('puppeteer');
     2  
     3  /**
     4   * Pierces shadow DOM in the page for the given selector.
     5   * @param {puppeteer.Page} page
     6   * @param {puppeteer.ElementHandle} root Root element to query. If null, page is
     7   *    used.
     8   * @param {Array<string>} selectors Selectors in each level of shadow DOM.
     9   * @returns {?puppeteer.ElementHandle}
    10   */
    11  const shadowQuery = async function(page, root, ...selectors) {
    12    if (!selectors || !selectors.length) {
    13      return;
    14    }
    15    const [first, ...others] = selectors;
    16    let result = await (root || page).$(first);
    17    for (const next of others) {
    18      result = await page.evaluateHandle(
    19        (e, selector) => e.shadowRoot.querySelector(selector),
    20        result,
    21        next);
    22    }
    23    return result;
    24  }
    25  exports.shadowQuery = shadowQuery;
    26  
    27  /**
    28   * Pierces shadow DOM in the given element for the given selector.
    29   * @param {puppeteer.ElementHandle} element
    30   * @param {string} selector Selector for the shadow DOM
    31   * @returns {Array<puppeteer.ElementHandle>}
    32   */
    33  const shadowQueryAll = async function(page, element, selector) {
    34    return await page.evaluateHandle(
    35      (e, selector) => e.shadowRoot.querySelectorAll(selector),
    36      element,
    37      selector);
    38  }
    39  exports.shadowQueryAll = shadowQueryAll;
    40  
    41