2016-05-24 51 views
0

頁面上的等待元素存在問題。如何等待整個頁面加載完成?

頁面包含的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

這允許執行裏面有什麼,只有當頁面加載:

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()內。 ..

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);無論你需要等待頁面加載調用它。

+0

謝謝,我會試試看。 現在我已經抓住了ajax指標,並等待直到它變得不可見。 它有很大的幫助 –

+0

我很高興。如果有幫助,請接受我的回答。 – Prateek