解决方案 1 - 块
最直接的方法是在定义评估器时使用块。这允许您指定元素的路径 - 即允许您将搜索范围限制到特定元素。
最简单的就是链接一堆div_element
1种方法并用:
div(:request_send_total){
div_element(:id => 'RequestSend').div_element(:class => 'total')
}
div(:request_received_total){
div_element(:id => 'RequestReceived').div_element(:class => 'total')
}
或者,如果您可能需要在 RequestSend/RequestReceived div 中查找不同的内容,我将专门为每个 div 创建一个访问器。然后总计的访问器将调用父元素:
div(:request_send, :id =>'RequestSend')
div(:request_send_total){
request_send_element.div_element(:class => 'total')
}
div(:request_received, :id =>'RequestReceived')
div(:request_received_total){
request_received_element.div_element(:class => 'total')
}
在这两种情况下,您的页面 API 将是:
page.request_send_total
#=> 10
page.request_received_total
#=> 20
解决方案 2 - 小部件
更复杂的实现,但更好的页面 API 是使用小部件。基本上,这就像使用自己的特定方法创建元素类型。
您可以创建一个请求小部件,例如:
class Request < PageObject::Elements::Div
def total
div_element(:class => 'total').text
end
end
PageObject.register_widget :request, Request, :div
然后,您的页面对象将使用注册的request
访问器:
request('request_send', :id => 'RequestSend')
request('request_received', :id => 'RequestReceived')
最后,您将得到的总值为:
page.request_send_element.total
#=> 10
page.request_received_element.total
#=> 20