溶液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 - 的widget
使用嵌套定位方法的缺点是,在网页的细节现在在测试代码而不是页面对象。这可以通过使用自定义小部件来解决。
您需要定义表示一表行的控件:
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
感谢贾斯汀。我将尝试小部件方法。以前没有用过它们。 – Rahul