page-object gem自动 generates multiple accessors .
例如,除了 link
之外,您还可以使用 links
,例如:
class MyPage
include PageObject
links(:tag_link, :css =>".tags-link a")
end
...
page.tag_link_elements.each do |link|
puts link.text
end
问题是,如何为 custom registered widgets 实现相同的“多访问器”功能?
最佳答案
注册小部件时,小部件集合方法对页面对象可用。与标准元素集合类似,集合方法是在末尾添加“s”的小部件名称(尽管这可以在每个小部件的基础上被覆盖)。请注意,此功能是在页面对象 gem 的 1.0.2 版中添加的(即相当新)。
例如,假设页面 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>
我们想要为“item”div 定制一个小部件。我们可以注册一个小部件来定义项目:
class Item < PageObject::Elements::Div
def description
span_element.text
end
end
PageObject.register_widget :item, Item, :div
在页面类中,:item
将定义访问单个小部件的方法。复数名称 :items
将定义小部件的集合:
class MyPage
include PageObject
items(:item, class: 'item')
end
要使用小部件集合,将创建一个_elements
方法(类似于标准集合)。在这种情况下,它将被称为 item_elements
:
page = MyPage.new(browser)
p page.item_elements.length
#=> 3
p page.item_elements.map(&:description)
#=> ["text1", "text2", "text3"]
关于ruby - 如何在 PageObject 中对已注册的小部件使用多个访问器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27646458/