Ожидаемые условия 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
,
Исходный код не слишком сложен - вы можете взглянуть на него для более мелких деталей:)