是否可以向下钻取到具有页面对象的元素

时间:2013-12-06 16:13:35

标签: ruby cucumber watir watir-webdriver page-object-gem

我正在尝试使用Cheezy的页面对象gem来保持一致性。但是我无法找到如何向下钻取这样的元素。这里的情况是,所有相同标签都会有多个链接,因此您必须从可识别的内容中向下钻取。

@browser.p(:text => /#{app_name}/i).link(:text => 'Add').click

我正在寻找的代码是这样的,点击一个段落内的链接,但它不起作用。

p(:pgraph, id: => 'some-pgraph')
link(:lnk, text: => 'add')    

self.pgraph.lnk

有没有办法用页面对象做到这一点?

谢谢, 亚当

1 个答案:

答案 0 :(得分:5)

您可以使用块来定义具有更复杂定位策略的访问者。

如果您还要保留对段落的引用:

p(:pgraph, id: 'some-pgraph')
link(:lnk){ pgraph_element.link_element(text: 'add') }

或者如果您不需要该段落用于其他事情,您可以这样做:

link(:lnk){ paragraph_element(id: 'some-pgraph').link_element(text: 'add') }    

基本上你可以使用nested elements的块来定义类似于你在Watir中的访问器。

请注意,如果要在运行时动态指定id,则始终可以定义单击链接的方法,而不是使用访问者:

def click_link_in(paragraph_id)
  paragraph_element(id: paragraph).link_element(text: 'add').click
end