如何使用页面对象迭代一系列复选框?

时间:2016-06-22 19:32:19

标签: ruby testing page-object-gem

我有一个使用page-object gem的ID定义的复选框列表。样本如下:

checkbox        :main_product,                      id:             '19437578_58659806'
checkbox        :thumb_one,                         id:             '19437579_58659811'
checkbox        :thumb_two,                         id:             '19437580_58659812'
checkbox        :thumb_three,                       id:             '19437581_58659813'
checkbox        :thumb_four,                        id:             '19437582_58659814'
checkbox        :thumb_five,                        id:             '19437583_58659815'
checkbox        :thumb_six,                         id:             '19437584_58659816'
checkbox        :thumb_seven,                       id:             '19437585_58659817'
checkbox        :thumb_eight,                       id:             '19437586_58659818'
checkbox        :thumb_nine,                        id:             '19437587_58659819'
checkbox        :thumb_ten,                         id:             '19437588_58659820'
checkbox        :tt_one,                            id:             '19437594_58659842'
checkbox        :tt_two,                            id:             '19437595_58659843'
checkbox        :tt_three,                          id:             '19437596_58659844'
checkbox        :tt_four,                           id:             '19437597_58659845'
checkbox        :tt_five,                           id:             '19437598_58659846'
checkbox        :tt_six,                            id:             '19437599_58659847'
checkbox        :tt_seven,                          id:             '19437600_58659848'
checkbox        :tt_eight,                          id:             '19437601_58659849'
checkbox        :tt_nine,                           id:             '19437602_58659850'
checkbox        :tt_ten,                            id:             '19437603_58659851'

我看待它的方式;必须有一种更有效的方法来收集特定div中的所有复选框元素。

我正在寻找一种基本上做的方法

checkbox_objects.each do |checkbox|
  checkbox.check
end

但我不确定如何定义checkbox_objects。是否有人知道如何收集特定元素中的所有复选框并将它们放入数组中?提前谢谢。

1 个答案:

答案 0 :(得分:2)

checkboxes访问者方法(与checkbox相对)用于创建Array个复选框。

假设页面HTML的结构如下:

<div id="other">
  <input type="checkbox">
  <input type="checkbox">
</div>
<div id="container">
  <input type="checkbox">
  <input type="checkbox">
</div>

您可以指定一个块来查找所有复选框,例如div,其ID为“container”:

checkboxes(:thumb) { div_element(id: 'container').checkbox_elements }

或者,您可能会发现CSS-selector或XPath更简洁:

checkboxes(:thumb, css: 'div#container input[type="checkbox"]')

无论哪种方式,页面对象都会获得一个<name>_elements方法,该方法返回匹配的复选框:

page.thumb_elements.each do |checkbox|
  checkbox.check
end

或者作为一个单行:

page.thumb_elements.each(&:check)