Доступ к вложенному элементу глубиной 3 уровня с использованием объектов страницы
Используя объект Page модели и драгоценный камень, я хочу получить доступ к элементу, который вложен в 3 слоя. Я успешно получил доступ к вложенным элементам глубиной 2, но для трех тот же метод не работает.
3 элемента, определенных в моем объекте страницы:
div(:serv_info, :class => "service-info")
div(:validate_method, :class => "validate-method")
div(:scar_input_group, :class => "input-group")
Поэтому я попытался объединить эти три элемента для доступа к div
class
input-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"