class Selenium::WebDriver::Remote::Response

@api private

Attributes

code[R]
payload[RW]

Public Class Methods

new(code, payload = nil) click to toggle source
# File lib/selenium/webdriver/remote/response.rb, line 11
def initialize(code, payload = nil)
  @code    = code
  @payload = payload || {}

  assert_ok
end

Public Instance Methods

[](key) click to toggle source
# File lib/selenium/webdriver/remote/response.rb, line 37
def [](key)
  @payload[key]
end
error() click to toggle source
# File lib/selenium/webdriver/remote/response.rb, line 18
def error
  klass = Error.for_code(@payload['status']) || return

  ex = klass.new(error_message)
  ex.set_backtrace(caller)
  add_backtrace ex

  ex
end
error_message() click to toggle source
# File lib/selenium/webdriver/remote/response.rb, line 28
def error_message
  val = @payload['value']
  msg = val['message'] or return ""

  msg << " (#{ val['class'] })" if val['class']

  msg
end

Private Instance Methods

add_backtrace(ex) click to toggle source
# File lib/selenium/webdriver/remote/response.rb, line 53
def add_backtrace(ex)
  return unless server_trace = @payload['value']['stackTrace']

  backtrace = server_trace.map do |frame|
    next unless frame.kind_of?(Hash)

    file = frame['fileName']
    line = frame['lineNumber']
    meth = frame['methodName']

    if class_name = frame['className']
      file = "#{class_name}(#{file})"
    end

    if meth.nil? || meth.empty?
      meth = 'unknown'
    end

    "[remote server] #{file}:#{line}:in `#{meth}'"
  end.compact

  ex.set_backtrace(backtrace + ex.backtrace)
end
assert_ok() click to toggle source
# File lib/selenium/webdriver/remote/response.rb, line 43
def assert_ok
  if @code.nil? || @code >= 400
    if e = error()
      raise e
    else
      raise Error::ServerError, self
    end
  end
end