Ожидаемые условия Selenium, откуда берется экземпляр Webdriver?

Я изо всех сил пытаюсь выяснить, как экземпляр WebDriver передается в ожидаемые условия Selenium.

Итак, у меня есть простой WebDriverWait для видимости веб-элемента:

new WebDriverWait(webDriver, Configuration.WEB_DRIVER_WAIT_TIMEOUT)
                .until(ExpectedConditions.visibilityOf(element));

Экземпляр webDriver здесь - это хромированный драйвер, который был создан выше.

Мой вопрос: в методе visibilityOf():

public static ExpectedCondition<WebElement> visibilityOf(final WebElement element) {
    return new ExpectedCondition<WebElement>() {
      @Override
      public WebElement apply(WebDriver driver) {
        return elementIfVisible(element);
      }

      @Override
      public String toString() {
        return "visibility of " + element;
      }
    };
  }

Чуть выше, как и какой экземпляр WebDriver передается в apply ()? Я понимаю, что ExpectedCondition реализует интерфейс функций

public interface ExpectedCondition<T> extends Function<WebDriver, T> {}

который принимает в качестве первого аргумента WebDriver.

Как экземпляр WebDriver передается в ExpectedCondition функции visibilytOf()?

Спасибо

1 ответ

Решение

Когда вы создаете WebDriverWait Вы передаете экземпляр webdriver. Тот же экземпляр будет передан apply метод функционального интерфейса ExpectedCondition посредством until метод.

WebDriverWait продолжается FluentWait<WebDriver> который на самом деле реализует until метод. Когда вы строите WebDriverWait драйвер передается в качестве параметра FluentWait который держит его в атрибуте.

Теперь, когда вы звоните until на WebDriverWait until метод вызывает apply метод передачи driver вы на самом деле перешли к конструктору. ExpectedCondition объект, который вы создаете, получает два входа. WebElement вы переходите к нему, а также driver что вы передаете WebDriverWait,

Исходный код не слишком сложен - вы можете взглянуть на него для более мелких деталей:)

Другие вопросы по тегам