Cucumber \ Ruby \ PageObject - 无法从我的模块中调用PageObject :: PageFactory#visit_page

时间:2013-09-27 10:27:16

标签: ruby cucumber page-object-gem

我使用PageObject自动进行黄瓜验收测试,而我目前正在将导航方法重构为模块。我很快就离开了这个项目,那些维护代码的开发人员对于拥有辅助方法的页面感到高兴,并且更喜欢它们在自己的命名空间中。

为了研究这个过程,我创建了一个名为Navigation的模块,并向它添加了一个pageobject调用:

module Navigator

  include PageObject::PageFactory

  def self.send_auth_to_login(user_type)

    visit_page(LoginPage) do |login_page|
      login_page.login_as Users::user_factory(user_type)
    end

  end

end

我这样打电话:

Navigator.send_auth_to_login 'admin'

这是错误:

undefined method `visit_page' for Navigator:Module (NoMethodError)

我用明确的接收器尝试了它:

PageObject::PageFactory.login_page.login_as Users::user_factory(user_type)

但它不起作用。我甚至尝试用类方法使它成为一个类

拥有更多PageObject知识的人能否看到我在这里做错了什么?它在模块外部工作,而不是在模块内部。

感谢。

1 个答案:

答案 0 :(得分:1)

我相信你需要extend而不是include PageFactory - 即你需要:

extend PageObject::PageFactory

Ruby Quicktips很好地解释了差异:

  

您可以使用include或extend将模块的功能混合到一个类中。区别在于:

     
      
  • include使模块的方法可用于类的实例,而
  •   
  • extend使这些方法可用于类本身。
  •   

在您的情况下,您需要模块本身可用的方法,因此您需要使用extend