我使用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知识的人能否看到我在这里做错了什么?它在模块外部工作,而不是在模块内部。
感谢。
答案 0 :(得分:1)
我相信你需要extend
而不是include
PageFactory - 即你需要:
extend PageObject::PageFactory
Ruby Quicktips很好地解释了差异:
您可以使用include或extend将模块的功能混合到一个类中。区别在于:
- include使模块的方法可用于类的实例,而
- extend使这些方法可用于类本身。
在您的情况下,您需要模块本身可用的方法,因此您需要使用extend
。