使用Capybara进行测试无法找到使用简单表单关联创建的复选框

时间:2014-08-14 05:44:42

标签: ruby-on-rails capybara simple-form

我有一个使用Simple Form创建的表单,因此

<%= simple_form_for @organisation do |f| %>
  <div class="form-inputs">
    <%= f.association :causes, as: :check_boxes %>
  <div class="form-actions">
    <%= f.button :submit %>
  </div>
<% end %>

当我使用浏览器时页面工作正常,但当我尝试用Capybara检查时,例如:

check('organisation_cause_ids_1')

并尝试了很多这样的变化。

find(:xpath , '//*[@id="organisation_cause_ids_1"]').set(true)
find("organisation_cause_ids_1").check

这些总是会出错:

 Failure/Error: check('organisation_cause_ids_1')
 Capybara::ElementNotFound:
   Unable to find checkbox "organisation_cause_ids_1"

Simple Form生成的HTML是:

 <div class="input check_boxes optional organisation_causes">
   <label class="check_boxes optional">Causes</label>
   <span class="checkbox">
     <label for="organisation_cause_ids_1" name="organisation[cause_ids]">
     <input class="check_boxes optional" id="organisation_cause_ids_1" name="organisation[cause_ids][]" type="checkbox" value="1" />Cause A</label>
   </span>
   <span class="checkbox">
     <label for="organisation_cause_ids_2" name="organisation[cause_ids]">
     <input class="check_boxes optional" id="organisation_cause_ids_2" name="organisation[cause_ids][]" type="checkbox" value="2" />Hunger</label>
   </span>
  ...

编辑:问题是由于&#39;原因&#39;的延迟加载。我是用工厂创建的。它们没有被创建,所以页面没有复选框。

1 个答案:

答案 0 :(得分:1)

试试这个

find_by_id('organisation_cause_ids_1').find("checkbox[value='1']").select_option

或者可能是这个

find(:css, ".check_boxes[value='1']").set(true)