在 C# 中使用 Selenium Webdriver 时,我在尝试选择 Shadow DOM 下存在的元素时遇到异常。
我得到的异常是:NoSuchElementException
您建议如何将 Selenium 与 Shadow DOM 结合使用?
谢谢,
米迦勒
请您参考如下方法:
试着像这样定位你的元素:
driver.FindElement(By.CssSelector('selector_otside_shadow_root /deep/ selector_inside_shadow_root'));
在你的情况下会是:
driver.FindElement(By.CssSelector('app-home /deep/ #itemName1'));
您可以在 chrome://downloads/ 链接中使用此 css_selector 测试此方法:
downloads-manager /deep/ downloads-item /deep/ [id=file-link]
在开发工具中。如您所见,需要传递两个 shadow-root 元素,因此请确保您只有一个 shadow-root 元素或使用多个 /deep/ 就像上面的例子一样。
或者您可以像这样使用 JavasciptExecutor:
IJavaScriptExecutor js = (IJavaScriptExecutor)_driver;
var element = js.ExecuteScript("return document.querySelector('selector_outside_shadow_root').shadowRoot.querySelector('selector_inside_shadow_root');");
- 注意:据我所知,第一个建议仅适用于 Chrome,如果您想要跨浏览器解决方案 - 请使用第二个。
