Ожидаемые условия Selenium, откуда берется экземпляр Webdriver? - PullRequest
0 голосов
/ 21 января 2019

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

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

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

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

Мой вопрос: в методе 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 Ответ

0 голосов
/ 21 января 2019

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

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

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

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

...