页面上等待元素时出现问题。
页面包含20个项目的列表 我可以设置100代替20并使用JS重新加载页面(子框架正在重新加载)
然后我收到一个错误: 元素不再有效
moveTNVPage.switchToThisPage();
moveTNVPage.selectQuantity();
waitForPageLoad();
moveTNVPage.selectEnabledCheckBox(wait);
waitForPageLoad():
public void waitForPageLoad() {
Wait<WebDriver> wait = new WebDriverWait(driver, 30);
wait.until(new Function<WebDriver, Boolean>() {
public Boolean apply(WebDriver driver) {
System.out.println("Current Window State : " + String.valueOf(((JavascriptExecutor) driver).executeScript("return document.readyState")));
return String.valueOf(((JavascriptExecutor) driver).executeScript("return document.readyState")).equals("complete");
}
});
}
@BeforeTest中的我已经设定:
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.manage().timeouts().setScriptTimeout(5, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);
只有很长时间的thread.sleep()可以帮助解决这个问题 但是在不同的测试环境中我需要不同的thread.sleep!
我怎么能避免thread.sleep ???? 我试过用
wait.until(ExpectedConditions ... ...)
这也没有帮助。
B.R。 安东
答案 0 :(得分:1)
这就是我使用的:
public void waitForLoad(WebDriver driver) {
ExpectedCondition<Boolean> pageLoadCondition = new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
return ((JavascriptExecutor) driver).executeScript("return document.readyState").equals("complete");
}
};
WebDriverWait wait = new WebDriverWait(driver, 60);
wait.until(pageLoadCondition);
}
从语句中可以清楚地看出,这等待文档状态完成。 目前超时设置为60秒,可以更改。
您只需要在需要等待页面加载的地方使用waitForLoad(driver);
来调用它。
答案 1 :(得分:0)
这允许仅在页面加载时执行内部操作:
document.ready(function(){
// Your code
});
这是一种设置延迟的方法:
delay = 500; // <-- This is in milliseconds
setTimeout(function(){
// Your code to be executed after the delay
},delay);
您可以在setTimeout()
...
document.ready()