class Selenium::WebDriver::DevTools

Public Class Methods

new(url:) click to toggle source
# File lib/selenium/webdriver/devtools.rb, line 30
def initialize(url:)
  @ws = WebSocketConnection.new(url: url)
  @session_id = nil
  start_session
end

Public Instance Methods

callbacks() click to toggle source
# File lib/selenium/webdriver/devtools.rb, line 40
def callbacks
  @ws.callbacks
end
close() click to toggle source
# File lib/selenium/webdriver/devtools.rb, line 36
def close
  @ws.close
end
method_missing(method, *_args) click to toggle source
# File lib/selenium/webdriver/devtools.rb, line 53
def method_missing(method, *_args)
  desired_class = "Selenium::DevTools::V#{Selenium::DevTools.version}::#{method.capitalize}"
  return unless Object.const_defined?(desired_class)

  self.class.class_eval do
    define_method(method) do
      Object.const_get(desired_class).new(self)
    end
  end

  send(method)
end
respond_to_missing?(method, *_args) click to toggle source
# File lib/selenium/webdriver/devtools.rb, line 66
def respond_to_missing?(method, *_args)
  desired_class = "Selenium::DevTools::V#{Selenium::DevTools.version}::#{method.capitalize}"
  Object.const_defined?(desired_class)
end
send_cmd(method, **params) click to toggle source
# File lib/selenium/webdriver/devtools.rb, line 44
def send_cmd(method, **params)
  data = {method: method, params: params.compact}
  data[:sessionId] = @session_id if @session_id
  message = @ws.send_cmd(**data)
  raise Error::WebDriverError, error_message(message['error']) if message['error']

  message
end

Private Instance Methods

error_message(error) click to toggle source
# File lib/selenium/webdriver/devtools.rb, line 80
def error_message(error)
  [error['code'], error['message'], error['data']].join(': ')
end
start_session() click to toggle source
# File lib/selenium/webdriver/devtools.rb, line 73
def start_session
  targets = target.get_targets.dig('result', 'targetInfos')
  page_target = targets.find { |target| target['type'] == 'page' }
  session = target.attach_to_target(target_id: page_target['targetId'], flatten: true)
  @session_id = session.dig('result', 'sessionId')
end