Selenium。JavascriptException: javascript error: 无法在"Document"上执行'elementFromPoint':提供的双精度值是非有限的



使用 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();

错误消失了,它更干净了。

相关内容

  • 没有找到相关文章

最新更新