【问题标题】:RubyMine - NoMethodError: Undefined method 'get' for nil:nilClass - Webdriver UserAgentRubyMine - NoMethodError:nil:nilClass 的未定义方法'get' - Webdriver UserAgent
【发布时间】:2013-05-17 16:27:04
【问题描述】:

我是 RubyMine 的新手,正在尝试调试一个不是我自己编写的项目。

当我运行 Project.feature 时出现错误,它在第一行“鉴于我访问此网站”处停止。

"NoMethodError: Undefined method 'get' for nil:nilClass" in filepath/Common_steps_json.rb:14 in '/^I go to this website$' 

转到提供的链接,它将我引导到我编写的代码所在的 Common_steps_json.rb 文件

Given /^I go to this website$/ do
@driver.get 'https://www.somewebsite.com/field1/field2/'
sleep 3
end

我相信这是使用 Selenium-Webdriver 导航到 URL 的正确格式。所以这提示我检查环境文件 env.rb 以查看驱动程序是如何被调用的。我在那里找到了这个。

require "selenium-webdriver"
require "webdriver-user-agent"
.
.
. 
Before('@driver_iphone_portrait') do
@driver = UserAgent.driver(:browser => :firefox, :agent => :iphone, :orientation =>      :portrait)
@base_url = 'https://www.somewebsite.com/'
@driver.manage.timeouts.implicit_wait = 2
@verification_errors = []
end

我检查了这个link 以确保正确调用了 selenium webdriver 用户代理,但我不太确定它是否正确。我使用 Interactive Ruby 来查看是否可以使用 UserAgent.Driver 格式调用驱动程序,但它遇到了错误

NameError: uninitialized constant UserAgent  

如果有人对如何正确格式化 RubyMine 的 UserAgent 有任何建议,我将不胜感激。谢谢!

【问题讨论】:

    标签: ruby selenium-webdriver user-agent rubymine


    【解决方案1】:

    您的代码似乎正在尝试使用 Firefox 运行一些测试,该配置文件使用用户代理属性来模拟 iPhone。

    很遗憾,您的代码使用的是由 Alister Scott 编写的 depreciated gem。您将无法继续使用此 gem,应该寻找解决方法。

    更新 Alister Scott just announced that the maintenance of the gem has been taken over by Jeff "Cheezy" Morgan,可通过Github repo 获得。


    事实上,看起来这是一个非常简单且标准的 gem 包装器,您可以使用它而无需所有含糖包装器的优点。实际上,您可以在 WebDriver Profile setup 中轻松配置此设置

    尝试这样的方法来替换 UserAgent 字符串(也去掉 require 'webdriver-user-agent' 行):

    profile = Selenium::WebDriver::Firefox::Profile.new
    profile["general.useragent.override"] = "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3"
    @driver = Selenium::WebDriver.for :firefox, :profile => profile
    

    这应该会创建@driver 对象并允许您使用get 方法使用Firefox 浏览器打开网站。浏览器应该在请求的标头中发送您在代码中指定的用户代理,并且您的网页应该像 iPhone 正在浏览时一样呈现。

    【讨论】:

    • 谢谢bgoad!我不知道代码中使用的 gem 已贬值。解决方法非常出色,可以将 @driver 设置为像 Iphone 一样显示网页。
    猜你喜欢
    • 2013-12-26
    • 1970-01-01
    • 2013-09-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    相关资源
    最近更新 更多