2016-07-26 95 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 –