使用页面对象访问 3 层深的嵌套元素
Accessing a nested element 3 levels deep using page objects
使用页面对象模型和 gem 我想访问一个嵌套了 3 层的元素。我已经成功访问了 2 个元素深度的嵌套元素,但是对于 3 个元素,同样的方法不起作用。
我的页面对象中定义了 3 个元素:
div(:serv_info, :class => "service-info")
div(:validate_method, :class => "validate-method")
div(:scar_input_group, :class => "input-group")
所以我尝试链接这 3 个元素以访问 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 但如果可以的话,我不想重复任何代码。
假设嵌套始终相同,而不是让 :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"
使用页面对象模型和 gem 我想访问一个嵌套了 3 层的元素。我已经成功访问了 2 个元素深度的嵌套元素,但是对于 3 个元素,同样的方法不起作用。
我的页面对象中定义了 3 个元素:
div(:serv_info, :class => "service-info")
div(:validate_method, :class => "validate-method")
div(:scar_input_group, :class => "input-group")
所以我尝试链接这 3 个元素以访问 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 但如果可以的话,我不想重复任何代码。
假设嵌套始终相同,而不是让 :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"