正如Selenium文档所述,我们永远不应该混淆显式和隐式等待时间:
警告:不要混合隐式和显式等待。这样做可能会导致不可预测的等待时间。例如,将隐式等待设置为 10 秒,显式等待设置为 15 秒,可能会导致 20 秒后发生超时。
我设置了 5000 毫秒的隐式等待时间。在某些浏览器交互结束时,我只想验证所需的链接是否可单击。
我知道这可以通过使用 ExpectedConditions
来完成,但这意味着明确的等待时间,如下例所示。
protected PageNewDocument isElementClickable(WebElement element)
{
(new WebDriverWait(driver, 1)).until(ExpectedConditions.elementToBeClickable(element));
return this;
}
如何在没有明确等待时间定义的情况下检查元素是否可点击?
前几天在这里回答了一个类似的问题。此方法在返回 true 之前等待页面加载。所以你的元素应该是可点击的。
private static WebDriverWait wait = new WebDriverWait(driver, 60);
private static JavascriptExecutor js = (JavascriptExecutor) driver;
public static void waitForPageLoaded() {
wait.until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
Boolean res = (js.executeScript("return document.readyState").equals("complete"));
System.out.println("[DEBUG] waitForPageLoaded: " + res);
return res;
}
});
}