2013-10-23 74 views
3

有沒有辦法,如何在頁面重新加載?例如,當我在頁面localhost:9000/web上時,我再次指示webdriver導航到localhost:9000/web。我不想或不能通過等待某些元素來指示重新加載。Selenium驅動 - 等待頁面刷新

回答

0

如果您使用的是Selenium RC,那麼它就是waitForPageToLoad()方法。

selenium.waitForPagetoLoad() // it might be waitForLoad() - can't remember. 

如果使用硒webdriver的,那麼所有的導航通過API來處理,它會暗中等待,直到瀏覽器完成導航。

driver.navigate().to().url("http://localhost:9000/web"); 

此外,請確保您在開始處放置「http://」。 Selenium可能無法解析「localhost:9000」

0

像get(),navigate.to(),navigate.refresh(),navigate.forward(),navigate.backward()等Webdriver方法會自動等待下一頁完全加載。

硒RC,我們可以acheive,使用

new Selenium().waitForPagetoLoad() 
5

在硒的webdriver,我們可以使用下面的代碼片段實現waitForPageToLoad:

public void waitForPageToLoad(WebDriver driver) { 
    ExpectedCondition <Boolean> pageLoad = new 
    ExpectedCondition <Boolean>() { 
     public Boolean apply(WebDriver driver) { 
      return ((JavascriptExecutor) driver).executeScript("return document.readyState").equals("complete"); 
     } 
    }; 

    Wait <WebDriver> wait = new WebDriverWait(driver, 60); 
    try { 
     wait.until(pageLoad); 
    } catch (Throwable pageLoadWaitError) { 
     assertFalse("Timeout during page load", true); 
    } 
} 
2

這是舊的,但我也想一個解決方案這個,並偶然發現了這個問題。

感謝所發佈的答案,我通過將@mfsi_sitamj文章的html和陳舊性的預期條件相結合,創建了我自己的解決方案。

事情是這樣的:

@CacheLookup 
@FindBy(tagName = "html") 
private WebElement __document; 

public void waitForReload() { 
    Wait<WebDriver> wait = new WebDriverWait(driver, 10); 
    wait.until(ExpectedConditions.stalenessOf(this.__document)); 
    wait.until((ExpectedCondition<Boolean>) wd -> 
     ((JavascriptExecutor) wd).executeScript("return document.readyState").equals("complete")); 
} 
+1

這種方法對我來說是最好的。另請參見http://stackoverflow.com/a/32278904/349169 – Chris

+0

我還創建了一個函數,它將在頁面加載後插入一個隨機唯一的javascript變量'ex:selenium_97651623763774623'到一個頁面中,並檢查該變量的函數if它不再存在,頁面已被卸載。 – rrw

0

我們可以設置pageLoadTimeout,一旦設置時便會有throught的webdriver的會話,如果該異常,因爲超時的拋出,則不能恢復同一個會話所以需要創建新的實例。

 WebDriver driver = new FirefoxDriver(); 

     //waits 10 seconds for page to load 
     driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS); 
     try { 
      driver.get("https://yourdomain.com"); 
     } catch (TimeoutException e) { 
      driver.close(); 
      driver.quit(); 

      //create new instance of webdriver 
      driver = new FirefoxDriver(); 

      //waits 5 minutes for page to load 
      driver.manage().timeouts().pageLoadTimeout(300, TimeUnit.SECONDS); 
      driver.get("https://yourdomain.com"); 
     }