Найти конкретный элемент, который существует в нескольких местах, но имеет тот же идентификатор, класс

Как найти элемент, если он существует в нескольких местах на странице, но имеет одинаковый идентификатор в одном классе? Например: есть два текстовых поля с одинаковым идентификатором, и я хотел бы выбрать второе. Это работает, когда я просто пишу 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"

Это может решить вашу проблему.

Другие вопросы по тегам