带有Shadow DOM的Selenium Webdriver [英] Selenium Webdriver with Shadow DOM

查看:84
本文介绍了带有Shadow DOM的Selenium Webdriver的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆