单击使用capybara的复选框

时间:2018-05-08 07:12:50

标签: ruby-on-rails capybara

目前我有一个由标签包装的复选框。

<label for="exercise_form_division_ids_34">
       <input class="check_boxes optional division-checkboxes" type="checkbox" value="34" name="form[division_ids][]" id="exercise_form_division_ids_34"> Technology
</label>

在我的集成测试中,我尝试使用

within '.organizations' do
  find("label[for='exercise_form_division_ids_34").click
end

OR

check "exercise_form_division_ids_#{department.id}", allow_label_click: true

但我仍然可以找到未被禁用的可见复选框“calltree_exercise_form_division_ids_2” Unable to find visible checkbox "exercise_form_division_ids_" that is not disabled

1 个答案:

答案 0 :(得分:1)

由于提供的信息有限,您可能会有一些潜在的可能性。

  1. 标签/复选框实际上并不在页面上具有organizations类的元素内。

  2. 错误Unable to find visible checkbox "exercise_form_division_ids_" that is not disabled表示实际上没有ID插入到您的选择器中,这往往表明department实际上并未存在于您的测试中。

  3. 您可能认为34是基于您的开发环境中的内容的正确ID,但可能与您的测试环境中的内容不同。

  4. 要缩小可能性,首先要做的是使用page.save_and_open_screenshot在您的测试中获取屏幕截图(假设您正在使用支持屏幕截图的驱动程序)并确保实际存在页面上的可见复选框。如果没有,您可能不会在测试开始之前在DB中创建所需的对象。

    然后查看浏览器中的页面,确保屏幕上显示的元素实际上是复选框和/或标签。如果标签和&amp;复选框被隐藏并替换为一些JS小部件,然后您需要与小部件在页面中创建的任何元素进行交互(就像用户一样)。如果只通过JS / CSS隐藏了复选框,但标签是可见的,那么

    check('Technology', allow_label_click: true) # check matching on label text
    

    应该有用。