Selenium - 为什么在自定义预期条件中覆盖 'apply'?
Selenium - why override 'apply' in custom Expected Conditions?
我找不到答案,我想了解为什么我们这样做,所以:为什么在创建自定义 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
接口来测试条件。
ExpectedCondition<Boolean>
只是扩展了该接口以限制作为参数进入您的“函数”的内容。它将它限制为 WebDriver
个对象。
因此,当您准备自己的条件时,您需要实现告诉 Selenium 条件是否满足的逻辑。您可以通过覆盖 apply
方法来做到这一点。
您可以在 case of FluentWait
中找到有关 Selenium 中的服务员如何处理条件的更多详细信息(其他服务员的工作方式完全相同)。
您还可以检查它以在 Selenium 中找到一些 more examples of custom conditions 并查看它们是否足够灵活以处理您可以使用 Java.
检测到的任何类型的事件
我找不到答案,我想了解为什么我们这样做,所以:为什么在创建自定义 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
接口来测试条件。
ExpectedCondition<Boolean>
只是扩展了该接口以限制作为参数进入您的“函数”的内容。它将它限制为 WebDriver
个对象。
因此,当您准备自己的条件时,您需要实现告诉 Selenium 条件是否满足的逻辑。您可以通过覆盖 apply
方法来做到这一点。
您可以在 case of FluentWait
中找到有关 Selenium 中的服务员如何处理条件的更多详细信息(其他服务员的工作方式完全相同)。
您还可以检查它以在 Selenium 中找到一些 more examples of custom conditions 并查看它们是否足够灵活以处理您可以使用 Java.
检测到的任何类型的事件