获取页面对象元素的名称

时间:2014-11-03 18:02:51

标签: page-object-gem

是否可以通过只有Element来获取PageObject元素的标识符? (cheezy pageobject gem)

Element的属性是否保留了元素的名称。

例如,在这种情况下:

text_field(:name, :id => 'name')

如果我只有元素,我怎么能找到它的名字? :)

感谢您的帮助。


编辑:

好的,这就是我要做的事情:

我有一个名为AttributePage的pageObject,它定义了一些元素:

class AttributePage < PropertyPage
  include PageObject
  include DataMagic

  page_url NavigationHelpers::get_path 'catalog-attributes'


  # Header
  textfield(:attribute_sets, :id =>'ext-1') # 1.
  textfield(:global_attributes, :id => 'ext-2') # 2.

end

和一个如下所示的PageObject PropertyPage:

class PropertyPage
  include PageObject

  def get_search_filter_elements
    element_methods = self.class.instance_methods(false).find_all{ |m| m =~ /_element$/ }
    elements = element_methods.collect{ |m| self.send(m) }
    return_array =[]
    for x in 0...element_methods.size
      return_array.append([element_methods[x].to_s.gsub('_element', ''), elements[x]])
    end
    return return_array
  end

这样,当我打电话

on_page(AttributePage).get_search_filter_elements

我得到一个PageObject :: Element列表。 我想要做的是调用看起来像这样的AttributePage.fill_elements:

def fill_elements
  elements = get_search_filter_elements
  elements.each do |element|
     # Now this doesn't work
     element.text = read_from_some_file_for_element_name element.name
  end

有什么方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:0)

首先让我创建一个更完整的页面对象(PO​​)类供参考

假设您在页面上有一些html,其文本字段的ID为“name”

<input type="text" id="name" value="zzz" name="yyy"/>

class MyPage
    include PageObject
    text_field(:name, :id => 'name')
end

myPage = MyPage.new
p myPage.name_element #Output => PageObject::Elements::TextArea
p myPage.name?        #Output => 'true'
p myPage.name         #Output => 'zzz'
myPage.name = 'bbb' #Sets value of text_field to 'bbb'
p myPage.name         #Output => 'bbb'

这四个方法都是动态创建的,因为定义了页面元素'text_field(:name,...)'

你的问题含糊不清,但我想你想知道的是,既然你已经在页面对象中映射了这个元素,那么你将如何得到它的名字,这意味着它的html名称?那么只有当问题的html元素具有'name'属性时才会起作用。如果是这样,就像我上面的例子一样,那么你将使用name_element对象访问它的名字,如下所示:

p myPage.name_element.name #Output => 'yyy'