如何循环访问页面对象表



检查表中的每一行是否有编辑链接的最干净方法是什么?

示例代码:

class AccountPage
  include PageObject
  table(:cards, id: 'cards')
  link(:edit, href: /edit/)
end

我希望能够做这样的事情:

page.cards_element.each do |card|
  card.edit? should == true
end

这行不通,因为每个块将返回一个 PageObject 表行,唯一的选择是再次迭代以获取单元格,然后我想只能实现单元格文本。

解决方案 1 - 嵌套定位器

最快的解决方案是在循环访问表行时使用嵌套元素方法。

class AccountPage
  include PageObject
  table(:cards, id: 'cards')
end
page = AccountPage.new(browser)
page.cards_element.each do |card|
  card.link_element(href: /edit/).visible?.should == true
end

card.link_element(href: /edit/).visible?行表示,对于每张卡片(即表格行),检查是否有可见的链接元素。

解决方案 2 - 小部件

使用嵌套定位器方法的缺点是页面的详细信息现在位于测试代码中,而不是页面对象中。这可以通过使用自定义小部件来解决。

您需要定义一个表示表格行的小部件:

class Card < PageObject::Elements::TableRow
  def edit_element
    link_element(href: /edit/)
  end
end
PageObject.register_widget :card, Card, :tr

然后,页面对象将被定义为包含小部件:

class AccountPage
  include PageObject
  cards(:card, :css => 'table#cards tr')
end

然后,这允许您将测试编写为:

page = AccountPage.new(browser)
page.card_elements.each do |card|
  card.edit_element.visible?.should == true
end

请注意,如果没有编辑链接,这将在第一行失败。为了提高可读性并确保测试所有行,我建议转到包含all方法的expect语法:

page = AccountPage.new(browser)
expect(page.card_elements.map(&:edit_element)).to all be_visible

相关内容

  • 没有找到相关文章

最新更新