class Selenium::WebDriver::BiDi::LogInspector

Constants

EVENTS
LOG_LEVEL

Public Class Methods

new(driver, browsing_context_ids = nil) click to toggle source
# File lib/selenium/webdriver/bidi/log_inspector.rb, line 42
def initialize(driver, browsing_context_ids = nil)
  unless driver.capabilities.web_socket_url
    raise Error::WebDriverError,
          'WebDriver instance must support BiDi protocol'
  end

  @bidi = driver.bidi
  @bidi.session.subscribe('log.entryAdded', browsing_context_ids)
end

Public Instance Methods

on_console_entry(&block) click to toggle source
# File lib/selenium/webdriver/bidi/log_inspector.rb, line 52
def on_console_entry(&block)
  enabled = log_listeners[:console].any?
  log_listeners[:console] << block
  return if enabled

  on_log do |params|
    type = params['type']
    console_log_events(params) if type.eql?('console')
  end
end
on_javascript_exception(&block) click to toggle source
# File lib/selenium/webdriver/bidi/log_inspector.rb, line 74
def on_javascript_exception(&block)
  enabled = log_listeners[:js_exception].any?
  log_listeners[:js_exception] << block
  log_listeners[:javascript] << block
  return if enabled

  on_log do |params|
    type = params['type']
    level = params['level']

    javascript_log_events(params) if type.eql?('javascript') && level.eql?(LOG_LEVEL[:ERROR])
  end
end
on_javascript_log(&block) click to toggle source
# File lib/selenium/webdriver/bidi/log_inspector.rb, line 63
def on_javascript_log(&block)
  enabled = log_listeners[:javascript].any?
  log_listeners[:javascript] << block
  return if enabled

  on_log do |params|
    type = params['type']
    javascript_log_events(params) if type.eql?('javascript')
  end
end
on_log(&block) click to toggle source
# File lib/selenium/webdriver/bidi/log_inspector.rb, line 88
def on_log(&block)
  on(:entry_added, &block)
end

Private Instance Methods

console_log_events(params) click to toggle source
# File lib/selenium/webdriver/bidi/log_inspector.rb, line 103
def console_log_events(params)
  event = ConsoleLogEntry.new(
    level: params['level'],
    text: params['text'],
    timestamp: params['timestamp'],
    type: params['type'],
    method: params['method'],
    realm: params['realm'],
    args: params['args'],
    stack_trace: params['stackTrace']
  )
  log_listeners[:console].each do |listener|
    listener.call(event)
  end
end
javascript_log_events(params) click to toggle source
# File lib/selenium/webdriver/bidi/log_inspector.rb, line 119
def javascript_log_events(params)
  event = JavascriptLogEntry.new(
    level: params['level'],
    text: params['text'],
    timestamp: params['timestamp'],
    type: params['type'],
    stack_trace: params['stackTrace']
  )
  log_listeners[:javascript].each do |listener|
    listener.call(event)
  end

  return unless params['level'].eql?(LOG_LEVEL[:ERROR])

  log_listeners[:js_exception].each do |listener|
    listener.call(event)
  end
end
log_listeners() click to toggle source
# File lib/selenium/webdriver/bidi/log_inspector.rb, line 99
def log_listeners
  @log_listeners ||= Hash.new { |listeners, kind| listeners[kind] = [] }
end
on(event, &block) click to toggle source
# File lib/selenium/webdriver/bidi/log_inspector.rb, line 94
def on(event, &block)
  event = EVENTS[event] if event.is_a?(Symbol)
  @bidi.callbacks["log.#{event}"] << block
end