Рассмотрим следующее <select>
с внутренней тестовой страницы Selenium :
<select id="invisi_select" style="opacity:0;">
<option selected value="apples">Apples</option>
<option value="oranges">Oranges</option>
</select>
. Используется для имитации невидимого элемента, как предполагает id
, что делаетсяустановка opacity
в 0.
Хотя элемент не виден, пользователь может фактически взаимодействовать с ним. Если я открою страницу в браузере и нажму на позицию элемента, откроется меню выбора. Я полагаю, что именно поэтому WebElement#isDisplayed()
возвращает true
для этого элемента, что также предлагают эти старые проблемы Selenium:
Для выполнения таких действий, как щелчки, мы недавно переключились на API взаимодействий Java по нескольким причинам, например, на предотвращение ElementClickInterceptedException
с . (Обратите внимание, что речь не идет о рефакторинге набора тестов Selenium, это происходит в контексте универсального исполнителя действий, который работает поверх Selenium API.) Однако, если я сделаю что-то вроде:
WebElement applesOption = /* get apples option */
new Actions(webDriver).moveToElement(applesOption)
.click()
.perform();
При переходе к элементу возникает следующее исключение:
org.openqa.selenium.JavascriptException: javascript error: Failed to execute 'elementsFromPoint' on 'Document': The provided double value is non-finite.
Я полагаю, это потому, что elementsFromPoint()
через API действий WebDriver , похоже, возвращает "неконечный «двойной» для таких прозрачных элементов?
Есть ли способ предотвратить это при использовании Actions
? Может быть, в дополнение к проверке, является ли элемент кликабельным (ExpectedConditions#elementToBeClickable(...)
), я должен был бы проанализировать - что звучит ужасно - такие атрибуты, как opacity
?