2011-11-02 119 views
5

我想測試從選擇標籤中選擇一個選項(這些選項從遠程數據庫服務器中取出)。在與網站的正常交互過程中,下拉菜單不會超過幾分之一秒。然而,當我運行下面的測試,水豚不是等待AJAX​​請求完成

 


    When /^(?:|I)select "([^"]*)" from "([^"]*)" in search form$/ do |value, field| 
     within "#select_container" do 
     save_and_open_page 
     page.should have_css("#criteria_div_code > option:nth-child(10)") 
     select(value, :from => field) 
     end 
    end 

 

我碰到下面的錯誤,

expected css "#criteria_div_code > option:nth-child(10)" to return something (RSpec::Expectations::ExpectationNotMetError)

下拉填充了至少20個選項,所以我只是測試的存在第十個選項(現在)。

save_and_open_page顯示只存在一個選項(默認選項)而不是至少10個,因此出現「ExpectionNotMetError」。

Capybara.default_wait_time = 30 - 充裕的時間來獲取填充列表。

是不是水豚等待Ajax調用來完成?

我在這裏錯過了什麼嗎?

+0

你有標記的情況下爲'@ javascript'? – Chowlett

回答

0

我猜你需要用戶JS司機爲Ajax測試,

describe 'some stuff which requires js', :js => true do 
    it 'will use the default js driver' 
    it 'will switch to one specific driver', :driver => :celerity 
end 

還要注意以下幾點行 - 水豚可以阻止和等待Ajax請求完成你與網頁互動之後。要啓用此行爲,請將:resynchronize driver選項設置爲true。

2

你可能想檢查我爲阿賈克斯再同步Using Capybara for AJAX integration tests設置超時響應。重新同步超時默認爲10secs,如果您的響應在該時間之前沒有返回,您將不會收到任何響應,尤其是在已經設置的情況下:在配置中重新同步到false。下面是一個片段來設置超時

Capybara.register_driver :selenium do |app| 
    Capybara::Selenium::Driver.new(app, :browser => :firefox, :resynchronization_timeout => 1000) 
end 

注意:如果你以前設置:重新同步到假的,你需要將其設置爲true。

+2

隨着'Capybara'版本2.0.3這將導致該錯誤:'未知選項:{:resynchronization_timeout => 1000}(引發ArgumentError)' – etagwerker

+0

@etagwerker你是對的。從Selenium驅動中刪除了同步選項,因此可能不適用於較新版本的Selenium驅動。上述解決方案適用於Capybara版本低於2.0.3的版本以及較舊版本的Selenium驅動程序。 –