我在Windows上使用Watir,当我的脚本尝试在Firefox上运行时,我在控制台上看到了这个错误:
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 :(得分: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
您的错误出现在此错误处理代码中,这对我来说过于复杂。如果这个错误处理代码更好,我们会更好地了解导致问题的原因。对不起,我无法提供更好的帮助。
答案 1 :(得分: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计划继续。