切换到Java 8后,许多webdriver断言在尝试在呈现元素之前断言某些内容时失败。看起来渲染的速度和Java测试并不是同步的。项目中使用的Webdriver是Selenium-chrome-driver-2.43.1。我没有尝试过其他浏览器。无论如何我可以在没有太多“等待元素”的情况下完成这项工作吗?
答案 0 :(得分: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"));
}
});