javascript ошибка: не удалось выполнить elementsFromPoint для документа: указанное двойное значение не является конечным - PullRequest
1 голос
/ 22 января 2020

Я недавно обновил свою chrome версию до последней, то есть 79.0.3945.130 (Official Build) (64-bit), и загрузил совместимый хроматограф с здесь

Я столкнулся с этой ошибкой. Во время отладки подробно я обнаружил, что класс Select вызывает проблему. везде, где я выбираю раскрывающийся список в своем коде, я получаю эту проблему.

Раскрывающийся список HTML выглядит следующим образом:

<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>

И выпадающий список на веб-странице:

enter image description here

Я использую код ниже, чтобы выбрать значение

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:' Ma c OS X ', os.arch:' x86_64 ', os.version : '10 .14.6 ', java .version:' 1.8.0_191 'Информация о драйвере: com.qmetry.qaf.automation.ui.webdriver.QAFExtendedWebDriver Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 79.0. 3945.130, chrome: {chromedriverVersion: 79.0.3945.36 (3582db32b3389 ..., userDataDir: / var / folder / qf / x6bn9cgj1rx ...}, goog: chromeOptions: {debuggerAddress: localhost: 61452}, javasableEdableEnableNableNableNableNableNableNableNableNableNableNableNableNableNableNableNableNableNableNableNableNeNableNableNableNableNableNableNableNableNableNableNableNableNableNableNable. : false, pageLoadStrategy: нормальная, платформа: MA C, platformName: MA C, proxy: Proxy (), setWindowRect: true, strictFileInteractability: false, тайм-ауты: {неявно: 0, pageLoad: 300000, сценарий: 30000} , unhandledPromptBehavior: отклонить и уведомить}

Ранее я использовал Chrome 75 и все было работает как положено. Кто-нибудь сталкивался с этой проблемой? Уже опубликованный вопрос, связанный с этой ошибкой на SO, не помогает.

1 Ответ

1 голос
/ 22 января 2020

Это сообщение об ошибке ...

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

... означает, что экземпляру WebDriver не удалось найти элемент по одной или другим причинам:

  • Элемент не загружен должным образом, когда вы пытаетесь взаимодействовать с ним.
  • Элемент находится внутри <iframe> / <frame>
  • Атрибут style элемента содержит display: none;
  • Элемент находится в тени DOM

Соответствующий HTML был бы полезен для анализа выпускать в лучшую сторону. Тем не менее, вам нужно позаботиться о нескольких вещах следующим образом:

  • Атрибут id тега <select> равен attribute178 , который явно динамичен c , Таким образом, вам нужно создать динамическую c стратегию локатора
  • Поскольку атрибут id тега <select> является Dynami c, вам нужно вызвать WebDriverWait для element_to_be_clickable(), и вы можете использовать любую из следующих стратегий локатора :

    • 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);
      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...