Selenium 预期条件,Webdriver 的实例来自哪里?

Selenium Expected Conditions, where does the instance of Webdriver come from?

我正在努力弄清楚 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 的实例传递给 visibilytOf() 的 ExpectedCondition?

谢谢

当您创建 WebDriverWait 时,您将传递 webdriver 实例。 until 方法ExpectedCondition 的函数接口的apply 方法将传递相同的实例。

WebDriverWait extends FluentWait<WebDriver> 实际上实现了 until 方法。当您构造 WebDriverWait 时,驱动程序作为参数传递给 FluentWait,后者将其保存在属性中。

现在,当您在 WebDriverWait 上调用 until 时,until 方法会调用 apply 方法,将您实际传递给构造函数的 driver 传递给它。您正在构造的 ExpectedCondition 对象实际上接收两个输入。您传递给它的 WebElement 以及传递给 WebDriverWait.

driver

源代码并不太复杂 - 您可以查看它以获得更详细的信息:)