【问题标题】:Accessing nested divs using page object model使用页面对象模型访问嵌套 div
【发布时间】:2014-05-14 19:33:50
【问题描述】:

我无法访问嵌套的 div。

这是我的场景。我需要访问内部 div 中的总数。有人可以在这里阐明一下吗?

<div id="RequestSend">
    <div class="title">
        Requests Sent
    </div>
    <div class="total">
        10
    </div>
</div>
<div id="RequestReceived">
    <div class="title">
        Requests Received
    </div>
    <div class="total">
        20
    </div>
</div>

我尝试了以下方法,但没有成功。

    Approach 1:

    prof.rb
    =======

    div(:total_count, {:class => 'total'})
    div(:request_send, {:id => 'RequestSend'})

    prof_spec.rb
    =============
    page.request_send_element.total_count.should eq 10

    Output:
    NoMethodError: undefined method `total_count' for #<Selenium::WebDriver::Element:0x....>


    Approach 2:

    prof.rb
    =======
    divs(:total_count, {:class => 'total'})

    prof_spec.rb
    ============
    total_count[0] # for first 
    total_count[1] # for second

Please note I am a new user to page object.

【问题讨论】:

    标签: page-object-gem


    【解决方案1】:

    解决方案 1 - 块

    最直接的方法是在定义访问器时使用块。这允许您指定元素的路径 - 即允许您将搜索范围限定为特定元素。

    最简单的方法是将一堆div_element1 方法链接在一起:

    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
    

    【讨论】:

    • 优秀的贾斯汀,感谢您的建议。会使用它们。
    猜你喜欢
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多