Ruby 如何对PageObject中已注册的小部件使用多访问器?

Ruby 如何对PageObject中已注册的小部件使用多访问器?,ruby,watir-webdriver,page-object-gem,Ruby,Watir Webdriver,Page Object Gem,自动地 例如,除了链接,您还可以使用链接,例如: class MyPage include PageObject links(:tag_link, :css =>".tags-link a") end 问题是,如何实现相同的“多访问器”功能?注册小部件后,页面对象可以使用小部件收集方法。与标准元素集合类似,集合方法是小部件名称,末尾添加了一个“s”(尽管可以在每个小部件的基础上重写)。请注意,此功能是在页面对象gem的1.0.2版中添加的(ie是相当新的) 例如,假设

自动地

例如,除了
链接
,您还可以使用
链接
,例如:

class MyPage
    include PageObject

    links(:tag_link, :css =>".tags-link a")
end


问题是,如何实现相同的“多访问器”功能?

注册小部件后,页面对象可以使用小部件收集方法。与标准元素集合类似,集合方法是小部件名称,末尾添加了一个“s”(尽管可以在每个小部件的基础上重写)。请注意,此功能是在页面对象gem的1.0.2版中添加的(ie是相当新的)

例如,假设页面HTML如下所示:

<html>
  <body>
    <div class="heading"><span>Title</span></div>
    <div class="item"><span>text1</span></div>
    <div class="item"><span>text2</span></div>
    <div class="item"><span>text3</span></div>
  </body>
</html>
要使用小部件集合,将创建一个
\u elements
方法(类似于标准集合的方法)。在这种情况下,它将被称为
item\u elements

page = MyPage.new(browser)
p page.item_elements.length
#=> 3
p page.item_elements.map(&:description)
#=> ["text1", "text2", "text3"]

widgets的多访问器特性实际上是在1.0.3中引入的
class Item < PageObject::Elements::Div
  def description
    span_element.text
  end
end

PageObject.register_widget :item, Item, :div
class MyPage
  include PageObject

  items(:item, class: 'item')
end
page = MyPage.new(browser)
p page.item_elements.length
#=> 3
p page.item_elements.map(&:description)
#=> ["text1", "text2", "text3"]