使用js驱动程序的Capybara不会生成选择选项

时间:2015-09-24 19:01:46

标签: ruby-on-rails ruby rspec capybara

我有一项测试应该从我的患者名单中选择一名患者。如果我在没有js: true的情况下运行功能测试,它就可以正常工作。

问题是,在我选择患者后,我还必须执行更改javascript事件。如果我使用任何js驱动程序(无论是selenium还是capybara-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

我也尝试为js: true设置background,到目前为止我没有成功。

1 个答案:

答案 0 :(得分:0)

我认为这是因为当Capybara尝试选择此选项时,选择还没有填充,因为Capybara 2实现了一个智能等待算法,等待默认时间为2秒,然后抛出一个元素不是'找到了。

例如,您可以将此时间增加到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,以避免以前的记录是否被删除的问题,那么在{{1阻止添加

background

然后在你的选择中

@patient = create(:patient)