selenium.JavascriptException: ошибка javascript: не удалось выполнить "elementFromPoint" в "документе": указанное двойное значение не является конечным

С использованием chrome 78 и chromedriver78. Когда я щелкаю аудиофайл или пытаюсь остановить звук с помощью тестов на селен, я получаю эту ошибку.

ошибка:

org.openqa.selenium.JavascriptException: ошибка javascript: не удалось выполнить 'elementsFromPoint' в 'Document': предоставленное двойное значение не является конечным.

Обратите внимание, что это происходит только с удаленным веб-драйвером и не согласовано.

полная информация здесь:

Когда аудиоплеер элемента "item_1" остановлен в "[data-rcfid='checkbox_7']"

org.openqa.selenium.JavascriptException: ошибка javascript: не удалось выполнить 'elementsFromPoint' в 'Document': предоставленное двойное значение не является конечным. (Информация о сеансе: 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', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-71-generic', java.version: '1.8.0_111' Информация о драйвере: org.openqa.selenium.remote.RemoteWebDriver Capabilities {acceptInsecureCerts: true, browserName: chrome, browserVersion: 78.0.3904.70, chrome: {chromedriverVersion: 78.0.3904.70 (edb9c9f3deata0Data0...:\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, таймауты: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: accept, webdriver.remote.sessionid: eb7d4195af3426c181317a16028...} Session ID: eb7d4195af3426c181317a160286b15e0125b619 на sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) в 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(W3CHttpc.javag:18).открытый выполнить (HttpCommandExecutor.java:158) в org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:545) в org.openqa.selenium.remote.RemoteWebDriver.perform(в RemoteWeb.Open или RemoteWeb: 6Driver).selenium.interactions.Actions$BuiltAction.perform(Actions.java:638) в webDriver.Driver.click(Driver.java:147) в pageObjects.ActivityPageObject.clickAudioInlineStopIn(ActivityPageObject.java:205) в stepDefinitionEppedLayOpenActivity.thefinition. Activity.java:61) в ✽. Когда аудиоплеер элемента "item_1" остановлен в "[data-rcfid='checkbox_7']"(/opt/atlassian/bamboo-home/xml-data/build-dir/16744451/RCF1-RMIT-BROW3/rcf-automation-tests/src/test/resources/featureFiles/ взаимодействия / отмеченные взаимодействия /CheckBox.feature:433)

7 ответов

У меня была такая же проблема, и наблюдение было: несколько элементов по одному и тому же 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 дереве .
  • Элемент не загрузился должным образом, когда вы пытались с ним взаимодействовать.
  • Элемент находится внутри /
  • Атрибут стиля элемента содержит 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().

Вы можете найти соответствующее подробное обсуждение в разделе «Можно ли переключиться на элемент во фрейме без использования driver.switchTo(). Frame (« frameName ») в Selenium Webdriver Java?


Рекомендации

Вы можете найти пару соответствующих подробных обсуждений в:

У меня возникла та же проблема, когда я пытался щелкнуть ячейку в сетке AngularJS. Я подтвердил, что мой запрос XPath дал только один результат, а затем исследовал, поможет ли добавление условия ожидания. Как оказалось, добавление здесь Wait позволило продолжить выполнение кода без ошибок.

Приведенный ниже код - это метод, который я использовал для щелчка по ячейке. Я переключился с Click() на действие, поскольку метод 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;
        }
    };
}

Проблема в том, что вы нашли элемент, который не отображается графически в веб-браузере - свойство местоположения имеет значение: X=0 и Y=0; значит, вы, вероятно, обнаружили не тот элемент.

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

Так что я использовал time.sleep(1)

После этого все заработало.

Эта ошибка появилась, когда я обновился до ChromeDriver 88 с версии 70-х годов (71?). Фактически это было вызвано обходным путем из более ранней версии. Это было с помощью раскрывающегося списка angular. Вместо того, чтобы нажимать на элемент, мне пришлось перейти к элементу, а затем щелкнуть по нему отдельными шагами. Когда я удалил 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();

Ошибка ушла и стало чище.

Другие вопросы по тегам