【问题标题】:Have Cucumber Step Verify Variable Set By A Page Object In Another Step让 Cucumber 步骤在另一个步骤中验证由页面对象设置的变量
【发布时间】:2012-10-25 17:15:13
【问题描述】:

我正在使用 Cheezy 的 PageObject 来设置一些黄瓜测试。我的所有设置都差不多,就像 Jeff Morgan 的书“Cucumber & Cheese”一样。

现在我有一个页面对象“PublishPage”设置,它有一个设置变量@tag 的方法。例如我在文件 publish_page.rb

Class PublishPage
  def tag
  #some steps left out
  @tag = "123"
  end

  def verify_tag
  #some steps left out
  @tag.should include "2"
  end
end

在 Cucumber 步骤中,其中一个步骤我有on_page(PublishPage).tag,然后在另一个步骤中我有on_page(PublishPage).verify_tag。在我的 env.rb 文件中,我有 require 'rspec-expectations'

问题是,当我运行此代码时,我收到一条错误消息,显示为undefined method 'include' for #<PublishPage:xxxxxx>。但是,如果我将 verify_tag 方法中的代码移动到步骤中,一切正常,除了它无权访问@tag...

【问题讨论】:

    标签: ruby cucumber pageobjects page-object-gem


    【解决方案1】:

    这应该像添加一样简单

    include RSpec::Matchers
    

    到您的页面对象。

    另一种选择是通过某种方法公开@tag,然后在你的 Cucumber 步骤中说类似

    on_page(PublishPage).the_displayed_tag.should include("2")
    

    【讨论】:

    • 我现在遇到的一个错误“无法将 nil 转换为字符串”,我确定它与实例变量 @tag 有关。我不确定它为什么这样做,因为 tag 方法在 verify_tag 之前的另一个步骤中运行。
    【解决方案2】:

    每次调用 on_page(PublishPage) 时,都会实例化一个新的页面对象。您很可能会收到“无法将 nil 转换为字符串”错误,因为您正在从新对象引用实例变量,因此它的值是 nil。如果您在调用 page.tag 和 page.verify_tag 之间仅实例化一次页面对象,则不应再出现该错误。

    以这种方式做事将使用页面对象的一个​​实例,允许您在步骤定义之间保持不变。

    When /I publish a tag/ do
       #on_page(PublishPage).tag
       @publish_page = PublishPage.new @browser
       @publish_page.tag
    end
    
    Then /I should have my tag/ do
       @publish_page.verify_tag 
    end
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-26
      • 2018-09-01
      • 2020-05-24
      • 2020-12-05
      • 2015-01-10
      • 1970-01-01
      相关资源
      最近更新 更多