【问题标题】:webdriver-user-agent gem classes not included in Rails modelRails 模型中不包含 webdriver-user-agent gem 类
【发布时间】:2014-12-09 13:50:02
【问题描述】:

当我尝试使用webdriver-user-agent gem 时,我无法访问该模块,更不用说它的方法了。

在 Rails.root/Gemfile.lock 中:

GEM
  remote: https://rubygems.org/
  specs:
    # ...
    watir-webdriver (0.6.10)
      selenium-webdriver (>= 2.18.0)
    webdriver-user-agent (7.1)
      facets
      json
      selenium-webdriver
    # ...

在 Rails.root/app/models/some_model.rb 中:

class SomeModel < ActiveRecord::Base
  def some_function
    driver = WebDriver::UserAgent.driver(browser: :firefox, agent: :iphone, orientation: :portrait)
    # other functionality ...
  end
end

加载环境

rails c

使用类:

2.0.0-p353 :001 > s = SomeModel.last
2.0.0-p353 :002 > s.some_function
NameError: uninitialized constant SomeModel::WebDriver

Rails 是否通过在 SomeModel 中查找模块而在错误的位置查找模块?我访问不正确吗?模块不可用:

2.0.0-p353 :003 > Webdriver::UserAgent
NameError: uninitialized constant WebDriver # corrected on edit

我尝试在类文件的顶部包含require 'webdriver-user-agent',然后是include WebDriver——同样的错误,但在加载模型实例时。

我提交了a bug report in the repo,但我确定我在这里做了一些愚蠢的事情......

附加信息:

  • Centos 6.5
  • Rails 4.1.4
  • Ruby 2.0
  • Rubygems 2.2.2

【问题讨论】:

    标签: ruby-on-rails ruby rubygems watir-webdriver


    【解决方案1】:

    您正在尝试查找该模块:

    WebDriver
    

    但是,webdriver-user-agent gem 使用该模块:

    Webdriver
    

    注意小写“d”的区别。类和模块名称区分大小写,这就是找不到常量的原因。

    该功能应该通过更正模块名称来工作:

    class SomeModel < ActiveRecord::Base
      def some_function
        driver = Webdriver::UserAgent.driver(browser: :firefox, agent: :iphone, orientation: :portrait)
        # other functionality ...
      end
    end
    

    【讨论】:

    • 我希望我能说“我不敢相信我是多么愚蠢”,但我可以相信。谢谢你,@justin-ko!
    • Selenium 使用的命名约定是:“Selenium::WebDriver”(大写 D),所以我实际上建议至少部分问题是 gem 决定偏离约定将其命名为“Webdriver”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 2017-05-21
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    相关资源
    最近更新 更多