【发布时间】:2015-10-01 14:51:16
【问题描述】:
在切换到 Java 8 之后,许多 webdriver 断言在它试图在元素呈现之前断言某些东西时失败。看起来渲染速度和 Java 测试不同步。项目中使用的 Webdriver 是 Selenium-chrome-driver-2.43.1。我还没有为其他浏览器尝试过这个。无论如何我可以在不放置太多“等待元素”的情况下完成这项工作吗?
【问题讨论】:
在切换到 Java 8 之后,许多 webdriver 断言在它试图在元素呈现之前断言某些东西时失败。看起来渲染速度和 Java 测试不同步。项目中使用的 Webdriver 是 Selenium-chrome-driver-2.43.1。我还没有为其他浏览器尝试过这个。无论如何我可以在不放置太多“等待元素”的情况下完成这项工作吗?
【问题讨论】:
您可以使用隐式或显式等待。
隐式影响所有请求,如果应用程序通常很慢,则更容易,因此您希望增加对所有请求的等待。但是设置太高可能会导致测试在您不想等待的情况下等待很长时间:
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
显式等待为您提供更大的灵活性,但需要更多的工作。例如,假设您希望大部分操作在 10 秒内完成,因此您将上面的隐式等待设置为 10 秒。但是假设您知道以下操作可能会因隐式等待而失败,因为此特定元素平均需要 15 秒才能显示出来:
WebElement element = driver.findElement(By.name("q"));
所以你可以把它改成:
WebElement element = (new WebDriverWait(driver, 20))
.until(newExpectedCondition<Boolean>() {
public Boolean apply(WebDriver d) {
return driver.findElement(By.name("q"));
}
});
【讨论】: