WebDriverHelper¶
- public class WebDriverHelper¶
Added in version 1.1.0: добавлены методы для взаимодействия с динамически меняющейся dom-моделью.
Added in version 1.2.1: Добавлены динамические ожидания
retryingUntil(Duration, Supplier),waitActionable(WebElement, Actionability.Checks),clickRetrying(Supplier). МетодыwaitForDomStability(Duration)иwaitUntilMaskDisappears(Duration)объявлены устаревшими: ожидание стабилизации dom-модели заменено динамическими ожиданиями, сами методы сохранены для совместимости с существующими потребителями.Набор вспомогательных средств для взаимодействия с
WebDriver.
Constructors¶
WebDriverHelper¶
Methods¶
clickRetrying¶
- public void clickRetrying(Supplier<WebElement> clickable)¶
Added in version 1.2.1.
Кликнуть в dom-элемент, повторяя попытку, пока клик перехватывает посторонний элемент. TODO Есть не решённый вопрос в методе, а как быть, когда перекрытие элемента это не ожидаемая ситуация, и, тем самым, скрываем (перехватываем) не валидное состояние на сервисе. Будет решено в будущих версиях.
- Parameters:
clickable – поставщик готового к клику dom-элемента
- Throws:
AutomationException– если клик не удалось выполнить заgetWaitTimeout()
countElementsBy¶
- public int countElementsBy(Supplier<WebElement> rootWebElement, By by)¶
Added in version 1.2.1.
Посчитать dom-элементы по
By-селектору внутри указанного корня, не дожидаясь их появления.Метод предназначен для диагностических сообщений, поэтому не выбрасывает исключение, а возвращает -1: сосчитать не удалось. Корень разыскивается здесь же, потому что к моменту подсчёта разметка может быть уже перерисована, и его поиск точно так же может не удаться.
- Parameters:
rootWebElement – способ получить корневой dom-элемент
by – механизм поиска
- Returns:
количество найденных элементов либо -1, если сосчитать не удалось
findElementBy¶
- public WebElement findElementBy(By by)¶
Найти
WebElementпоBy-селектору.- Parameters:
by – механизм поиска
- Returns:
html-элемент
findElementWithAttribute¶
- public WebElement findElementWithAttribute(String dataAttributeName, String value)¶
Найти на dom-модели dom-элемент с указанным атрибутом и его значением.
- Parameters:
dataAttributeName – Название атрибута
value – значение атрибута
- Returns:
dom-элемент
findElementWithAttributes¶
- public final WebElement findElementWithAttributes(XAttribute<java.lang.String, java.lang.String>... attributes)¶
Найти на dom-модели dom-элемент со всеми указанными значениями указанных атрибутов.
- Parameters:
attributes – атрибуты со значениями
- Returns:
dom-элемент
findElementsBy¶
- public List<WebElement> findElementsBy(By by)¶
Найти список
WebElement-ов поBy-селектору.- Parameters:
by – механизм поиска
- Returns:
список html-элементов
findElementsWithAttribute¶
- public List<WebElement> findElementsWithAttribute(String dataAttributeName, String value)¶
Найти на dom-модели все dom-элементы с указанным атрибутом и указанным значением.
- Parameters:
dataAttributeName – название атрибута
value – значение атрибута
- Returns:
список dom-элементов
findElementsWithAttributes¶
- public final List<WebElement> findElementsWithAttributes(XAttribute<java.lang.String, java.lang.String>... attributes)¶
Найти на dom-модели все dom-элементы, содержащие указанные атрибуты с указанными значениями.
- Parameters:
attributes – атрибуты со значениями
- Returns:
список dom-элементов
findFirstElementBy¶
- public Optional<WebElement> findFirstElementBy(By by)¶
Added in version 1.2.1.
Найти первый
WebElementпоBy-селектору, не дожидаясь его появления.- Parameters:
by – механизм поиска
- Returns:
опциональный html-элемент
getElementName¶
getRootWebElement¶
- public Optional<WebElement> getRootWebElement()¶
Возвращает ссылку на
WebElement, который будет являться корнем при поиске элементов методами wait* и find*.Если значение не указано, поиск будет производиться от корня Html-дерева документа.
- Returns:
элемент html-дерева
getWaitTimeout¶
getWebDriver¶
isVisibleInViewport¶
- public boolean isVisibleInViewport(WebElement element)¶
Added in version 1.1.0.
Проверить, отображается ли dom-элемент внутри окна браузера. По факту, выполняется проверка, что углы dom-элемента находятся внутри окна.
- Parameters:
element – dom-элемент
- Returns:
true если отображается
of¶
- public static WebDriverHelper of(WebDriver webDriver)¶
presenceOfNestedElementsToBeMoreThan¶
- public static ExpectedCondition<List<WebElement>> presenceOfNestedElementsToBeMoreThan(WebElement rootWebElement, By locator, Integer number)¶
Added in version 1.1.0.
Ожидание количества элементов по условию в родительском элементе не менее заданного количества.
- Parameters:
rootWebElement – родительский элемент
locator – условие поиска элементов
number – заданное количество
- Returns:
Boolean true когда размер списка найденных элементов равен или более заданному количеству
readRetrying¶
- public <T> T readRetrying(Supplier<T> read)¶
Added in version 1.2.1.
Прочитать значение из dom-модели, повторяя попытку при перерисовке разметки.
Разметка может быть отрисована заново прямо во время чтения. Тогда ссылка, валидная в его начале, становится невалидной к моменту обращения к вложенным элементам. Поэтому чтение повторяется целиком, а элемент разыскивает себя заново сам.
- Parameters:
read – способ прочитать значение
<T> – тип значения
- Throws:
org.openqa.selenium.TimeoutException– если заgetWaitTimeout()значение не прочитано
- Returns:
прочитанное значение
retryingUntil¶
- public <T> T retryingUntil(Duration timeout, Supplier<Optional<T>> attempt)¶
Added in version 1.2.1.
Повторять попытку до получения результата либо до истечения таймаута.
БАЗОВЫЙ примитив ожидания библиотеки. Попытка поиска элемента выполняется целиком (поиск элемента, проверка, действие), и повторяется, пока не вернёт результат. Пустой
Optionalозначает “результата ещё нет, надо повторить”. Исключения невалидной ссылки на dom-элемент и отсутствия элемента считаются нормальным промежуточным состоянием и не прерывают повторение.Таймаут расходуется только при неуспехе. Как только попытка вернула результат, ожидание завершается. Фиксированных пауз метод не содержит, попытки повторяются с интервалом
Defaults.getDurationPollInterval().- Parameters:
timeout – предельная продолжительность повторения
attempt – попытка получить результат
<T> – тип результата.
Booleanнельзя использовать, потому что false неотличим от отсутствия результата
- Throws:
org.openqa.selenium.TimeoutException– если за отведённое время результат не получен
- Returns:
результат попытки
scrollIntoView¶
- public void scrollIntoView(WebElement element)¶
Added in version 1.1.0.
Подскроллить страницу так, чтоб элемент оказался внутри окна, а не за границей.
- Parameters:
element – dom-элемент
setElementName¶
- public WebDriverHelper setElementName(String elementName)¶
Устанавливает значение свойства
getElementName().- Parameters:
elementName – Новое имя.
- Returns:
Текущий экземпляр
WebDriverHelper.
setRootWebElement¶
- public WebDriverHelper setRootWebElement(WebElement rootWebElement)¶
Устанавливает значение свойства
getRootWebElement().- Parameters:
rootWebElement – новое значение
- Returns:
Текущий экземпляр
WebDriverHelper.
setWaitTimeout¶
- public WebDriverHelper setWaitTimeout(Duration duration)¶
Устанавливает значение свойства
getWaitTimeout().- Parameters:
duration – Длительность
- Returns:
Текущий экземпляр
WebDriverHelper.
waitActionable¶
- public WebElement waitActionable(WebElement element, Actionability.Checks checks)¶
Added in version 1.2.1.
Дождаться готовности dom-элемента к взаимодействию.
- Parameters:
element – dom-элемент
checks – требуемые признаки готовности
- Throws:
AutomationException– если элемент не стал готов заgetWaitTimeout()
- Returns:
этот же dom-элемент
waitActionable¶
- public WebElement waitActionable(WebElement element, Duration timeout, Actionability.Checks checks)¶
Added in version 1.2.1.
Дождаться готовности dom-элемента к взаимодействию.
Проверка выполняется в браузере одним скриптом и повторяется до тех пор, пока все требуемые признаки не станут истинными. Метод завершается сразу по готовности.
- Parameters:
element – dom-элемент
timeout – предельная продолжительность ожидания
checks –
требуемые признаки готовности
Узел, выкинутый из документа, готов не станет никогда: фронтенд перерисовал разметку, и ждать на нём бесполезно. Поэтому ожидание прерывается сразу, а вызывающему сообщается о невалидной ссылке исключением
StaleElementReferenceException, по которому он разыскивает элемент заново (так поступаетclickRetrying(java.util.function.Supplier)).
- Throws:
AutomationException– если элемент не стал готов за отведённое времяStaleElementReferenceException– если узел выкинут из документа
- Returns:
этот же dom-элемент
waitCondition¶
- public void waitCondition(BooleanSupplier condition, String timeoutMessage)¶
Added in version 1.2.1.
Дождаться выполнения условия. Условие проверяется повторно до
getWaitTimeout().- Parameters:
condition – проверяемое условие
timeoutMessage – сообщение об ошибке, если условие не выполнилось за отведённое время
- Throws:
AutomationException– если условие не выполнилось за отведённое время
waitElementBy¶
- public WebElement waitElementBy(By by)¶
Дождаться появления на dom-модели dom-элемента по
By-условию- Parameters:
by –
By-условие
- Returns:
dom-элемент
waitElementBy¶
waitElementWithAttribute¶
- public WebElement waitElementWithAttribute(String dataAttributeName, String value)¶
Дождаться появления dom-элемента с указанным значением указанного атрибута.
- Parameters:
dataAttributeName – название атрибута
value – значение атрибута
- Returns:
dom-элемент
waitElementWithAttributes¶
- public final WebElement waitElementWithAttributes(XAttribute<java.lang.String, java.lang.String>... attributes)¶
Дождаться появления dom-элемента, содержащего все указанные атрибуты с указанными значениями.
- Parameters:
attributes – атрибуты со значениями
- Returns:
dom-элемент
waitForDomStability¶
- public void waitForDomStability(Duration timeout)¶
Added in version 1.1.0.
Deprecated since version ожидание: стабилизации dom-модели заменено динамическими ожиданиями конкретных признаков готовности элемента (
waitActionable(WebElement, Actionability.Checks),retryingUntil(Duration, Supplier)). Метод сохранён для совместимости с существующими потребителямиПодождать прекращения изменений dom-модели. Прекращением считается отсутствие изменений в течении указанного интервала времени.
Перед ожиданием прекращения делается попытка подождать окончания отображения о продолжительной операции
waitUntilMaskDisappears(Duration)с максимальной продолжительность такого ожидания timeout + 1 секунда.- Parameters:
timeout – интервал времени
- Throws:
AutomationException– если произошла ошибка при выполнении скрипта ожидания стабилизации DOM
waitForInteraction¶
- public WebElement waitForInteraction(WebElement element)¶
Added in version 1.1.0.
Дождаться того, что
WebElementполучит статус interactable (по факту, будет видимым).- Parameters:
element – dom-элемент
- Throws:
org.openqa.selenium.TimeoutException– если элемент не стал interactable
- Returns:
этот-же dom-элемент
waitRemovingElementBy¶
waitRemovingElementWithAttribute¶
waitRemovingElementWithAttributes¶
waitUntilMaskDisappears¶
- public void waitUntilMaskDisappears(Duration limit)¶
Added in version 1.1.0.
Added in version 1.1.3: Изменен алгоритм детектирования для случаев открытых модальных/lookup-форм
Deprecated since version вместе: с
waitForDomStability(Duration): ожидание стабилизации dom-модели заменено динамическими ожиданиями конкретных признаков готовности элемента (waitActionable(WebElement, Actionability.Checks)). Метод сохранён для совместимости с существующими потребителямиПодождать окончания отображения сообщения о продолжительной операции.
Если в момент вызова открыт блокирующий UI-элемент (диалог или модальная/lookup-форма), ожидание ограничивается масками внутри этого элемента. Маски на родительских элементах (например, на RootPanel) игнорируются, так как они ожидаемо присутствуют, пока блокирующий элемент не будет закрыт.
Приоритет определения блокирующего элемента: диалог выше модальной формы, так как диалог всегда является самым верхним интерактивным слоем.
- Parameters:
limit – максимальная продолжительность ожидания