Найти конкретный элемент, который существует в нескольких местах, но имеет тот же идентификатор, класс
Как найти элемент, если он существует в нескольких местах на странице, но имеет одинаковый идентификатор в одном классе? Например: есть два текстовых поля с одинаковым идентификатором, и я хотел бы выбрать второе. Это работает, когда я просто пишу watir/ruby (без использования объекта страницы) @b.text_fields(:id => 'color'). Last.set "red"
Но мне пока не удается заставить его работать, используя объект страницы.
заранее спасибо
2 ответа
Как упоминалось в комментариях, лучшее решение - обновить поля, чтобы иметь уникальные идентификаторы.
Однако, предполагая, что это невозможно, вы можете решить проблему, используя :index
локатор. Следующий объект страницы находит 2-е поле цвета, которое эквивалентно Watir @b.text_field(:id => 'color', :index => 1).set
:
class MyPage
include PageObject
text_field(:color_1, id: 'color', index: 0)
text_field(:color_2, id: 'color', index: 1)
end
Который будет называться как:
page = MyPage.new(browser)
page.color_1 = 'red'
page.color_2 = 'blue'
Если вы на самом деле пытаетесь до последнего поля, т.е. реплицировать @b.text_fields(:id => 'color').last.set
тогда :index
будет "-1":
text_field(:color_2, id: 'color', index: -1)
Обратите внимание, что подобное можно сделать при динамическом расположении полей в методе (в отличие от определения, полученного с помощью метода доступа):
class MyPage
include PageObject
def set_colors(color_1, color_2)
text_field_element(id: 'color', index: 0).value = color_1
text_field_element(id: 'color', index: 1).value = color_2
end
end
@b.text_fields(:id=>'color',:index=>1).set "red"
Это может решить вашу проблему.