你也可以試試這個代碼,等待瀏覽器提供頁面是否加載。
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