获取页面上所有链接的文本。

时间:2014-09-28 20:42:29

标签: ruby-on-rails ruby capybara pageobjects

我正在编写一个测试,我希望获得菜单中显示的所有选项。菜单的HTML如下:

<div class="dropdown-menu context-menu open" style="display: block; left: 421px; top: 352px;">
    <li>
        <a href="#" onclick="save;">Save</a>
    </li>
    <li>
        <a href="#" onclick="duplicate;">Duplicate</a>
    </li>
    <li>
        <a href="#" onclick="delete;">Delete</a>
    </li>
</div>

我正在使用Capybara的页面对象进行测试。目前,我有这个......

module PageObjects
  module SomePage
    class OtherPage < PageObject
      def menu_options
        @element.right_click
        options = @page.all('div.dropdown-menu li')
        menu_options = options.map{ |option| MenuOption.new(option)}
        return menu_options.map{|m| m.text}
      end
    end

    class MenuOption < PageObject
      def text
        @element.find('a').text
      end
    end
  end
end

这使我可以在我的测试中致电other_page.menu并获取["Save","Duplicate","Delete"]。我希望做的是摆脱MenuOption类。有没有办法编写menu_options方法,以便从所有元素中获取文本?

1 个答案:

答案 0 :(得分:1)

您可以使用menu_options方法:

  1. 获取所有链接而不是列表项。
  2. 直接映射每个元素的文本,而不是将它们映射到MenuOption。
  3. 方法是:

    def menu_options
      @element.right_click
      options = @page.all('div.dropdown-menu li a')
      options.map{ |option| option.text }
    end