ruby - 如何在 PageObject 中对已注册的小部件使用多个访问器?

标签 ruby watir-webdriver page-object-gem

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/

相关文章:

ruby-on-rails - 从事件记录中删除括号和引号

ruby - 使用 watir-webdriver 的首屏截图

ruby - 遍历页面对象的所有元素

ruby-on-rails - 拦截ActiveRecord establish_connection初始化过程

ruby-on-rails - attr_accessible/security question with rails - 处理这个问题的最佳方法是什么?

ruby - 将超赞字体图标添加到表单标签

watir - 如何在 PageObject 中使用 css 获取元素

运行 irb watir 命令列表的 Ruby 脚本

ruby - Watir-Webdriver 如何处理加载失败的页面并继续测试

internet-explorer - Watir Webdriver 文本在 IE 上输入缓慢