首页 文章

Capybara无法在下拉列表中找到元素

提问于
浏览
2

我正在尝试解决我正在编写的功能规范,以学习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无法从下拉列表中找到会员和培训师?选项值和名称似乎在表单上可见 . 我错过了什么?我感谢任何帮助!

2 回答

  • 1

    Capybara模拟用户行为 . 因此,不要使用id和值来尝试使用用户看到的内容:

    select 'Kallis Kallis', from: 'Member'
    select 'Michele Michele', from: 'Trainer'
    
  • 1

    您可以尝试下面的代码,或者可能分配div和id,并将 "div.field" 替换为您选择的任何ID

    within "div.field" do
      find("option[value='4']", text: 'Yanni Yanni').select_option
      click_button 'your_submit_button'
    end
    

相关问题