使用 chrome 78 和 chromedriver78 当我单击音频文件或尝试使用硒测试停止音频时,我收到此错误。
错误:
org.openqa.selenium.JavascriptException: javascript error: Failed to execute 'elementsFromPoint' on 'Document': The provided double value is non-finite.
请注意,它仅发生在远程 Web 驱动程序中,并且不一致。
错误堆栈跟踪:
当"item_1"元素的音频播放器在"[data-rcfid='checkbox_7']"中停止时
org.openqa.selenium.JavascriptException: javascript error: Failed to execute 'elementsFromPoint' on 'Document': The provided double value is non-finite.
(Session info: chrome=78.0.3904.70)
Build info: version: '3.11.0', revision: 'e59cfb3', time: '2018-03-11T20:26:55.152Z'
System info: host: 'ip-10-0-10-137', ip: '10.0.10.137', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-71-generic', java.version: '1.8.0_111'
Driver info: org.openqa.selenium.remote.RemoteWebDriver
Capabilities {acceptInsecureCerts: true, browserName: chrome, browserVersion: 78.0.3904.70, chrome: {chromedriverVersion: 78.0.3904.70 (edb9c9f3de024..., userDataDir: C:Windowsproxyscoped_dir...}, goog:chromeOptions: {debuggerAddress: localhost:1674}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: XP, platformName: XP, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: accept, webdriver.remote.sessionid: eb7d4195af3426c181317a16028...}
Session ID: eb7d4195af3426c181317a160286b15e0125b619
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:545)
at org.openqa.selenium.remote.RemoteWebDriver.perform(RemoteWebDriver.java:611)
at org.openqa.selenium.interactions.Actions$BuiltAction.perform(Actions.java:638)
at webDriver.Driver.click(Driver.java:147)
at pageObjects.ActivityPageObject.clickAudioInlineStopIn(ActivityPageObject.java:205)
at stepDefinition.Activity.theAudioPlayerOfTheElementIsStoppedIn(Activity.java:61)
at ✽.When the audio player of the "item_1" element is stopped in "[data-rcfid='checkbox_7']"(/opt/atlassian/bamboo-home/xml-data/build-dir/16744451/RCF1-RMIT-BROW3/rcf-automation-tests/src/test/resources/featureFiles/interactions/markedInteractions/CheckBox.feature:433)
我有同样的问题,观察结果是,同一个xpath的多个元素。找到不同的唯一 xpath 解决了它
我遇到了同样的问题,并且能够通过简单地将窗口向下滚动到我所针对的元素来解决它。似乎该元素没有显示在视口中,这就是为什么它对硒不可见的原因。
在查找并单击元素之前,请尝试添加以下行:
driver.execute_script("window.scrollTo(0, window.scrollY + 100)")
driver.implicitly_wait(3)
此错误消息...
Javascript error: Failed to execute 'elementsFromPoint' on 'Document': The provided double value is non-finite
。意味着 WebDriver 实例由于某种原因无法使用定位器策略找到所需的元素:
- 定位器策略不会在 DOM 树中唯一标识所需的元素。
- 当您尝试与元素交互时,该元素未正确加载。
- 元素在
<iframe>
/<frame>
内 - 元素的样式属性包含
display: none;
- 元素位于影子 DOM 中。
分析
相关的HTML将有助于以更好的方式分析问题。但是,您需要注意以下几件事:
确保定位器策略在 HTML DOM 中唯一标识所需元素。
诱导 WebDriverWait 等待
elementToBeClickable()
,您可以使用以下任一定位器策略:cssSelector
:new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("elementCssSelector"))).click();
xpath
:new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("elementXpath"))).click();
如果WebElement在
<iframe>
/<frame>
内,则需要诱导WebDriverWait所需的frameToBeAvailableAndSwitchToIt()
。
<小时 />您可以在Selenium Webdriver Java中是否可以在不使用driver.switchTo((.frame("frameName"(的情况下切换到框架中的元素中找到相关的详细讨论?
参考资料
您可以在以下位置找到一些相关的详细讨论:
- javascript 错误:无法在"文档"上执行"elementsFromPoint":提供的双精度值是非有限的
我在尝试单击 AngularJS 网格中的单元格时遇到了同样的问题。我确认我的 XPath 查询只产生了一个结果,然后探索添加等待条件是否有帮助。事实证明,在此处添加 Wait 允许代码继续而不会出错。
下面的代码是我用来单击单元格的方法。我从 Click(( 切换到 Action,因为 Click(( 方法被不同的元素拦截。
public void ClickEmploymentChangeLogButton()
{
Wait.Until(WaitConditions.ElementIsVisibleAndEnabled(EmploymentChangeLogButton));
Actions actions = new Actions(driver);
actions.MoveToElement(EmploymentChangeLogButton).Perform();
actions.MoveToElement(EmploymentChangeLogButton).Click().Perform();
}
WaitConditions 是一个单独的类,用于对已弃用的 ExpectConditions 包的某些行为进行建模。
这是上面使用的 WaitConditions 中的方法。
public static Func<IWebDriver, bool> ElementIsVisibleAndEnabled(IWebElement element)
{
return (driver) =>
{
try
{
return element.Displayed && element.Enabled;
}
catch (Exception)
{
// If element is null, stale or if it cannot be located
return false;
}
};
}
问题是,您找到了一个未在 Web 浏览器中以图形方式显示的元素 - location 属性的值:X=0 和 Y=0; 所以你可能找错了元素。
我也遇到了同样的问题。就我而言,问题是我尝试移动到的元素在浏览器中尚不可见。
所以我用了time.sleep(1)
在那之后它奏效了。
当我从 88 年代的版本升级到 70 年代(71?(时,出现了此错误。 它实际上是由早期版本的解决方法引起的。 这是使用角度的下拉列表。 我必须移动到该元素,然后按单独的步骤单击它,而不是单击该元素。 当我删除moveToElement
步骤时,错误消失了
以前的代码
masterPage.MasterDropDown.click();
Thread.sleep(3000);
actions.moveToElement(masterPage.MasterDropDown).perform();
Thread.sleep(1000);
actions.moveToElement(masterPage.DropdownButton1).perform();
Thread.sleep(1000);
masterPage.DropdownButton1.click();
已更改为
masterPage.MasterDropDown.click();
masterPage.DropdownButton1.click();
错误消失了,它更干净了。