你也可以试试这个代码,等待浏览器提供页面是否加载。
objExecutor = (JavascriptExecutor) objDriver;
if (!objExecutor.executeScript("return document.readyState").toString()
.equalsIgnoreCase("complete")){
Thread.sleep(100);
}
你可以简单地把它放在你的基本页面,所以你不需要把它写在每个pageobjects中。我从未尝试过任何支持AJAX的网站,但这可能会帮助您和您的场景依赖关系也会消失。
我更喜欢使用Selenium的FluentWait API。通过使用它,您可以另外设置最大等待时间(.withTimeout),也可以忽略某些异常。
public void waitUntilDocumentIsReady() {
Wait<WebDriver> wait = new FluentWait<>(this.webDriver())
.withTimeout(25, TimeUnit.SECONDS)
.pollingEvery(1, TimeUnit.SECONDS)
.ignoring(UnhandledAlertException.class);
wait.until(new Function<WebDriver, Boolean>() {
@Override
public Boolean apply(WebDriver f) {
return ((JavascriptExecutor) f).executeScript("return document.readyState").equals("complete");
}
});
Mohit,您可以在WebDriver中找到地狱的同步数量。你可以用implicitWait和WebDriverWait来谷歌它。这两个比Thread.Sleep更好。 – Uday 2014-11-24 13:12:22
您好Uday,实际上我不想让脚本执行预定义的时间量。相反,我正在研究一个解决方案,它将为我提供如下功能: - 自动化脚本应该暂停,直到整个页面和所有事件在该页面被加载。如果可能,请提供解决此问题的方法。 – 2014-11-26 04:33:55