Доступ к вложенному элементу глубиной 3 уровня с использованием объектов страницы

Используя объект Page модели и драгоценный камень, я хочу получить доступ к элементу, который вложен в 3 слоя. Я успешно получил доступ к вложенным элементам глубиной 2, но для трех тот же метод не работает.

3 элемента, определенных в моем объекте страницы:

div(:serv_info, :class => "service-info")
div(:validate_method, :class => "validate-method")
div(:scar_input_group, :class => "input-group")

Поэтому я попытался объединить эти три элемента для доступа к divclassinput-container input-left-half round как это:

div(:scar_first_name_error){validate_method_element.serv_info_element.scar_input_group_element.div_element(:class => "input-container input-left-half round")}

Но я получил ошибку, что serv_info_element это неопределенный метод, который имеет смысл, но возможно ли связать 3 предопределенных элемента, которые я изложил выше, для доступа к input-container input-left-half round?

Я прочитал это: https://github.com/cheezy/page-object/wiki/Nested-Elements но не хотел повторять какой-либо код, если я могу помочь.

1 ответ

Решение

Предполагая, что вложенность всегда одинакова, а не имея :scar_first_name_error отображая каждого предка, вы можете определить каждый элемент относительно его родителя (или предка).

Давайте предположим, что HTML-код:

<html>
  <body>
    <div class="validate-method">
      <div class="service-info">
        <div class="input-group">
          <div class="input-container input-left-half round">
            text
          </div>
        </div>
      </div>
    </div>
  </body>
</html>

Вы можете определить страницу как:

class MyPage
  include PageObject

  div(:serv_info) { validate_method_element.div_element(:class => "service-info") }
  div(:validate_method, :class => "validate-method")
  div(:scar_input_group) { serv_info_element.div_element(:class => "input-group") }
  div(:scar_first_name_error) { scar_input_group_element.div_element(:class => "input-container input-left-half round") }
end

Обратите внимание, что :serv_info определяется по отношению к его родителю :validate_method, :scar_input_group определяется относительно его родителя :serv_info, так далее.

С помощью этого объекта страницы мы можем видеть, что можем получить текст нижнего элемента:

page = MyPage.new(browser)
p page.scar_first_name_error
#=> "text"
Другие вопросы по тегам