Skip to main content
 首页 » 编程设计

c#之带有 Shadow DOM 的 Selenium Webdriver

2024年02月25日29落叶无声

在 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,如果您想要跨浏览器解决方案 - 请使用第二个。