我找不到答案,我想了解我们为什么这样做,那么:为什么在创建自定义ExpectedConditions时,我们必须重写apply方法?这很可能是一些简单和基本的东西,但我就是搞不懂
这是我在网上找到的一个例子:
public boolean customExpectedConditions() {
WebDriverWait wait = new WebDriverWait(driver, 60);
ExpectedCondition<Boolean> jqLoaded = new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) { // why this part?
try {
return ((Long)((JavascriptExecutor)getDriver()).executeScript("return jQuery.active") == 0);
}
catch (Exception e) {
// no jQuery present
return true;
}
}
};
return wait.until(jqLoaded);
}
您需要重写它,因为Selenium中的Wait
实现(如FluentWait
(期望Function
接口的实现来测试条件。
CCD_ 4只是扩展了该接口以限制进入您的";函数";作为参数。它将其限制为WebDriver
对象。
因此,当您准备自己的条件时,您需要实现逻辑,告诉Selenium条件是否满足。您可以通过重写apply
方法来实现这一点。
在FluentWait
的情况下,您可以找到Selenium中的服务员如何在条件下工作的更多细节(其他服务员的工作方式完全相同(。
您还可以检查它,以在Selenium中找到更多自定义条件的示例,并查看它们是否足够灵活,可以用于您可以用Java检测到的任何类型的事件。