2016-07-26 96 views
0

我试图执行一个简单的浏览器测试的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 (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>' 

HTTP请求的路径是空是什么意思? watir的新版本中改变了调用参数?

任何人都面临类似的问题?

我的系统是Windows 7 64位,我运行一个代理之后,浏览器已经与代理

---编辑配置---

我已经介绍了结尾的斜线,但我现在得到一个新的错误,也越来越以前的错误,每次我要改变的代码,并将其保存时间得到这个错误

c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/firefox/launcher.rb:90:in `connect_until_stable': unable to obtain stable firefox connection in 60 seconds (127.0.0.1:7055) (Selenium::WebDriver::Error::WebDriverError) 
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/firefox/launcher.rb:55:in `block in launch' 
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/common/socket_lock.rb:43:in `locked' 
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/firefox/launcher.rb:51:in `launch' 
    from c:/ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/firefox/bridge.rb:43: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:8:in `new' 
    from test.rb:8:in `<main>' 

---编辑---

我已经下载了geckodriverv0.10.0https://github.com/mozilla/geckodriver/releases和复制粘贴geckodriver.exe到Firefox的文件夹中,也加入Firefox的文件夹

我安装了selenium-webdriver beta版3.0.0.beta2.1

不过还是我的PATH得到相同的错误

c:/ruby22/lib/ruby/2.2.0/net/http/generic_request.rb:25:in `initialize': HTTP request path is empty (ArgumentError) 

我也尝试安装Firefox ESR版本并添加到路径whi CH也没有工作

---编辑---

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

并介绍print语句如下

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) 
+0

尝试'http:// www.google.com /'(包含尾部斜线)。 – Casper

+0

http://stackoverflow.com/a/17709024/823617 – Casper

+0

现在得到一个新的错误 –

回答

0

尝试在IRB中一次输入这些命令。这将使得它更清楚地发生故障

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

有时候会出现一个简短的窗口,在一个新的FF发布之后(每6周)引入一个重大更改,其中我们没有支持该版本的更新的webdriver gem。

0

由于Firefox 47.0中的错误,您最有可能会看到这种情况。您需要更新到Firefox 47.0.1才能使用Selenium 2.53.4。

+0

我试过升级firefox,但是,我认为还有其他事情发生 –

+0

是的,Firefox 48+需要geckodriver才能正常工作。您可以降级到47.0.1或使用Firefox ESR - https://www.mozilla.org/en-US/firefox/organizations/ – titusfortner

+0

我不使用48+我只使用47.0.1 –