在元素上调用方法时获取弃用警告 - 可以使用一些建议

时间:2013-04-06 18:30:42

标签: ruby page-object-gem

在页面对象元素上调用方法时,我经常会收到弃用警告。这告诉我,我可能还没有按照预期使用宝石。我可以使用一些帮助,有人可以推荐一种更好的方法来处理这样的事情吗?

我正在处理一个页面,其中包含每个包含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给我一个可以使用的数组,我可以用类似的方式完成同样的事情。有没有人使用宝石做过这样的事情?

2 个答案:

答案 0 :(得分:2)

除了set元素上不存在CheckBox方法之外,您上面的内容看起来很好。相反,有checkuncheckchecked?方法。我认为您可以安全地将上述方法更改为:

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线程供参考:

How to avoid page-object deprecated for checkbox