如何为聚合物元素阴影dom元素指定选择器?

d

我有一个要使用Puppeteer测试的基于Polymer的Web应用程序。

当多个聚合物组件相互嵌入时,编写选择器的合适方法是什么?

布局为:

应用> comp1> comp2> target_element

所有的'>'标志着一个新的阴影dom边界。

如果我想在链的末端测试target_element,那么正确的选择器是什么?

Everettss

事实证明,在shadow dom中选择元素并不容易Achim Weimert展示了一些变通办法,可以通过阴影dom进行刺穿选择他的方法适用app-headerhttps://shop.polymer-project.org/

const puppeteer = require('puppeteer');

const shadowSelectorFn = (el, selector) => el.shadowRoot.querySelector(selector);

const queryDeep = async (page, ...selectors) => {
    if (!selectors || selectors.length === 0) {
        return;
    }

    const [ firstSelector, ...restSelectors ] = selectors;
    let parentElement = await page.$(firstSelector);
    for (const selector of restSelectors) {
        parentElement = await page.evaluateHandle(shadowSelectorFn, parentElement, selector);
    }

    return parentElement;
};


(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://shop.polymer-project.org/');


    const app = await page.$('shop-app');
    console.log(app);

    // you can not simply wait for element inside shadow dom
    // it's up to you how you detect if this element is ready
    await page.waitFor(2000);

    const header = await queryDeep(
        page,
        'shop-app', 'app-header'
    );
    console.log(header);

    await browser.close();
})();

值得一提的是,没有简单的方法可以检测app-header元素何时准备就绪。您可以按一定的时间间隔循环检查此元素,或者应寻找其他解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

量角器:无法使用by.deepCss('input')在阴影DOM(聚合物)中选择输入元素

聚合物查询选择器无法在聚合物元素中找到自定义聚合物元素

具有聚合物元素的XMSerializer暴露阴影dom

聚合物-从模板中选择DOM元素

飞镖聚合物更新聚合物dom元素

聚合物机具本机选择元素

如何构建聚合物元素?

聚合物铁选择器将dom.repeat中的this.push()弄乱了

如何使用带阴影DOM的<content>元素的:first-child选择器?

聚合物铁选择器没有出现

如何获取聚合物元素JS内的聚合物元素的宽度

转换聚合物元素

如何为聚合物2创建自定义元素的“调整大小” mixin?

如何更改聚合物日期选择器日历标题和所选日期背景颜色?

dom-repeat中的聚合物动态元素名称

聚合物-选择铁崩解元素

聚合物-如何从嵌入元素的页面中触发对嵌入到“聚合物”元素中的元素的操作?

如何使用纸对话框聚合物元素?

如何向聚合物元素添加功能属性

如何使用凉亭安装聚合物铁元素?

如何在聚合物元素内调用函数

如何动态设置聚合物元素的样式

如何访问其他聚合物元素的ShadowDOM?

如何访问聚合物元素的选定值

聚合物如何重新渲染元素/模板

使用谷歌聚合物,如何获取元素的宽度

如何动态创建聚合物元素\简单标签

聚合物1.0:在纸张菜单元素内使用模板dom-repeat来显示选择时的铁页

如何为自定义聚合物元素创建方法并在主应用程序中调用它?