我有一项测试应该从我的患者名单中选择一名患者。如果我在没有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
,到目前为止我没有成功。
答案 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)