Ruby 使用页面对象访问嵌套元素3层

Ruby 使用页面对象访问嵌套元素3层,ruby,watir,watir-webdriver,page-object-gem,pageobjects,Ruby,Watir,Watir Webdriver,Page Object Gem,Pageobjects,使用页面对象模型和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个元素以访问

使用页面对象模型和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
输入容器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 left half round


我读过这篇文章:但如果我能帮上忙的话,我不想重复任何代码。

假设嵌套总是相同的,而不是让
:scar\u first\u name\u 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>
请注意,
:serv\u info
是相对于其父级
:validate\u method
定义的,
:scar\u input\u group
是相对于其父级
:serv\u info
定义的

使用此页面对象,我们可以看到,我们可以获得较低元素的文本:

page = MyPage.new(browser)
p page.scar_first_name_error
#=> "text"

谢谢贾斯汀,我会试试看它是否有效。
page = MyPage.new(browser)
p page.scar_first_name_error
#=> "text"