2011-11-02 53 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驱动程序。 –