2010-04-04 55 views
1

我使用Windows上的Watir當我的腳本嘗試在Firefox上運行,我看到我的控制檯上的錯誤:測試的Watir拋出JsshSocket :: JSReferenceError

JsshSocket::JSReferenceError: Components is not definedReferenceError: Components is not defined 
    C:/xampp/Ruby/lib/ruby/gems/1.8/gems/firewatir-1.6.5/lib/firewatir/jssh_socket.rb:12:in `js_eval' 
    C:/xampp/Ruby/lib/ruby/gems/1.8/gems/firewatir-1.6.5/lib/firewatir/firefox.rb:195:in `goto' 
    C:/xampp/Ruby/lib/ruby/gems/1.8/gems/firewatir-1.6.5/lib/firewatir/firefox.rb:164:in `start' 
    C:/xampp/Ruby/lib/ruby/gems/1.8/gems/commonwatir-1.6.5/lib/watir/browser.rb:71:in `start' 
    ./test.rb:12:in `test_prepare' 

會出現這種情況給其他人?我能做些什麼來解決它?

+0

我需要更多信息。 Windows,Ruby,Firefox版本,鏈接到您使用的jssh插件,導致錯誤的代碼。您也可以將問題發佈到http://groups.google.com/group/watir-general。 – 2010-04-06 08:41:04

回答

1

我還沒有看到過這樣的錯誤。這是失敗的代碼。

def js_eval(str) 
    str.gsub!("\n", "") 
    jssh_socket.send("#{str};\n", 0) 
    value = read_socket() 
    if md = /^(\w+)Error:(.*)$/.match(value) 
     errclassname="JS#{md[1]}Error" 
     unless JsshSocket.const_defined?(errclassname) 
     JsshSocket.const_set(errclassname, Class.new(StandardError)) 
     end 
     raise JsshSocket.const_get(errclassname), md[2] 
    end 
    value 
    end 

你的錯誤是在這個錯誤處理代碼中,這對我來說太過複雜了。如果這個錯誤處理代碼更好,我們會更好地瞭解是什麼導致了您的問題。對不起,我不能有更好的幫助。

+0

jssh_socket.rb的第12行(來自您的堆棧跟蹤)是上面以「raise」開頭的行, – 2010-05-06 03:55:08

0

「組件未定義」消息是一個JavaScript錯誤 - 它從jssh_socket.send操作返回。

This discussion at support.mozilla.com將錯誤描述爲間歇性且無害,這在我使用Mac OS X上的Watir + Firefox時(JSReferenceError來來往往,並且不會阻止我嘗試執行的操作)也是我的經驗。

所以我要做的就是捕捉異常,而忽略它:

browser = Watir::Browser.new 
begin 
    browser.goto 'http://www.thewebsiteiwant.com/' 
rescue JsshSocket::JSReferenceError 
    # do nothing 
end 

,並讓我的Watir程序繼續進行。