为了保持一致,我尝试使用cheezy的页面对象gem。但是我还没有找到如何深入到这样的元素。这里的情况是,将有多个具有所有相同标记的链接,因此您必须从可识别的内容中深入查看。

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

我要找的代码是这样的,可以点击位于段落内的链接,但它不起作用。
p(:pgraph, id: => 'some-pgraph')
link(:lnk, text: => 'add')

self.pgraph.lnk

有没有办法对page对象执行此操作?
谢谢,
亚当

最佳答案

可以使用块定义具有更复杂定位策略的访问器。
如果还要保留对段落的引用:

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

09-10 21:04