2011-12-31 62 views
2

我是新來的自動化Web測試,我目前正從舊的Selenium RC實現遷移到Ruby中的Selenium 2。有沒有辦法停止命令的執行直到頁面被加載,類似於Selenium RC中的「wait_for_page_to_load」?如何在Selenium 2中實現wait_for_page_to_load?

+0

不完整的答案,但請參閱http://code.google.com/p/selenium/wiki/FrequentlyAskedQuestions#Q:_WebDriver_fails_to_find_elements_/_Does_not_block_on_page_loa進行一些討論。 – 2011-12-31 13:59:39

+0

我已經嘗試過「等待」,但這不工作我似乎只是在Windows機器上的問題,測試用例在Linux上正常工作 – deep 2012-01-07 18:32:18

回答

2

嘗試使用Javascript通知您!

我創建了幾個方法,通過我們的JavaScript庫進行檢查,並等待查看頁面是否完成加載DOM,並且所有ajax請求都完成。這是一個示例代碼片段。您將需要使用的JavaScript將取決於您的庫。

Selenium::WebDriver::Wait.new(:timeout => 30).until { @driver.execute_script("[use javascript to return true once loaded, false if not]"} 

我然後包裹在一個clickAndWait方法點擊元件並調用waitForDomLoad和waitForAjaxComplete這些方法。只是爲了好的措施,clickAndWait之後的下一個命令通常是一個waitForVisble元素命令,以確保我們位於正確的頁面上。

# Click element and wait for page elements, ajax to complete, and then run whatever else 
def clickElementAndWait(type, selector) 
    @url = @driver.current_url 
    clickElement(type, selector) 
    # If the page changed to a different URL, wait for DOM to complete loading 
    if @driver.current_url != @url 
     waitForDomLoad 
    end 
    waitForAjaxComplete 
    if block_given? 
     yield 
    end 
end 
1

如果使用capybara,每當你爲page.should have_content("foo")測試,水豚不會立即如果頁面沒有內容(還)失敗,但會等待一段時間,看看Ajax調用會改變這種狀況。

所以基本上:在你之後click,你想立刻檢查have_content("some content that is a consequence of that click")

+0

我沒有使用水豚。我只使用webdriver。 – deep 2012-01-07 18:33:16

4

我固定了很多,我在該部門加入這一行有問題開始我的司機

driver.manage.timeouts.implicit_wait = 20 

這基本上使每一個失敗的司機叫你做重試最大20秒拋出之前之後例外,這通常足以讓AJAX完成。

+0

拯救了另一個生命 – nurettin 2013-05-13 12:13:50