Ruby Watir webdriver未按预期工作

Ruby Watir webdriver未按预期工作,ruby,selenium-webdriver,watir,watir-webdriver,Ruby,Selenium Webdriver,Watir,Watir Webdriver,我试图执行一个简单的浏览器测试 require 'rubygems' require 'watir-webdriver' b = Watir::Browser.new :firefox b.goto 'http://www.google.com/' 浏览器立即启动并关闭,引发以下错误 c:/ruby22/lib/ruby/2.2.0/net/http/generic_request.rb:25:in `initialize': HTTP request path is empty (Argum

我试图执行一个简单的浏览器测试

require 'rubygems'
require 'watir-webdriver'
b = Watir::Browser.new :firefox
b.goto 'http://www.google.com/'
浏览器立即启动并关闭,引发以下错误

c:/ruby22/lib/ruby/2.2.0/net/http/generic_request.rb:25:in `initialize': HTTP request path is empty (ArgumentError)
    from c:/ruby22/lib/ruby/2.2.0/net/http/request.rb:14:in `initialize'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/remote/http/default.rb:95:in `new'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/remote/http/default.rb:95:in `new_request_for'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/remote/http/default.rb:57:in `request'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/remote/http/default.rb:88:in `request'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/remote/http/common.rb:59:in `call'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/remote/bridge.rb:649:in `raw_execute'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/remote/bridge.rb:123:in `create_session'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/remote/bridge.rb:87:in `initialize'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/firefox/bridge.rb:55:in `initialize'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/common/driver.rb:53:in `new'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/common/driver.rb:53:in `for'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver.rb:84:in `for'
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/watir-webdriver-0.9.1/lib/watir-webdriver/browser.rb:46:in `initialize'
    from test.rb:3:in `new'
    from test.rb:3:in `<main>'
我还尝试安装Firefox ESR版本,并将其添加到PATH,但该路径也不起作用

---编辑---

我打开了文件c:/ruby22/lib/ruby/2.2.0/net/http/generic_request.rb

并介绍了如下打印语句

print "\n"
print uri_or_path

if URI === uri_or_path then
  print "\ncoming to if part\n"
  @uri = uri_or_path.dup
  host = @uri.hostname.dup
  host << ":".freeze << @uri.port.to_s if @uri.port != @uri.default_port
  @path = uri_or_path.request_uri
  raise ArgumentError, "no HTTP request path given" unless @path
else
  print "\ncoming to else part\n"
  @uri = nil
  host = nil
  raise ArgumentError, "no HTTP request path given" unless uri_or_path
  raise ArgumentError, "HTTP request path is empty" if uri_or_path.empty?
  @path = uri_or_path.dup
end

尝试在IRB中输入这些命令,每次输入一行。这将使失败发生的地方更加清晰

您最初的错误表明它在第3行失败,在上面的代码中,它尝试创建浏览器对象的新实例(同时启动firefox,然后尝试将浏览器对象连接到实际浏览器)。如果这不起作用,通常是因为您没有使用支持浏览器的webdriver版本。也许您有一个全新的firefox,需要更新webdriver


有时,在新的FF发布后(每6周一次)会有一个简短的窗口,其中引入了一个突破性的更改,我们没有更新的webdriver gem来支持该版本。

很可能是因为Firefox 47.0中的一个bug。您需要更新到Firefox 47.0.1才能与Selenium 2.53.4配合使用。

请尝试
http://www.google.com/
(包括尾随斜杠)。立即获取新错误请参见此处:当您遇到不理解的奇怪错误时,请用谷歌搜索它。在许多情况下,其他人已经有了这个问题。谷歌是你寻找漏洞的秘密武器。我试着升级firefox,但我认为还有其他事情发生,Firefox48+需要geckodriver才能工作。您可以降级到47.0.1或使用Firefox ESR-我没有使用48+我只使用47.0.1我还尝试安装ESR版本,并在Firefox文件夹中复制粘贴的
geckodriver.exe
,并将Firefox文件夹添加到路径,但我再次得到
路径为空(ArgumentError)
geckodriver是48+所需的。如果您使用的是47.0.1,Watir 0.9.3和Selenium 2.53.4将在Windows上运行。如果这种组合不起作用,不要使用
net/http
来模仿,只需设置
$DEBUG=true
并复制输出即可。
c:/ruby22/lib/ruby/2.2.0/net/http/generic_request.rb:25:in `initialize': HTTP request path is empty (ArgumentError)
print "\n"
print uri_or_path

if URI === uri_or_path then
  print "\ncoming to if part\n"
  @uri = uri_or_path.dup
  host = @uri.hostname.dup
  host << ":".freeze << @uri.port.to_s if @uri.port != @uri.default_port
  @path = uri_or_path.request_uri
  raise ArgumentError, "no HTTP request path given" unless @path
else
  print "\ncoming to else part\n"
  @uri = nil
  host = nil
  raise ArgumentError, "no HTTP request path given" unless uri_or_path
  raise ArgumentError, "HTTP request path is empty" if uri_or_path.empty?
  @path = uri_or_path.dup
end
/session
coming to else part


coming to else part

/shutdown
coming to else part
c:/ruby22/lib/ruby/2.2.0/net/http/generic_request.rb:29:in `initialize': HTTP request path is empty (ArgumentError)