java - 需要帮助单击阴影根(关闭)类型下的元素
问题描述
单击位于阴影根内部的元素时出现空指针异常(关闭)
试图用 Java Script 处理它:
public WebElement getShadowRootElement(WebElement element) {
return (WebElement)
((JavascriptExecutor)
driver).executeScript("return
arguments[0].shadowRoot", element);
}
结果:
Cannot read property 'shadowRoot' of null
解决方案
<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 元素的相关讨论?
推荐阅读
- c# - 从 JavaScriptSerializer 将项目绑定到 ComboBox
- javascript - 如何使用 JS 将 GMT 日期时间转换为 GMT Unix TimeStamp?
- python - 为什么即使 PYTHONHASHSEED=0,Python 集的顺序也不确定?
- apache-kafka - 在 Kafka 流作业中进行同步数据库查询或 restful 调用是一个好习惯吗?
- java - Android - RFID 的 EPC 十六进制库充满了空值
- android - 无法验证 dex 文件乱序 annotation_element name_idx
- android - 在 Scroll Flutter 上隐藏 Appbar?
- tensorflow - 张量流中.pb和.pbtxt之间的区别?
- javascript - 当您为引导选择键入焦点时如何激活正常搜索?
- laravel - 在 Laravel PHPUnit 测试中使用内存中的 SQLite