检查表格中每一行都有编辑链接的最简洁方法是什么?
示例代码:
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表行,唯一的选择是再次迭代以获取单元格,然后我认为只能实现单元格文本。
答案 0 :(得分:3)
解决方案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
请注意,如果没有编辑链接,这将在第一行失败。为了提高可读性并确保测试所有行,我建议使用包含expect
方法的all
语法:
page = AccountPage.new(browser)
expect(page.card_elements.map(&:edit_element)).to all be_visible