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
源代码并不太复杂 - 您可以查看它以获得更详细的信息:)
我正在努力弄清楚 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
源代码并不太复杂 - 您可以查看它以获得更详细的信息:)