从Capybara的标签中选择一个单选按钮

时间:2013-12-05 21:44:43

标签: capybara

我有一个动态生成的表单,如下所示:

Do you like Pizza?
[ ] Yes   [ ] No

HTML看起来像这样:

<form>
  <div class="field">
    <label>Do you like Pizza?</label>
    <input
      type="radio" value="true" 
      id="reply_set_replies_attrs_0_pizza_true"
      name="reply_set[replies_attrs][0][pizza]">
    </input>
    <label for="reply_set_replies_attrs_0_pizza_true">Yes<label>
    <input
      type="radio" value="false" 
      id="reply_set_replies_attrs_0_pizza_false"
      name="reply_set[replies_attrs][0][pizza]">
    </input>
    <label for="reply_set_replies_attrs_0_pizza_false">No<label>
  </div>
</form>

我想和Capybara一起检查那些单选按钮。我怎样才能做到这一点?我并不总是知道单选按钮的id,因为它们中有一些,当我也询问爆米花和鸡肉时,我不想依赖于了解它们的顺序。

有没有办法做某事......

field = find_label("Do you like pizza?").parent('field')
yes = field.find_label('Yes')
yes.click

2 个答案:

答案 0 :(得分:8)

请注意,使用find时,:text选项会进行部分文本匹配。因此,您可以直接找到div:

find('div.field', :text => 'Do you like Pizza?').choose('Yes')

(同样使用choose可以更轻松地选择单选按钮。)

答案 1 :(得分:2)

不错!

label = find('label', :text => "Do you like Pizza?")
parent = label.find(:xpath, '..')
parent.find_field("Yes").click