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();
Ошибка ушла и стало чище.