【问题标题】:Cucumber\Ruby\PageObject - Can't call PageObject::PageFactory#visit_page from within my moduleCucumber\Ruby\PageObject - 无法从我的模块中调用 PageObject::PageFactory#visit_page
【发布时间】:2013-09-27 21:14:19
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: ruby cucumber page-object-gem


    【解决方案1】:

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

    extend PageObject::PageFactory
    

    Ruby Quicktips 很好地解释了区别:

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

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

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

    【讨论】:

    • 谢谢,这正是解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 2015-01-11
    • 2019-12-07
    • 1970-01-01
    相关资源
    最近更新 更多