2013-05-17 41 views
1

我是RubyMine的新手,试图调试一个我自己没写过的项目。RubyMine - NoMethodError:未定义的方法'get'for nil:nilClass - Webdriver UserAgent

运行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 

我相信这是一个使用硒的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以确保硒webdriver的用户代理正确地叫,但我不能肯定它是。我用交互式Ruby来看看我是否能使用UserAgent.Driver格式调用驱动程序,但它遇到了一个错误

NameError: uninitialized constant UserAgent 

如果任何人有关于如何正确格式的UserAgent的RubyMine的任何意见,我将不胜感激。谢谢!

回答

2

它看起来像你的代码试图运行一些测试使用Firefox与配置文件,使用用户代理属性来模拟iPhone。

不幸的是,您的代码使用的是由Alister Scott编写的 depreciated gem。你将无法继续使用这颗宝石,应该寻找解决办法。

UPDATE阿利斯特·斯科特just announced that the maintenance of the gem has been taken over by Jeff "Cheezy" Morgan,并提供对Github repo


事实上,它看起来像这是一个非常简单和标准的宝石包装,你可以聘请没有所有的含糖包装善良。其实,你可以轻松地在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正在浏览时那样呈现。

+1

谢谢bgoad!我不知道代码中使用的宝石是贬值的。该解决方法做了一个辉煌的工作,设置@driver以显示Iphone会显示的网页。 –

相关问题