1

我正在使用 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 知识的人都可以在这里看到我做错了什么吗?它在模块之外工作,而不是在模块内部。

谢谢。

4

1 回答 1

1

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

extend PageObject::PageFactory

Ruby Quicktips 很好地解释了差异:

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

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

在您的情况下,您希望模块本身可以使用这些方法,因此您需要使用extend.

于 2013-09-27T13:14:19.087 回答