class Selenium::WebDriver::Remote::Response
def [](key)
def [](key) @payload[key] end
def add_backtrace(ex, server_trace)
def add_backtrace(ex, server_trace) return unless server_trace backtrace = case server_trace when Array backtrace_from_remote(server_trace) when String server_trace.split("\n") end ex.set_backtrace(backtrace + ex.backtrace) end
def assert_ok
def assert_ok e = error raise e if e return unless @code.nil? || @code >= 400 raise Error::ServerError, self end
def backtrace_from_remote(server_trace)
def backtrace_from_remote(server_trace) server_trace.filter_map do |frame| next unless frame.is_a?(Hash) file = frame['fileName'] line = frame['lineNumber'] meth = frame['methodName'] class_name = frame['className'] file = "#{class_name}(#{file})" if class_name meth = 'unknown' if meth.nil? || meth.empty? "[remote server] #{file}:#{line}:in `#{meth}'" end end
def error
def error error, message, backtrace = process_error klass = Error.for_error(error) || return ex = klass.new(message) ex.set_backtrace(caller) add_backtrace ex, backtrace ex end
def initialize(code, payload = nil)
def initialize(code, payload = nil) @code = code @payload = payload || {} assert_ok end
def process_error
def process_error return unless self['value'].is_a?(Hash) [ self['value']['error'], self['value']['message'], self['value']['stacktrace'] ] end