使用chrome 78和chromedriver78 当我单击音频文件或尝试使用硒测试停止音频时,出现此错误。
错误:
org.openqa.selenium.JavascriptException:JavaScript错误:无法在“文档”上执行“ elementsFromPoint”:提供的双精度值是非限定的。
请注意,它仅在远程Webdriver上发生,并且不一致。
详细信息在这里:
当“ [item_1]”元素的音频播放器在“ [data-rcfid ='checkbox_7']”中停止播放时
org.openqa.selenium.JavascriptException:JavaScript错误:无法在“文档”上执行“ elementsFromPoint”:提供的双精度值是非限定的。 (会议信息:chrome = 78.0.3904.70) 内部版本信息:版本:'3.11.0',版本:'e59cfb3',时间:'2018-03-11T20:26:55.152Z' 系统信息:主机:'ip-10-0-10-137',ip:'10 .0.10.137',操作系统名称:'Linux',os.arch:'amd64',os.version:'4.4.0- 71-generic',java.version:'1.8.0_111' 驱动程序信息:org.openqa.selenium.remote.RemoteWebDriver 功能{acceptInsecureCerts:true,browserName:chrome,browserVersion:78.0.3904.70,chrome:{chromedriverVersion:78.0.3904.70(edb9c9f3de024 ...,userDataDir:C:\ Windows \ proxy \ scoped_dir ...},goog:chromeOptions:{ debuggerAddress:本地主机:1674},javascriptEnabled:true,networkConnectionEnabled:false,pageLoadStrategy:正常,平台:XP,platformName:XP,代理服务器:Proxy(),setWindowRect:true,strictFileInteractability:false,超时:{隐式:0,pageLoad: 300000,脚本:30000},unhandledPromptBehavior:accept,webdriver.remote.sessionid:eb7d4195af3426c181317a16028 ...} 会话ID:eb7d4195af3426c181317a160286b15e0125b619 在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)处 在sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187) 在org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122) 在org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49) 在org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158) 在org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:545) 在org.openqa.selenium.remote.RemoteWebDriver.perform(RemoteWebDriver.java:611) 在org.openqa.selenium.interactions.Actions $ BuiltAction.perform(Actions.java:638) 在webDriver.Driver.click(Driver.java:147) 在pageObjects.ActivityPageObject.clickAudioInlineStopIn(ActivityPageObject.java:205) 在stepDefinition.Activity.theAudioPlayerOfTheElementIsStoppedIn(Activity.java:61) 当在[[data-rcfid ='checkbox_7']“中停止“ item_1”元素的音频播放器时(/ opt / atlassian / bamboo-home / xml-data / build-dir / 16744451 / RCF1-RMIT -BROW3 / rcf-automation-tests / src / test / resources / featureFiles / interactions / markedInteractions / CheckBox.feature:433)
答案 0 :(得分:5)
我遇到了同样的问题,观察到的是,同一xpath包含多个元素。找到不同的唯一xpath可以解决
答案 1 :(得分:3)
我也遇到了同样的问题,只需将窗口向下滚动到我要定位的元素就可以解决该问题。似乎该元素未在视口中显示,这就是为什么硒不可见该元素的原因。
在找到并单击元素之前,尝试添加以下行:
driver.execute_script("window.scrollTo(0, window.scrollY + 100)")
driver.implicitly_wait(3)
答案 2 :(得分:0)
在尝试单击AngularJS网格中的单元格时遇到了同样的问题。我确认我的XPath查询仅导致一个结果,然后研究了添加等待条件是否有帮助。事实证明,在此处添加“等待”可以使代码继续运行而不会出错。
下面的代码是我用来单击单元格的方法。当Click()方法被另一个元素拦截时,我从Click()切换为Action。
public void ClickEmploymentChangeLogButton()
{
Wait.Until(WaitConditions.ElementIsVisibleAndEnabled(EmploymentChangeLogButton));
Actions actions = new Actions(driver);
actions.MoveToElement(EmploymentChangeLogButton).Perform();
actions.MoveToElement(EmploymentChangeLogButton).Click().Perform();
}
WaitConditions是一个单独的类,用于对不赞成使用的ExpectedConditions包的某些行为进行建模。
这是上面使用的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;
}
};
}
答案 3 :(得分:0)
问题是,您发现Web浏览器中未以图形方式显示的元素-location属性的值为:X = 0和Y = 0;因此您可能找到了错误的元素。
答案 4 :(得分:0)
这个错误信息...
Javascript error: Failed to execute 'elementsFromPoint' on 'Document': The provided double value is non-finite
...暗示 WebDriver 实例无法使用 Locator Strategy 找到所需元素,原因之一或其他:
<iframe>
/ <frame>
display: none;
相关的 HTML 将有助于以更好的方式分析问题。但是,您需要注意以下几点:
确保定位器策略在 HTML DOM 中唯一标识所需元素。
为 elementToBeClickable()
引入 WebDriverWait,您可以使用以下任一 Locator Strategies:
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>
内,您需要为所需的 frameToBeAvailableAndSwitchToIt()
引入 WebDriverWait。
您可以在以下位置找到一些相关的详细讨论:
答案 5 :(得分:0)
我也遇到了同样的问题。就我而言,问题是我尝试移动到的元素在浏览器中尚不可见。
所以我使用了 time.sleep(1)
在那之后它起作用了。
答案 6 :(得分:0)
当我从 70 年代 (71?) 的版本升级到 ChromeDriver 88 时出现此错误。它实际上是由早期版本的解决方法引起的。这是使用角度下拉菜单。我必须移动到该元素,然后在单独的步骤中单击它,而不是单击一个元素。当我删除 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();
错误消失了,更干净了。