2015-09-24 64 views
2

我有一个测试,应该从我的病人列表中选择一个病人。如果我运行没有js: true的功能测试,它工作得很好。水豚与js司机不会产生选择选项

问题是,我选择病人后,我也必须执行更改JavaScript事件。如果我使用任何JS驱动程序(无论是硒或水豚,WebKit的)我的测试失败说明:

Unable to find option "Patient #1" 

我试图从问题Capybara with :js => true causes test to fail去除DatabaseCleaner和解决方案。

RSpec.feature "Select patient", type: :feature do 
    background do 
    create(:patient) 
    login_as create(:user) 
    visit root_path 
    end 

    scenario "User selects a created patient", js: true do 
    select("Patient #1", from: 'clinical_event_patient_id') 
    end 
end 

我也试过了background设置js: true现在为止,我没有成功。

+0

你肯定选择是对的看法?您是否尝试使用save_and_open_page或save_screenshot在您的网页上查看? 如果你有一个js逻辑来显示这个下拉菜单,有时会发生select和逻辑之间的时间差,以显示验收测试中的下拉菜单。 – alexwbuschle

+0

我用硒打开浏览器和pyr来暂停它。选择菜单与提示选择一起存在,但其他选项不存在。 – sanny

+0

请显示您的数据库清洁配置 - 您需要使用截断测试与js:true –

回答

0

我认为这是因为当Capybara试图选择这个选项时,选择还没有填充,因为水豚2是一个智能等待算法,等待2秒的默认时间,然后抛出一个元素wasn没有发现。

您可以增加此时间为5秒例如,看看元素现在被装载或不

Capybara.default_max_wait_time = 5 

参考:http://www.rubydoc.info/github/jnicklas/capybara/master/Capybara%2FNode%2FFinders%3Afind

同时尝试使用page.select

page.select("Patient #1", from: 'clinical_event_patient_id') 

另一个这是一个很好的做法,不要在你的测试中使用静态ID,如果它们是你刚创建的对象Patient #1避免以前的记录是否被删除的问题或没有,所以你background块添加

@patient = create(:patient) 

然后在您的选择

page.select("Patient ##{@patient.id}", from: 'clinical_event_patient_id') 
+0

感谢提示静态ID,但您提出的解决方案不会改变。奇怪的是,患者记录确实被创造出来了,但是有了js:由于某种原因,它不会被放入选择。 – sanny

+0

如果您在测试结束时添加了'save_and_open_page',您是否看到填充在html上的选择?您是否也可以在代码中填写患者填写选择字段的代码 – bigsolom