带有Shadow DOM的Selenium Webdriver [英] Selenium Webdriver with Shadow DOM
问题描述
在C#中使用Selenium Webdriver时,尝试选择Shadow DOM下存在的元素时出现异常.
While using Selenium Webdriver in C#, I get an exception when trying to select an element that exists under Shadow DOM.
我得到的异常是: NoSuchElementException
您如何建议将Selenium与Shadow DOM一起使用?
How would you suggest to use Selenium with Shadow DOM?
谢谢
米哈尔
推荐答案
尝试找到这样的元素:
driver.FindElement(By.CssSelector('selector_otside_shadow_root /deep/ selector_inside_shadow_root'));
在您的情况下为:
driver.FindElement(By.CssSelector('app-home /deep/ #itemName1'));
您可以在此 css_selector
的 chrome://downloads/
链接中测试此方法:
You can test this approach in chrome://downloads/
link with this css_selector
:
downloads-manager /deep/ downloads-item /deep/ [id=file-link]
在开发工具中.如您所见,需要传递两个 shadow-root
元素,因此请确保您只有一个 shadow-root
元素或使用多个/deep/
就像上面的示例一样.
in dev tools. As you can see there was needed to pass two shadow-root
elements, so make sure that you have only one shadow-root
element or use multiple /deep/
like in example above.
或者您可以像这样使用JavasciptExecutor:
or you can use JavasciptExecutor like this:
IJavaScriptExecutor js = (IJavaScriptExecutor)_driver;
var element = js.ExecuteScript("return document.querySelector('selector_outside_shadow_root').shadowRoot.querySelector('selector_inside_shadow_root');");
- 注意: 据我所知,第一个建议仅在Chrome中有效,如果您想使用跨浏览器解决方案,请使用第二个.
这篇关于带有Shadow DOM的Selenium Webdriver的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!