我正在尝试对我正在编写的功能规范进行故障排除以学习Rails&测试。这是Rails 4应用程序的edit_spec。我正在使用RSpec和Capybara。
问题: Capybara无法从表单上的两个下拉列表中找到元素。这是我的表单源代码的相关部分:
<div class="field">
<label for="appointment_member_id">Member</label><br>
<select id="appointment_member_id" name="appointment[member_id]">
<option value="1">Callis Callis</option>
<option value="2">Rachale Rachale</option>
<option value="3">Hal Hal</option>
<option value="4">Kallis Kallis</option>
<option value="5">Earle Earle</option>
<option value="6">Rudy Rudy</option></select>
</div>
<div class="field">
<label for="appointment_trainer_id">Trainer</label><br>
<select id="appointment_trainer_id"
name="appointment[trainer_id]"> <option value="1">Jacob Jacob</option>
<option value="2">Michele Michele</option>
<option value="3">Alex Alex</option>
<option value="4">Yanni Yanni</option>
<option value="5">Upton Upton</option>
<option value="6">Willham Willham</option></select>
</div>
在我的edit_spec中,我尝试使用“选项值”和“选择ID”让Capybara从下拉列表中选择名称:
select('4', :from => 'appointment_member_id')
select('2', :from => 'appointment_trainer_id')
结果是Capybara :: ElementNotFound错误。以下是错误消息的全文:
使用更正的信息成功更新约会(FAILED - 1)
故障:
1) Editing appointments updates an appointment successfully with corrected information
Failure/Error: select('4', :from => 'appointment_member_id')
Capybara::ElementNotFound:
Unable to find option "4"
我研究了Capybara的问题和文档,以及类似问题的Stackoverflow帖子。海报解决了这个问题,但不记得他是怎么做到的。我很困惑为什么Capybara无法从下拉列表中找到会员和培训师?选项值和名称似乎在表单上可见。我错过了什么?我感谢任何帮助!
答案 0 :(得分:1)
Capybara模拟用户行为。因此,不要使用id和值来尝试使用用户看到的内容:
select 'Kallis Kallis', from: 'Member'
select 'Michele Michele', from: 'Trainer'
答案 1 :(得分:1)
你可以试试下面的代码,或者可能分配div和id并用你选择的任何id替换"div.field"
within "div.field" do
find("option[value='4']", text: 'Yanni Yanni').select_option
click_button 'your_submit_button'
end