Sha256: f8c34d64a34ccc2aead3d0f51263d559568734386772e8896be7108668dde2ca

Contents?: true

Size: 1.59 KB

Versions: 3

Compression:

Stored size: 1.59 KB

Contents

module Webdriver
  class Connection
    def initialize endpoint
      uri = URI(endpoint)
      @http = Net::HTTP.new uri.hostname, uri.port
    end

    def get path, headers={}
      call :get, path, headers
    end

    def post path, headers={}, body=nil
      call :post, path, headers, body
    end

    def post path, headers={}, body=nil
      call :post, path, headers, body
    end

    def call method, path, headers={}, body={}
      path = "/#{path}"
      body_json = body.to_json if body
      Webdriver.debug [method, path, headers, body_json]

      response = case method
      when :get
        @http.get path
      when :post
        @http.post path, body_json
      when :delete
        @http.delete path, body_json
      else
        raise "err"
      end

      response_body = JSON.parse response.body

      status = response_body.dig "status"
      session_id = response_body.dig "sessionId"
      value = response_body.dig "value"

      case status
      when 0
        # POST /session has different response structure than other calls
        if method == :post && path == "/session"
          value.merge("id" => session_id)
        else # everything else works like this
          value
        end
      when 1..nil
        # 10: stale element reference: element is not attached to the page document
        # 11: element not interactable
        error_message = value.dig("message")
        raise "#{status}: #{error_message}"
      else
        if method == :get && path == "/status"
          value
        else
          raise [:unknown, response_body]
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
webdriver-0.8.0 lib/webdriver/connection.rb
webdriver-0.7.0 lib/webdriver/connection.rb
webdriver-0.6.4 lib/webdriver/connection.rb