Как FluentWait в Selenium реализует метод till ()

Синтаксис until() метод в селен документы, как показано ниже:

public <V> V until(java.util.function.Function<? super T,V> isTrue)

Использование того же самого походит на:

WebDriver wait = new WebDriver(driver, 20);
WebElement loginButton = wait.until(ExpectedConditions.elementToBeClickable(By.id("lgn-btn")));

Я не мог относиться к синтаксису и использованию until() метод. Я хочу знать, как реализован синтаксис.

Да, я знаю об Generics, который мы используем, чтобы узнать об ошибках во время компиляции, чтобы мы могли избежать ClassCastException во время выполнения. Также я знаю о функциональном интерфейсе, который мы используем для достижения параметризации поведения.

То, что я не получил, это эквивалентность между java.util.function.Function<? super T,V> isTrue) и ExpectedConditions.elementToBeClickable(By.id("id)),

Что означает выражение java.util.function.Function<? super T,V> isTrueимею в виду?

1 ответ

Решение

В вашем вопросе упоминаются четыре разные темы, и вы можете найти подробности ниже:

java.util.function

Пакет java.util.function включает в себя функциональные интерфейсы, которые предоставляют целевые типы для лямбда-выражений и ссылок на методы.

Вот несколько примеров:

  • BiConsumer<T,U>: Представляет операцию, которая принимает два входных аргумента и не возвращает результата.
  • BiFunction<T,U,R>: Представляет функцию, которая принимает два аргумента и выдает результат.
  • BinaryOperator<T>: Представляет операцию над двумя операндами одного и того же типа, производя результат того же типа, что и операнды.
  • BiPredicate<T,U> Представляет предикат (булевозначная функция) двух аргументов.
  • Consumer<T>: Представляет операцию, которая принимает один входной аргумент и не возвращает результата.
  • Function<T,R>: Представляет функцию, которая принимает один аргумент и выдает результат.

Класс FluentWait

public class FluentWait<T> класс расширяется java.lang.Object и реализует Wait<T> что подразумевает, что это реализация интерфейса ожидания, который может иметь время ожидания и интервал опроса, настроенные на лету. Каждый экземпляр FluentWait определяет максимальное время ожидания условия, а также частоту проверки условия. Кроме того, пользователь может настроить время ожидания для игнорирования определенных типов исключений во время ожидания, таких как NoSuchElementExceptions, при поиске элемента на странице.

Один из модификаторов:

Modifier and Type       Method and Description
-----------------       ----------------------
<V> V                   until(java.util.function.Function<? super T,V> isTrue)

Specified by:
    until in interface Wait<T>
Type Parameters:
    V - The function's expected return type.
Parameters:
    isTrue - the parameter to pass to the ExpectedCondition
Returns:
    The function's return value if the function returned something different from null or false before the timeout expired.
Throws:
    TimeoutException - If the timeout expires.

Эта реализация неоднократно применяет входное значение этого экземпляра к данной функции, пока не произойдет одно из следующего:

  • Функция не возвращает ни ноль, ни ложь
  • Функция выдает безымянное исключение
  • Тайм-аут истекает
  • Текущий поток прерывается

Ожидаемый интерфейс

public interface ExpectedCondition<T> интерфейс расширяется com.google.common.base.Function<WebDriver,T> которая моделирует условие, которое, как ожидается, оценивает что-то, что не является ни нулевым, ни ложным. Примеры могут включать определение, загружена ли веб-страница или видимость элемента.

Обратите внимание, что ожидается, что ExpectedConditions идемпотентны. Они будут вызваны в цикле WebDriverWait и любое изменение состояния тестируемого приложения может иметь неожиданные побочные эффекты.


Класс ExpectedConditions

Класс ExpectedConditions - это стандартные ExpectedCondition, которые обычно используются в тестах веб-драйверов.

Несколько примеров использования:

  • elementToBeClickable():

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("element_css")));
    
  • visibilityOfElementLocated():

    new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("element_css")));
    
  • frameToBeAvailableAndSwitchToIt():

    new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("element_css")));
    
  • visibilityOfAllElementsLocatedBy():

    new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("element_css")));
    
  • attributeContains():

    new WebDriverWait(driver, 20).until(ExpectedConditions.attributeContains(driver.findElement(my_element), "src", "https"));
    
Другие вопросы по тегам