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

尝试使用Java脚本处理它:

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


java - 需要帮助以单击阴影根(封闭)类型下的元素-LMLPHP

结果:

Cannot read property 'shadowRoot' of null


添加了屏幕截图:
1. java - 需要帮助以单击阴影根(封闭)类型下的元素-LMLPHP

java - 需要帮助以单击阴影根(封闭)类型下的元素-LMLPHP

最佳答案

如果您的用例是要与<path>标记内的<svg>元素进行交互,则实际上是在#shadow-root (closed)内。

comment中的@hayatoito(Shadow DOM的创建者)明确提到:


  引入封闭的阴影树的原始动机是"Never allow an access to a node in a closed shadow tree, via any APIs, from outside",AFAIK。这样,我们无法访问Blink中<video>元素中使用的内部隐藏阴影树中的节点。
  
  实际上,我以这种方式设计了一个封闭的影子树。如果可以访问封闭的影子树中的节点,则应将其视为规范的错误。
  
  我认为拥有一个允许在Chrome应用或扩展程序层中进行访问的API完全可以。
  但是,对于普通的Web应用程序,我认为当前协议为"Never allow it"
  
  如果我们允许,那就意味着我们不需要封闭的影子树。我认为只有一棵开放的影子树就足够了。




WebDriver透视图

最近,@ AutomatedTester [Mozilla公司首席培根官David Burns]发起了关于WebDriver - Testability of web components的讨论


Requests
Proposals
Issue Tracker


目前,Selenium团队已开放接受相同请求。



奥托罗

在这里您可以找到有关How to automate shadow DOM elements using selenium?的相关讨论

09-11 18:50