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

public WebDriverHelper(WebDriver webDriver)

Methods

clickRetrying

public void clickRetrying(Supplier<WebElement> clickable)

Added in version 1.2.1.

Кликнуть в dom-элемент, повторяя попытку, пока клик перехватывает посторонний элемент. TODO Есть не решённый вопрос в методе, а как быть, когда перекрытие элемента это не ожидаемая ситуация, и, тем самым, скрываем (перехватываем) не валидное состояние на сервисе. Будет решено в будущих версиях.

Parameters:
  • clickable – поставщик готового к клику dom-элемента

Throws:

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

public String getElementName()

Возвращает имя тага Html-элемента, который будет использоваться в XPath выражении.

Returns:

Имя тага Html-элемента.

getRootWebElement

public Optional<WebElement> getRootWebElement()

Возвращает ссылку на WebElement, который будет являться корнем при поиске элементов методами wait* и find*.

Если значение не указано, поиск будет производиться от корня Html-дерева документа.

Returns:

элемент html-дерева

getWaitTimeout

public Duration getWaitTimeout()

Возвращает таймаут ожидания перехода Html-элемента в ожидаемое состояние.

Значение используется при вызовах методов, имена которых начинаются с wait.

Returns:

Длительность

getWebDriver

public WebDriver getWebDriver()

Возвращает ссылку на используемый WebDriver.

Returns:

Экземпляр WebDriver.

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

public WebElement waitElementBy(By by, Duration duration)

Added in version 1.1.3.

Дождаться появления на dom-модели dom-элемента по By-условию

Parameters:
  • by – By-условие

  • duration – продолжительность ожидания

Returns:

dom-элемент

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

этот-же dom-элемент

waitRemovingElementBy

public void waitRemovingElementBy(By by)

Дождаться пропадания dom-элемента по By-условию

Parameters:
  • by – By-условие

waitRemovingElementWithAttribute

public void waitRemovingElementWithAttribute(String dataAttributeName, String value)

Дождаться пропадания dom-элемента с указанным атрибутом и указанным значением.

Parameters:
  • dataAttributeName – название атрибута

  • value – значение атрибута

waitRemovingElementWithAttributes

public final void waitRemovingElementWithAttributes(XAttribute<java.lang.String, java.lang.String>... attributes)

Дождаться пропадания dom-элемента, содержащего все указанные атрибуты с указанными значениями.

Parameters:
  • attributes – атрибуты со значениями

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 – максимальная продолжительность ожидания