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"]