2

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

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

4

2 回答 2

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。在该方法的第二行中,如果复选框不存在,您将失败,因此它会处理您所防范的条件。

- 芝士

于 2013-04-07T12:59:49.457 回答
1

你需要使用checkbox.check,而不是checkbox.set

这是一个类似的SO线程供参考:

如何避免复选框弃用的页面对象

于 2013-04-06T19:05:40.860 回答