首页 > 解决方案 > 需要帮助单击阴影根(关闭)类型下的元素

问题描述

单击位于阴影根内部的元素时出现空指针异常(关闭)

试图用 Java Script 处理它:

public WebElement getShadowRootElement(WebElement element) {
    return (WebElement)
            ((JavascriptExecutor)
                    driver).executeScript("return 
arguments[0].shadowRoot", element);
}

在此处输入图像描述

结果:

Cannot read property 'shadowRoot' of null

添加截图: 1.在此处输入图像描述

在此处输入图像描述

标签: javaseleniumgoogle-chromeshadow-domsfdc

解决方案


<path>如果您的用例是与标签内的元素交互<svg>,则确实在#shadow-root (closed).

@hayatoito(Shadow DOM 的创建者)在此评论中明确提到:

引入封闭阴影树的最初动机是"Never allow an access to a node in a closed shadow tree, via any APIs, from outside"AFAIK。像这样,我们无法访问<video>元素中使用的内部隐藏阴影树中的节点,在 Blink 中。

事实上,我就是这样设计了一个封闭的阴影树。如果有办法访问封闭影子树中的节点,则应将其视为规范的错误。

我认为拥有一个 API 来允许在 Chrome 应用程序或扩展程序层进行访问是完全可以的。但是,对于一个普通的网络应用程序,我认为当前的协议是"Never allow it".

如果我们允许它,这意味着我们不需要封闭的影子树。我认为,只要有一棵开放的影子树就足够了。


WebDriver 视角

最近,@AutomatedTester [David Burns,首席培根官,Mozilla Corporation] 发起了关于WebDriver - Web 组件的可测试性的讨论

目前Selenium 团队已开放接受相同的拉取请求。


奥特罗

在这里您可以找到有关如何使用 selenium 自动化影子 DOM 元素的相关讨论?


推荐阅读