11

使用 chrome 78 和 chromedriver78 当我单击音频文件或尝试使用 selenium 测试停止音频时,我收到此错误。

错误:

org.openqa.selenium.JavascriptException: javascript error: Failed to execute 'elementsFromPoint' on 'Document': The provided double value is non-finite.

请注意,它仅发生在远程 webdriver 上,并且不一致。

错误堆栈跟踪:

当“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:\Windows\proxy\scoped_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)
4

7 回答 7

13

我有同样的问题,观察结果是,同一个 xpath 的多个元素。找到不同的唯一 xpath 解决了它

于 2020-01-06T16:14:48.113 回答
3

我遇到了同样的问题,并且能够通过简单地将窗口向下滚动到我要定位的元素来解决它。似乎该元素没有显示在视口中,这就是为什么它对 selenium 不可见。

在找到并单击元素之前尝试添加以下行:

driver.execute_script("window.scrollTo(0, window.scrollY + 100)")
driver.implicitly_wait(3) 
于 2020-05-12T06:38:22.647 回答
0

我也面临同样的问题。就我而言,问题是我试图移动到的元素在浏览器中尚不可见。

所以我用time.sleep(1)

之后它起作用了。

于 2021-02-04T05:41:55.827 回答
0

问题是,您发现了一个未在 Web 浏览器中以图形方式显示的元素 - location 属性具有值:X=0 和 Y=0; 所以你可能找到了错误的元素。

于 2020-10-21T06:30:24.773 回答
0

我在尝试单击 AngularJS 网格中的单元格时遇到了同样的问题。我确认我的 XPath 查询只产生了一个结果,然后探讨了添加等待条件是否会有所帮助。事实证明,在此处添加等待允许代码继续而不会出错。

下面的代码是我用来单击单元格的方法。我从 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 是一个单独的类,用于对已弃用的 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;
        }
    };
}
于 2020-03-20T17:14:36.833 回答
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();

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

于 2021-02-18T16:14:17.837 回答
0

此错误消息...

Javascript error: Failed to execute 'elementsFromPoint' on 'Document': The provided double value is non-finite

...意味着WebDriver实例由于一个或其他原因无法使用定位器策略找到所需的元素:

  • 定位器策略不会在 DOM Tree 中唯一标识所需的元素
  • 当您尝试与之交互时,该元素未正确加载。
  • 元素在<iframe>/内<frame>
  • 元素的style属性包含display: none;
  • 元素位于shadow DOM中。

分析

相关的 HTML 将有助于以更好的方式分析问题。但是,您需要注意以下几点:

  • 确保定位器策略在HTML DOM中唯一标识所需元素。

  • 诱导WebDriverWaitelementToBeClickable()您可以使用以下任一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()

您可以在 Selenium Webdriver Java 中是否可以在不使用 driver.switchTo().frame(“frameName”) 的情况下切换到框架中的元素中找到相关的详细讨论


参考

您可以在以下位置找到一些相关的详细讨论:

于 2020-12-23T09:57:07.877 回答