Sha256: e0d91084f730e91101eb9964537db238209793c689b4e0db3bb498b28b7a9e4d

Contents?: true

Size: 1.79 KB

Versions: 8

Compression:

Stored size: 1.79 KB

Contents

module Selenium
  module WebDriver
    module Remote

      # @api private
      class Response

        attr_reader :code, :payload
        attr_writer :payload

        def initialize(code, payload = nil)
          @code    = code
          @payload = payload || {}

          assert_ok
        end

        def error
          klass = Error.for_code(@payload['status']) || return

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

          ex
        end

        def error_message
          val = @payload['value']

          case val
          when Hash
            msg = val['message'] or return "unknown error"
            msg << " (#{ val['class'] })" if val['class']
          when String
            msg = val
          end

          msg
        end

        def [](key)
          @payload[key]
        end

        private

        def assert_ok
          if @code.nil? || @code >= 400
            if e = error()
              raise e
            else
              raise Error::ServerError, self
            end
          end
        end

        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

      end # Response
    end # Remote
  end # WebDriver
end # Selenium

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
selenium-webdriver-2.15.0 lib/selenium/webdriver/remote/response.rb
selenium-webdriver-2.14.0 lib/selenium/webdriver/remote/response.rb
selenium-webdriver-2.13.0 lib/selenium/webdriver/remote/response.rb
selenium-webdriver-2.12.2 lib/selenium/webdriver/remote/response.rb
selenium-webdriver-2.12.1 lib/selenium/webdriver/remote/response.rb
selenium-webdriver-2.12.0 lib/selenium/webdriver/remote/response.rb
selenium-webdriver-2.10.0 lib/selenium/webdriver/remote/response.rb
selenium-webdriver-2.9.1 lib/selenium/webdriver/remote/response.rb