java - Selenium 预期条件,Webdriver 的实例从何而来?
问题描述
我正在努力弄清楚 WebDriver 实例是如何传递给 Selenium 的预期条件的。
所以我有一个简单的 WebDriverWait 用于 web 元素的可见性:
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 实例。相同的实例将通过方法传递给apply
功能接口ExpectedCondition
的until
方法。
WebDriverWait
extendsFluentWait<WebDriver>
它实际上实现了该until
方法。当您构造WebDriverWait
驱动程序时,驱动程序将作为参数传递给该参数,FluentWait
并将其保存在属性中。
现在,当您调用该方法时,调用该until
方法将您实际传递给构造函数。您正在构建的对象有效地接收两个输入。你传递给它以及你传递给它。WebDriverWait
until
apply
driver
ExpectedCondition
WebElement
driver
WebDriverWait
源代码并不太复杂-您可以查看它以获取更多详细信息:)
推荐阅读
- c++ - 使用 CUDA 图进行 PeerToPeer 数据传输
- android - 填充剪辑在顶部缩放元素,但不是(真的)在侧面
- python - 无法在 Heroku 上启动 Selenium Chrome
- tensorflow - 用于人类活动识别的光流图像的预训练模型
- arduino - Wemos D1 Arduino - ESP32/8266 Cryptocurrency Ticker、WiFiManager 和 SSD1306 OLED 屏幕
- java - 谁能告诉我需要在此代码中进行哪些更改才能以表格格式显示日历?
- c++ - 使用预测时未处理的异常(FaceRecognizer)
- python - Python flask - 使用不同的日志错误级别记录到 2 个不同的目的地
- c++ - 如何多线程按下按钮?
- r - 如何确定R中图形的两个不同变量的线型和颜色?