Path: blob/trunk/rb/lib/selenium/webdriver/bidi/log_inspector.rb
1865 views
# frozen_string_literal: true12# Licensed to the Software Freedom Conservancy (SFC) under one3# or more contributor license agreements. See the NOTICE file4# distributed with this work for additional information5# regarding copyright ownership. The SFC licenses this file6# to you under the Apache License, Version 2.0 (the7# "License"); you may not use this file except in compliance8# with the License. You may obtain a copy of the License at9#10# http://www.apache.org/licenses/LICENSE-2.011#12# Unless required by applicable law or agreed to in writing,13# software distributed under the License is distributed on an14# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY15# KIND, either express or implied. See the License for the16# specific language governing permissions and limitations17# under the License.1819# This file is automatically generated. Any changes will be lost!2021require_relative 'log/base_log_entry'22require_relative 'log/generic_log_entry'23require_relative 'log/console_log_entry'24require_relative 'log/javascript_log_entry'25require_relative 'log/filter_by'2627module Selenium28module WebDriver29class BiDi30class LogInspector31EVENTS = {32entry_added: 'entryAdded'33}.freeze3435LOG_LEVEL = {36DEBUG: 'debug',37ERROR: 'error',38INFO: 'info',39WARNING: 'warning'40}.freeze4142def initialize(driver, browsing_context_ids = nil)43WebDriver.logger.deprecate('LogInspector class',44'Script class with driver.script',45id: :log_inspector)4647unless driver.capabilities.web_socket_url48raise Error::WebDriverError,49'WebDriver instance must support BiDi protocol'50end5152@bidi = driver.bidi53@bidi.session.subscribe('log.entryAdded', browsing_context_ids)54end5556def on_console_entry(filter_by = nil, &block)57check_valid_filter(filter_by)5859on_log do |params|60type = params['type']61console_log_events(params, filter_by, &block) if type.eql?('console')62end63end6465def on_javascript_log(filter_by = nil, &block)66check_valid_filter(filter_by)6768on_log do |params|69type = params['type']70javascript_log_events(params, filter_by, &block) if type.eql?('javascript')71end72end7374def on_javascript_exception(&block)75on_log do |params|76type = params['type']77javascript_log_events(params, FilterBy.log_level('error'), &block) if type.eql?('javascript')78end79end8081def on_log(filter_by = nil, &block)82unless filter_by.nil?83check_valid_filter(filter_by)8485on(:entry_added) do |params|86yield(params) if params['level'] == filter_by.level87end88return89end9091on(:entry_added, &block)92end9394private9596def on(event, &block)97event = EVENTS[event] if event.is_a?(Symbol)98@bidi.add_callback("log.#{event}", &block)99end100101def check_valid_filter(filter_by)102return if filter_by.nil? || filter_by.instance_of?(FilterBy)103104raise "Pass valid FilterBy object. Received: #{filter_by.inspect}"105end106107def console_log_events(params, filter_by)108event = ConsoleLogEntry.new(109level: params['level'],110text: params['text'],111timestamp: params['timestamp'],112type: params['type'],113method: params['method'],114realm: params['realm'],115args: params['args'],116stack_trace: params['stackTrace']117)118119unless filter_by.nil?120yield(event) if params['level'] == filter_by.level121return122end123124yield(event)125end126127def javascript_log_events(params, filter_by)128event = JavascriptLogEntry.new(129level: params['level'],130text: params['text'],131timestamp: params['timestamp'],132type: params['type'],133stack_trace: params['stackTrace']134)135136unless filter_by.nil?137yield(event) if params['level'] == filter_by.level138return139end140141yield(event)142end143end # LogInspector144end # Bidi145end # WebDriver146end # Selenium147148149