我有一个使用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。
我刚刚遇到这个问题,并且能够通过使用firefox和geckodriver而不是chrome驱动程序来修复它。修复一切。
public void forceClickElement(WebElement element){
jsExec.executeScript("arguments[0].click();", element);
}