Capybara:拉入多个单选按钮选项

时间:2016-09-20 19:13:13

标签: ruby-on-rails capybara

我遇到了一个问题,我认为问题在于我的page.all是如何拉出单选按钮问题的。

所以这里是表格的HTML(多个问题,5个单选按钮选项):

    <table class="table table-striped table-stuff table-collapsible">
    <colgroup>
    <thead>
    <tbody>
    <input id="0_answer_question_id" value="9966" name="response[answers][0][answer_id]" type="hidden">
    <tr>
    <td class="heading">
    <td class="option">
    <div class="radio-inline radio-inline--empty">
    <input id="question_1_1" value="1" name="response[answers_attributes][0][answer_opinion]" type="radio">
    <label for="question_1_1">Strongly Disagree</label>
    </div>
    </td>
    <td class="option">
    <td class="option">
    <td class="option">
    <td class="option">
    </tr>
    <input id="response_1_question_id" value="9966" name="response[answers_attributes][1][answer_question_id]" type="hidden">
    <tr>
    <input id="response_1_id" value="<a number>" name="response[answers_attributes][1][id]" type="hidden">
   <Same as above repeated 5 times with numbers changed>
    </tbody>
    </table>

我正在使用:

page.all('table.table-stuff tbody tr', minimum: 6).each do |row|
  row.all("td label").sample.trigger('click')
end

获取每一行并从中选择一行。但是,我注意到“有时”一行不会选择一行。我的理论是“标题”(其中&lt; label&gt;本身也可以接受其中一次点击?)(因为根据我对page.all的工作方式的理解,它抓住了表格中的每个tbody tr ...但是也许是抓住标题?(因为它包含td label?)

当一个表的名称类似于table table-striped table-stuff table-collapsible时......你怎么知道实际的表“名称”是什么? (我没有写这个网站,只是为它做测试)。把它放在page.all('table.<etc>')

1 个答案:

答案 0 :(得分:1)

如果标题td(在你的例子中未展开)也包含一个标签元素(因此它将包含在你的all调用的结果中)那么你只需要更改CSS选择器就可以了不包括在内 - 比如

row.all("td.option label").sample.trigger('click') # only choose labels contined in tds with the class of 'option'

row.all("td:not(.heading) label").sample.trigger('click') # choose labels contained in tds without the class of 'heading'

关于关于表名的第二个问题,我真的不明白你在问什么。表没有名称属性,它们可以具有id属性或包含一些文本的标题,然后可以通过find(:table, 'id or caption text')within_table('id or caption text') { code to execute within scope of the table }使用capybara查找它们。相反,您似乎在谈论元素上的类,这些类在CSS选择器中使用'。'指定。因此,将表元素与您列出的所有类匹配的CSS选择器将是 - 'table.table.table-striped.table-stuff.table-collapsible'

注意:如果您确定总共只有5个选项,则可以在您的查找中添加:count选项,以确保您的选择器仅查找这些项目

row.all("td.option label", count: 5).sample.trigger('click')