Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion rb/lib/selenium/webdriver.rb
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,12 @@ def self.for(*)

def self.logger(**)
level = $DEBUG || ENV.key?('DEBUG') || ENV.key?('SE_DEBUG') ? :debug : :info
@logger ||= WebDriver::Logger.new('Selenium', default_level: level, **)
@logger ||= WebDriver::Logger.new('Selenium', default_level: level, **).tap do |logger|
if ENV.key?('SE_DEBUG')
logger.debug!
logger.stderr!
end
end
end
end # WebDriver
end # Selenium
10 changes: 10 additions & 0 deletions rb/lib/selenium/webdriver/chrome/service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,16 @@ class Service < WebDriver::Service
SHUTDOWN_SUPPORTED = true
DRIVER_PATH_ENV_KEY = 'SE_CHROMEDRIVER'

def initialize(args: nil, **)
if ENV.key?('SE_DEBUG')
args = Array(args.dup)
warn_driver_log_override if args.reject! { |arg| arg.include?('log-level') || arg.include?('silent') }
args << '--verbose'
end

super
end

def log
return @log unless @log.is_a? String

Expand Down
28 changes: 28 additions & 0 deletions rb/lib/selenium/webdriver/common/logger.rb
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,32 @@ def initialize(progname = 'Selenium', default_level: nil, ignored: nil, allowed:
@ignored = Array(ignored)
@allowed = Array(allowed)
@first_warning = false
@level_forced = false
@output_forced = false
end

#
# Forces debug level and prevents it from being overridden.
#
def debug!
@level_forced = true
@logger.level = :debug
end

#
# Forces output to stderr and prevents it from being overridden.
#
def stderr!
@output_forced = true
@logger.reopen($stderr)
end

def level=(level)
if @level_forced
warn('Logger level is forced; ignoring override', id: :logger)
return
end

if level == :info && @logger.level == :info
info(':info is now the default log level, to see additional logging, set log level to :debug')
end
Expand All @@ -71,6 +94,11 @@ def level=(level)
# @param [String] io
#
def output=(io)
if @output_forced
warn('Logger output is forced; ignoring override', id: :logger)
return
end

@logger.reopen(io)
end

Expand Down
6 changes: 6 additions & 0 deletions rb/lib/selenium/webdriver/common/service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,12 @@ def find_driver_path
def env_path
ENV.fetch(self.class::DRIVER_PATH_ENV_KEY, nil)
end

private

def warn_driver_log_override
WebDriver.logger.warn('SE_DEBUG is set; overriding user-specified driver logging settings', id: :se_debug)
end
end # Service
end # WebDriver
end # Selenium
8 changes: 7 additions & 1 deletion rb/lib/selenium/webdriver/common/service_manager.rb
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,13 @@ def uri
def build_process(*command)
WebDriver.logger.debug("Executing Process #{command}", id: :driver_service)
@process = ChildProcess.build(*command)
@io ||= WebDriver.logger.io if WebDriver.logger.debug?
if ENV.key?('SE_DEBUG')
if @io && @io != WebDriver.logger.io
WebDriver.logger.warn('SE_DEBUG is set; overriding user-specified driver log output to use stderr',
id: :se_debug)
end
@io = WebDriver.logger.io
end
@process.io = @io if @io

@process
Expand Down
11 changes: 11 additions & 0 deletions rb/lib/selenium/webdriver/edge/service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,17 @@ class Service < WebDriver::Service
EXECUTABLE = 'msedgedriver'
SHUTDOWN_SUPPORTED = true
DRIVER_PATH_ENV_KEY = 'SE_EDGEDRIVER'

def initialize(args: nil, **)
if ENV.key?('SE_DEBUG')
args = Array(args.dup)
warn_driver_log_override if args.reject! { |arg| arg.include?('log-level') || arg.include?('silent') }
args << '--verbose'
end

super
end

def log
return @log unless @log.is_a? String

Expand Down
23 changes: 21 additions & 2 deletions rb/lib/selenium/webdriver/firefox/service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,33 @@ class Service < WebDriver::Service
SHUTDOWN_SUPPORTED = false
DRIVER_PATH_ENV_KEY = 'SE_GECKODRIVER'

def initialize(path: nil, port: nil, log: nil, args: nil)
args ||= []
def initialize(args: nil, **)
args = Array(args.dup)
unless args.any? { |arg| arg.include?('--connect-existing') || arg.include?('--websocket-port') }
args << '--websocket-port'
args << '0'
end

if ENV.key?('SE_DEBUG')
remove_log_args(args)
args << '-v'
end

super
end

private

def remove_log_args(args)
if (index = args.index('--log'))
args.delete_at(index) # delete '--log'
args.delete_at(index) if args[index] && !args[index].start_with?('-') # delete value if present
warn_driver_log_override
elsif (index = args.index { |arg| arg.start_with?('--log=') })
args.delete_at(index)
warn_driver_log_override
end
end
end # Service
end # Firefox
end # WebDriver
Expand Down
10 changes: 10 additions & 0 deletions rb/lib/selenium/webdriver/ie/service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,16 @@ class Service < WebDriver::Service
EXECUTABLE = 'IEDriverServer'
SHUTDOWN_SUPPORTED = true
DRIVER_PATH_ENV_KEY = 'SE_IEDRIVER'

def initialize(args: nil, **)
if ENV.key?('SE_DEBUG')
args = Array(args.dup)
warn_driver_log_override if args.reject! { |arg| arg.include?('log-level') || arg.include?('silent') }
args << '--log-level=DEBUG'
end

super
end
end # Server
end # IE
end # WebDriver
Expand Down
2 changes: 2 additions & 0 deletions rb/sig/lib/selenium/webdriver/chrome/service.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ module Selenium

SHUTDOWN_SUPPORTED: bool

def initialize: (?args: Array[String]?, **untyped) -> void

def log: () -> untyped
end
end
Expand Down
10 changes: 8 additions & 2 deletions rb/sig/lib/selenium/webdriver/common/logger.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,21 @@ module Selenium

@allowed: Array[Symbol]
@first_warning: bool
@level_forced: bool
@output_forced: bool

@ignored: Array[Symbol]
@logger: ::Logger

def initialize: (?::String progname, ?default_level: Symbol? default_level, ?ignored: Array[Symbol]? ignored, ?allowed: Array[Symbol]? allowed) -> void

def level=: (Symbol level) -> Symbol
def debug!: () -> void

def output=: (String io) -> ::Logger
def stderr!: () -> void

def level=: (Symbol level) -> Symbol?

def output=: (String io) -> ::Logger?

def io: () -> IO

Expand Down
4 changes: 4 additions & 0 deletions rb/sig/lib/selenium/webdriver/common/service.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@ module Selenium
def launch: () -> untyped

def shutdown_supported: () -> untyped

private

def warn_driver_log_override: () -> void
end
end
end
2 changes: 2 additions & 0 deletions rb/sig/lib/selenium/webdriver/edge/service.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ module Selenium

SHUTDOWN_SUPPORTED: bool

def initialize: (?args: Array[String]?, **untyped) -> void

def log: () -> untyped
end
end
Expand Down
4 changes: 4 additions & 0 deletions rb/sig/lib/selenium/webdriver/firefox/service.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ module Selenium
SHUTDOWN_SUPPORTED: false

def initialize: (?path: String?, ?port: Integer?, ?log: untyped?, ?args: Array[String]?) -> void

private

def remove_log_args: (Array[String] args) -> void
end
end
end
Expand Down
2 changes: 2 additions & 0 deletions rb/sig/lib/selenium/webdriver/ie/service.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ module Selenium
EXECUTABLE: String

SHUTDOWN_SUPPORTED: bool

def initialize: (?args: Array[String]?, **untyped) -> void
end
end
end
Expand Down
30 changes: 30 additions & 0 deletions rb/spec/unit/selenium/webdriver/chrome/service_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ module Chrome

before do
allow(Platform).to receive(:assert_executable)
allow(WebDriver.logger).to receive(:debug?).and_return(false)
end

after { described_class.driver_path = nil }
Expand Down Expand Up @@ -81,6 +82,35 @@ module Chrome

expect(service.extra_args).to eq ['--foo', '--bar']
end

context 'when SE_DEBUG is set' do
around do |example|
ENV['SE_DEBUG'] = '1'
example.run
ensure
ENV.delete('SE_DEBUG')
end

it 'adds --verbose flag' do
service = described_class.new

expect(service.extra_args).to include('--verbose')
end

it 'removes conflicting --log-level args' do
service = described_class.new(args: ['--log-level=INFO'])

expect(service.extra_args).to include('--verbose')
expect(service.extra_args).not_to include('--log-level=INFO')
end

it 'removes conflicting --silent args' do
service = described_class.new(args: ['--silent'])

expect(service.extra_args).to include('--verbose')
expect(service.extra_args).not_to include('--silent')
end
end
end

context 'when initializing driver' do
Expand Down
3 changes: 2 additions & 1 deletion rb/spec/unit/selenium/webdriver/common/service_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ module WebDriver

before do
allow(Platform).to receive(:assert_executable)
allow(WebDriver.logger).to receive(:debug?).and_return(false)
stub_const('Selenium::WebDriver::Service::DEFAULT_PORT', 1234)
stub_const('Selenium::WebDriver::Service::EXECUTABLE', 'service')
end
Expand All @@ -48,7 +49,7 @@ module WebDriver
it 'creates Firefox instance' do
service = described_class.firefox(args: args)
expect(service).to be_a(Firefox::Service)
expect(service.args).to eq args
expect(service.args).to eq(args + %w[--websocket-port 0])
end

it 'creates IE instance' do
Expand Down
30 changes: 30 additions & 0 deletions rb/spec/unit/selenium/webdriver/edge/service_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ module Edge

before do
allow(Platform).to receive(:assert_executable)
allow(WebDriver.logger).to receive(:debug?).and_return(false)
described_class.driver_path = nil
end

Expand Down Expand Up @@ -80,6 +81,35 @@ module Edge

expect(service.extra_args).to eq ['--foo', '--bar']
end

context 'when SE_DEBUG is set' do
around do |example|
ENV['SE_DEBUG'] = '1'
example.run
ensure
ENV.delete('SE_DEBUG')
end

it 'adds --verbose flag' do
service = described_class.new

expect(service.extra_args).to include('--verbose')
end

it 'removes conflicting --log-level args' do
service = described_class.new(args: ['--log-level=INFO'])

expect(service.extra_args).to include('--verbose')
expect(service.extra_args).not_to include('--log-level=INFO')
end

it 'removes conflicting --silent args' do
service = described_class.new(args: ['--silent'])

expect(service.extra_args).to include('--verbose')
expect(service.extra_args).not_to include('--silent')
end
end
end

context 'when initializing driver' do
Expand Down
Loading
Loading