【问题标题】:Is it possible to drill down to an element with page object是否可以深入到具有页面对象的元素
【发布时间】:2013-12-06 16:13:34
【问题描述】:

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

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

我正在寻找的代码类似于点击段落内的链接,但它不起作用。

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

self.pgraph.lnk

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

谢谢, 亚当

【问题讨论】:

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


    【解决方案1】:

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

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

    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
    

    【讨论】:

    • 您知道,如果您可以在声明中使用正则表达式以供以后在处理动态内容时使用,或者在您想一遍又一遍地使用不同的元素类型执行相同元素类型的场景大纲中使用,那会更好名字。 link(:lnk){ paragraph_element(id: #{variable_name}).link_element(text: 'add') }
    • 您总是可以为这些情况创建一个常规方法 - 请参阅更新答案中的示例。
    • 当然,但是页面对象的部分优点在于您不必手动创建所有生成的方法。如果您可以声明一个正则表达式元素并让页面对象生成包括传递变量的方法,那就太好了。可能要求太多,但肯定会很整洁!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多