Web驱动程序单击ShadowDOM中的元素返回错误“{”message“:”未知错误:无法读取未定义的属性'defaultView'

问题描述 投票:2回答:2

我有一个使用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 undefined\n  (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'的undefined”。我没有看到这个贴在身边,我真的卡住了,想知道是否有人有这个答案。

这是Chrome 66和ChromeDriver 2.38。

java selenium webdriver polymer-2.x
2个回答
2
投票

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


-1
投票

public void forceClickElement(WebElement element){

    jsExec.executeScript("arguments[0].click();", element);
}
© www.soinside.com 2019 - 2024. All rights reserved.