IJavaScriptExecutor js = (IJavaScriptExecutor)_driver;
var element = js.ExecuteScript("return document.querySelector('selector_outside_shadow_root').shadowRoot.querySelector('selector_inside_shadow_root');");
/// <summary>
/// Method 1 to fetch Shadow Root using Selenium's in build method
/// </summary>
/// <param name="shadowHostElement">IWebElement - Which is parent element of Shadow Root element. Also called Shadow Host</param>
/// <returns>Shadow Root element in the form of ISearchContext</returns>
public static ISearchContext GetShadowRootElement(IWebElement shadowHostElement)
{
ISearchContext shadowRootElement = shadowHostElement.GetShadowRoot();
return shadowRootElement;
}
帮助器方法2
/// <summary>
/// Method 2 to fetch Shadow Root using Selenium's IJavaScriptExecutor
/// </summary>
/// <param name="driver">Instance of IWebDriver</param>
/// <param name="shadowHostElement">IWebElement - Which is parent element of Shadow Root element. Also called Shadow Host</param>
/// <returns>Shadow Root element in the form of ISearchContext</returns>
public static ISearchContext GetShadowRootElementUsingJavaScript(IWebDriver driver, IWebElement shadowHostElement)
{
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
ISearchContext shadowRootElement = (ISearchContext)js.ExecuteScript("return arguments[0].shadowRoot", shadowHostElement);
return shadowRootElement;
}
6条答案
按热度按时间zynd9foi1#
尝试按如下方式定位元素:
在您情况下,它将是:
您可以使用以下
css_selector
在chrome://downloads/
链接中测试此方法:正如你所看到的,需要传递两个
shadow-root
元素,所以确保你只有一个shadow-root
元素,或者像上面的例子一样使用多个/deep/
。也可以像这样使用JavasciptExecutor:
****注:***据我所知,第一个建议只适用于Chrome,如果你想要一个跨浏览器的解决方案-使用第二个。
af7jpaap2#
您可以创建一个方法,该方法接受ShadowDom根定位器列表,并构建js脚本来执行和获取shadow元素:
s3fp2yjn3#
我遇到了同样的问题。我在
试试看:
zvokhttg4#
一个非常好的存储库,具有以Java绑定形式编写的Selenium shadow DOM交互:https://github.com/sukgu/shadow-automation-selenium
这个repo使用了一堆JQuery来扩展和识别shadow dom中的元素。请看一下。应该很容易移植到C#
hgtggwj05#
这会导致错误安德烈,我不知道现在该怎么办:异常提示:javascript错误:参数列表(会话信息:微软边缘服务器=104.0.1293.63)
改为:
但结果是异常提示:javascript错误:无法读取null的属性(阅读“shadowRoot”)
lfapxunr6#
在影子DOM中查找元素的规则
1.首先使用普通的查找元素方法查找Shadow Root元素(也称为Shadow Host)的父元素。
1.调用下面的帮助器方法,通过传递Shadow HostElement来找到影子根元素。使用下面的帮助器方法。
1.在嵌套的影子根的情况下。保持重复上述两个步骤。即再次找到 * 影子主机,然后影子根 。
1.如果你有元素的ID,那么使用影子根元素,找到你想要执行动作的元素,然后在它上面执行你想要的动作。
1.如果ID不可用-您可以使用除XPath之外的任何其他标识符**(XPath在影子DOM中不起作用)。***
帮助器方法1
帮助器方法2
示例代码-Website with Shadow DOM