2015-04-15 63 views
2

检查表格中每行是否具有编辑链接的最简单方法是什么?如何迭代页面对象表

示例代码:

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表行,唯一的选择是再次迭代获得单元格,然后我可以实现只有单元格文本。

回答

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 - 的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 
+0

感谢贾斯汀。我将尝试小部件方法。以前没有用过它们。 – Rahul