Selenium Webdriver 与 Shadow DOM

mic*_*hal 2 c# selenium webdriver shadow-dom

在 C# 中使用 Selenium Webdriver 时,在尝试选择 Shadow DOM 下存在的元素时出现异常。

我得到的例外是:NoSuchElementException

您建议如何将 Selenium 与 Shadow DOM 结合使用?

谢谢,

米哈尔

图像

And*_*kov 5

尝试像这样找到您的元素:

driver.FindElement(By.CssSelector('selector_otside_shadow_root /deep/ selector_inside_shadow_root')); 
Run Code Online (Sandbox Code Playgroud)

在你的情况下它将是:

driver.FindElement(By.CssSelector('app-home /deep/ #itemName1'));
Run Code Online (Sandbox Code Playgroud)

chrome://downloads/您可以与此链接测试此方法css_selector

downloads-manager /deep/ downloads-item /deep/ [id=file-link]
Run Code Online (Sandbox Code Playgroud)

在开发工具中。正如您所看到的,需要传递两个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');");
Run Code Online (Sandbox Code Playgroud)
  • 注意:据我所知,第一个建议仅适用于 Chrome,如果您想要跨浏览器解决方案,请使用第二个建议。