如何将对象的父对象建立为页面对象中的对象?

时间:2013-12-24 18:41:08

标签: ruby page-object-gem

在页面对象文件中:

class ThisPage
  include PageObject

我可以建立一个像这样的对象:

div(:user_dialog, :class => 'ud_dialog')

但是,在网站的域中,有许多窗口:class => 'ud_dialog'可以在各种工作流程中弹出。

我可以像 binding.pry 那样找到对象:

on(ThisPage).div_elements(:text => 'Are you sure you want to do this action?').first.parent.html

如何在页面文件中建立这样的窗口?

即。有这样的语法:

div(:user_dialog, parent(:text => 'Are you sure you want to do this action?'))

1 个答案:

答案 0 :(得分:2)

对于复杂定位器,例如定位父元素,您可以使用块来获取元素。

如果您将页面对象中的div定义为:

div(:user_dialog){
  div_elements(:text => 'Are you sure you want to do this action?').first.parent
}

然后您的页面可以执行:

on(ThisPage).user_dialog_element.html

请注意,由于您需要第一个匹配的div,因此可以将其简化为:

div(:user_dialog){
  div_element(:text => 'Are you sure you want to do this action?').parent
}

通过使用多个定位器(取决于你的html是什么),也可能更直接。您可以找到具有ud_dialog类并包含指定文本的div(部分匹配,因为可能存在其他文本):

div(:user_dialog, :class => 'ud_dialog', 
  :text => /Are you sure you want to do this action?/)