让黄瓜步骤验证由另一个页面对象设置的变量

时间:2012-10-25 17:15:13

标签: ruby cucumber pageobjects page-object-gem

我正在使用Cheezy的PageObject设置一些黄瓜测试。我有很多像杰夫摩根的书“黄瓜和奶酪”。

现在我有一个页面对象“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之外,一切正常...

2 个答案:

答案 0 :(得分:0)

这应该像添加

一样简单
include RSpec::Matchers

到你的页面对象。

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

的内容
on_page(PublishPage).the_displayed_tag.should include("2")

答案 1 :(得分:0)

每次调用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

希望这有帮助!