在页面对象元素上调用方法时,我经常会收到弃用警告。这告诉我,我可能还没有按照预期使用宝石。我可以使用一些帮助,有人可以推荐一种更好的方法来处理这样的事情吗?
我正在处理一个页面,其中包含每个包含checkbox元素的div列表。换句话说,就像这样:
<div class="item-checkbox"><input type="checkbox"></div>
<div class="item-checkbox"><input type="checkbox"></div>
<div class="item-checkbox"><input type="checkbox"></div>
我想通过索引访问一个复选框,然后在需要时检查它。这是我现在拥有的:
def select_checkbox(index)
fail "Nothing in list" unless checkboxes.length > 0
checkbox = self.checkboxes[index].checkbox_element
if checkbox.exists?
checkbox.set
else
fail "could not select a checkbox at index #{index} - check that it exists"
end
end
protected
def checkboxes
div_elements(:class=> 'item-checkbox')
end
这样可行,但我在第5行收到了弃用警告,checkbox.set。将其更改为checkbox.click将其清除。然而,我不相信我这样做是“页面对象宝石”的方式。使用watir-webdriver,divs给我一个可以使用的数组,我可以用类似的方式完成同样的事情。有没有人使用宝石做过这样的事情?
答案 0 :(得分:2)
除了set
元素上不存在CheckBox
方法之外,您上面的内容看起来很好。相反,有check
,uncheck
和checked?
方法。我认为您可以安全地将上述方法更改为:
def select_checkbox(index)
fail "Nothing in list" unless checkboxes
checkbox = self.checkboxes[index].checkbox_element
if checkbox.exists?
checkbox.check
else
fail "could not select a checkbox at index #{index} - check that it exists"
end
end
protected
def checkboxes
div_elements(:class=> 'item-checkbox')
end
另一种可能的方法是在类中声明div:
class MyPage
include PageObject
divs(:checkbox, :class => 'item-checkbox')
def select_checkbox(index)
fail "Nothing in list" unless checkboxes
checkbox_elements[index].checkbox_element.check
end
end
在这种情况下,您仍在检查页面上是否有任何复选框div。在方法的第二行,如果复选框不存在,您将失败,因此它会处理您所防范的条件。
-Cheezy
答案 1 :(得分:1)
您需要使用checkbox.check
,而不是checkbox.set
。
这是一个类似的SO线程供参考: