Web 驱动程序单击 ShadowDOM 中的元素返回错误"{"消息":"未知错误:无法读取未定义的属性"默认视图"



我有一个用 Polymer 2 构建的网站,它的 DOM 结构看起来像:

...
<df-link slot="local-nav-drawer-link" link-href="/dictionary" text-color="light">
    #shadow-root (open)
    <a href="/dictionary" title="">
        <dom-if style="display: none;">
            <template is="dom-if"></template>
        </dom-if>
        <span class="dfpl-link__text">Dictionary</span>
    </a>
</df-link>
...

使用页面对象模式,该模式定义阴影根和我要单击的元素为:

@FindBy(css = "df-link")
public WebElement shadowRootElement;
public By shadowAnchorElementSelector = By.cssSelector("a");

用于检索影子根元素的代码如下所示:

WebElement shadowRoot;
shadowRoot = (WebElement) jsExec.executeScript("return arguments[0].shadowRoot;", shadowRootElement);
WebElement anchor = shadowRoot.findElement(shadowAnchorElementSelector);
anchor.click();

我可以成功获取属性值、css 值和内部文本。但是,当我调用单击时,就会发生这种情况。

Apr 18, 2018 10:25:28 AM org.openqa.selenium.remote.server.WebDriverServlet handle
INFO: Found handler: org.openqa.selenium.remote.server.ServicedSession@136d9af5
Apr 18, 2018 10:25:28 AM org.openqa.selenium.remote.server.WebDriverServlet lambda$handle$0
INFO: Handler thread for session 2525b788dd3471e51e986fed682f04ea (chrome): 
Executing POST on /session/2525b788dd3471e51e986fed682f04ea/element/0.23700467091154298-6/click (handler: ServicedSession)
Apr 18, 2018 10:25:28 AM org.openqa.selenium.remote.server.Passthrough handle
INFO: To upstream: {"id":"0.23700467091154298-6"}
Apr 18, 2018 10:25:28 AM org.openqa.selenium.remote.server.Passthrough handle
INFO: To downstream: {"sessionId":"2525b788dd3471e51e986fed682f04ea","status":13,"value":{"message":"unknown error: Cannot read property 'defaultView' of undefinedn  (Session info: chrome=66.0.3359.117)n  (Driver info: chromedriver=2.38.551601 (edb21f07fc70e9027c746edd3201443e011a61ed),platform=Windows NT 10.0.16299 x86_64)"}}

看起来好像发现该元素很好,我从中读取,但是一旦我调用WebElement.click((,ChromeDriver就会返回错误"无法读取未定义的属性'defaultView'"。我还没有看到这个帖子,我真的很卡住,想知道是否有人对此有答案。

这是Chrome 66和ChromeDriver 2.38。

我刚刚遇到了这个问题,并且能够通过使用火狐和壁虎驱动程序而不是chrome驱动程序来修复它。修复了一切。

尝试使用以下代码

   public void forceClickElement(WebElement element){
        jsExec.executeScript("arguments[0].click();", element);
    }

最新更新