Решение 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
person
Justin Ko
schedule
16.04.2015