2

我是 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

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

NameError: uninitialized constant UserAgent  

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

4

1 回答 1

2

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

不幸的是,您的代码使用了由 Alister Scott 编写的已折旧的 gem 。您将无法继续使用此 gem,应该寻找解决方法。

更新Alister Scott刚刚宣布,gem 的维护工作已由 Jeff "Cheezy" Morgan 接管,并且可以在Github repo上获得。


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

尝试这样的事情来替换 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 浏览时一样呈现。

于 2013-05-18T06:41:23.890 回答