使用页面对象访问3层深度的嵌套元素

使用Page Object模型和gem我想访问一个嵌套3层深的元素。 我已经成功访问​​了2个元素深的嵌套元素,但对于3个相同的方法不起作用。

我的Page Object中定义的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是:

   
text

您可以将页面定义为:

 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是根据其父:scar_input_group定义的:validate_method:scar_input_group是根据其父级定义的:serv_info等。

使用此页面对象,我们可以看到我们可以获取下部元素的文本:

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