如何使用复数页面对象小部件



>我正在使用"PageObject"gem和Ruby,并使用"page-object wiki"作为参考创建了一个小部件。

我找不到复数元素,这意味着我找不到元素数组。

如果我的小部件的标签是some-widget,这有效:

some_widget_element(id: 'some-id')

但这不起作用:

some_widget_elements(id: 'some-id')

我正在尝试通过id查找多个元素,这就是页面的结构。

我收到错误:

NoMethodError: undefined method 'new' for nil:NilClass

有什么需要我做/添加到我的小部件类中吗?

注册小部件将定义两者:

  • 页面级访问器以及
  • 嵌套元素定位器

例如,让我们假设以下 HTML:

<html>
<body>
<div>empty</div>
<div>
<some-widget id="some-id">a</some-widget>
<some-widget id="some-id">b</some-widget>
<other id="some-id">c</other>
</div>
<some-widget id="some-id">d</some-widget>
</body>
</html>

同样,我们已经注册了小部件:

class SomeWidgetClass < PageObject::Elements::Element
PageObject.register_widget :some_widget, self, :element
end

嵌套元素

创建的嵌套元素方法采用"{widget_tag}_elements"的形式。

class TestPage
include PageObject
def nested_in_page
some_widget_elements(id: 'some-id', tag_name: 'some-widget')
end
def nested_in_element
div_elements[1].some_widget_elements(id: 'some-id', tag_name: 'some-widget')
end
end
page = TestPage.new(browser)
p page.nested_in_page.map(&:text)
#=> ["a", "b", "d"]
p page.nested_in_element.map(&:text)
#=> ["a", "b"]

页面级访问器

默认情况下,用于返回所有匹配小部件的数组的页面级访问器基于小部件的类名。这与注册小组件时定义的单一访问器方法不同。具体而言,方法名称由以下表达式定义:

def self.plural_form
"#{self.to_s.split('::')[-1].
gsub(/([A-Z]+)([A-Z][a-z])/, '1_2').
gsub(/([a-zd])([A-Z])/, '1_2').
tr("-", "_").
downcase}s"
end

在我们的示例中,SomeWidgetClass类将创建一个some_widget_classs方法:

class TestPage
include PageObject
some_widget_classs(:my_widgets, id: 'some-id', tag_name: 'some-widget')
end
page = TestPage.new(browser)
p page.my_widgets_elements.map(&:text)
#=> ["a", "b", "d"]

您可以通过定义小组件的plural_form来覆盖访问器名称。下面将方法重命名为plural_widgets

class SomeWidgetClass < PageObject::Elements::Element
def self.plural_form
:plural_widgets
end
PageObject.register_widget :some_widget, self, :element
end
class TestPage
include PageObject
plural_widgets(:my_widgets, id: 'some-id', tag_name: 'some-widget')
end

页面的实际用法没有改变 - 即仍然page.my_widgets_elements.

相关内容

  • 没有找到相关文章

最新更新