我在测试环境中对shadowroot中的元素进行操作时遇到了困难。假设我有一个web组件<my-component />
,它包含一个按钮<input id="my-button" type="submit" />
在Chrome的console中,我可以执行以下操作:
document.getElementsByTagName('my-component')[0].shadowRoot.querySelector('#my-button').click()
我挣扎着做同样的 puppet 师。
it('should click the button', async () => {
await page.goto(`https://localhost:${port}`, {
waitUntil: ['networkidle0', 'load'],
});
await page.$eval('my-component', (el: Element) => {
el.shadowRoot.querySelector('#my-button').click();
});
});
单击该按钮应该会向我的服务器发出一个http请求,该请求将检索一些数据,然后我希望在dom中对其进行Assert。请求永远不会触发。有什么建议?
2条答案
按热度按时间wdebmtf21#
根据Puppeteer团队的评论,正确的方法是使用JS path:
在Chrome 72(当前的Canary)中,我们引入了一个新选项-“复制JS路径”,位于“复制选择器”选项旁边:
使用JS路径的示例:
uttx8gqw2#
Puppetteer中的P选择器解决了这个问题。
在这种情况下,您可以使用
page.click('>>> #my-button')
。该>>>
允许您选择的东西在shadowRoots。我知道这个问题是旧的,但我需要这个,这个问题仍然弹出搜索。