【问题标题】:javascript error: Failed to execute 'elementsFromPoint' on 'Document': The provided double value is non-finitejavascript 错误:无法在“文档”上执行“elementsFromPoint”:提供的双精度值是非有限的
【发布时间】:2020-05-08 05:49:53
【问题描述】:

我最近将我的 chrome 版本更新为最新版本,即 79.0.3945.130 (Official Build) (64-bit),并从 here 下载了兼容的 chromedriver

我已经开始面临这个错误。在详细调试时,我发现Select 类导致了问题。无论我在代码中选择下拉菜单的任何位置,都会遇到此问题。

下拉列表的 HTML 如下 sn-p:

<div class="rd-input--wrapper" id="178">
    <label for="attribute178">Flavour</label>
    <select name="super_attribute[178]" data-selector="super_attribute[178]" data-validate="{required:true}" id="attribute178" class="super-attribute-select">
        <option value="">Select</option>
        <option value="27">Chocolate</option>
        <option value="28">Strawberry</option>
    </select>
</div>

网页上的下拉菜单:

我正在使用下面的代码来选择一个值

Select s = new Select(getDriver().findElement(By.id("attribute178")));
s.selectByIndex(1);

错误堆栈跟踪

Javascript 错误:无法在“文档”上执行“elementsFromPoint”: 提供的双精度值是无限的。 (会话信息: chrome=79.0.3945.130)构建信息:版本:'3.13.0',修订: '2f0d292',时间:'2018-06-25T15:24:21.231Z' 系统信息:主机: 'ispl_723.test.com', ip: 'fe80:0:0:0:419:64fe:5dea:dae5%en0', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.14.6', java.version: '1.8.0_191' 驱动信息: com.qmetry.qaf.automation.ui.webdriver.QAFExtendedWebDriver 功能 {acceptInsecureCerts: false, browserName: chrome, 浏览器版本:79.0.3945.130,铬:{chromedriverVersion: 79.0.3945.36 (3582db32b3389..., userDataDir: /var/folders/qf/x6bn9cgj1rx...}, goog:chromeOptions: {debuggerAddress: 本地主机:61452},javascriptEnabled:真,networkConnectionEnabled: 假,pageLoadStrategy:正常,平台:MAC,平台名称:MAC, 代理:代理(),setWindowRect:真,strictFileInteractability:假, 超时:{隐式:0,pageLoad:300000,脚本:30000}, unhandledPromptBehavior:关闭并通知}

之前我使用的是 Chrome 75,一切正常。有没有人遇到过这个问题?已在 SO 上发布与此错误相关的问题没有帮助。

【问题讨论】:

  • 如果它是可重现的,你应该将它发布到 selenium 问题跟踪器

标签: java selenium selenium-webdriver automated-tests


【解决方案1】:

此错误消息...

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

...暗示 WebDriver 实例由于一种或其他原因而无法找到该元素:

  • 当您尝试与之交互时,该元素未正确加载。
  • 元素在&lt;iframe&gt; / &lt;frame&gt;
  • 元素的style属性包含display: none;
  • 元素在 shadow DOM

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

  • &lt;select&gt; 标签的id 属性是attribute178,这显然是动态的。所以需要构造一个动态的Locator Strategy

  • 由于&lt;select&gt;标签的id属性是动态的,你需要为element_to_be_clickable()诱导WebDriverWait,你可以使用以下Locator Strategies之一:

  • cssSelector:

    Select s = new Select(new WebDriverWait(getDriver(), 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("select.super-attribute-select[id^='attribute']"))));
    s.selectByIndex(1);
    
  • xpath:

    Select s = new Select(new WebDriverWait(getDriver(), 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//select[@class='super-attribute-select' and starts-with(@id, 'attribute')]"))));
    s.selectByIndex(1);
    

【讨论】:

  • 感谢@DebanjanB,我已经尝试过这个解决方案,但不幸的是不适合我。
【解决方案2】:

在我的情况下,我在每个命令之前在命令侦听器中使用new Actions(driver).moveToElement(element).perform();,因此它将焦点移到正在执行的元素上。

这一行导致了上述错误。对此发表评论后,它的工作正常。

【讨论】:

    猜你喜欢
    • 2021-04-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多