Skip to content

Commit

Permalink
Update for new chrome log endpoints
Browse files Browse the repository at this point in the history
  • Loading branch information
twalpole committed Jun 14, 2019
1 parent 411f3bf commit 7ba0579
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 16 deletions.
31 changes: 19 additions & 12 deletions lib/capybara/selenium/patches/logs.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,33 @@ module Capybara
module Selenium
module ChromeLogs
LOG_MSG = <<~MSG
Chromedriver 75+ defaults to W3C mode. The W3C webdriver spec does not define a method for accessing log types. \
If you need to access the available log types, in the short term, you can configure you driver to not use the W3C mode. \
This functionality will be returning in Chromedriver 76 or 77 in a W3C compatible way.
Chromedriver 75+ defaults to W3C mode. Please upgrade to chromedriver >= \
75.0.3770.90 if you need to access logs while in W3C compliant mode.
MSG

def method_missing(meth, *) # rubocop:disable Style/MissingRespondToMissing
raise NotImplementedError, LOG_MSG if meth == :available_log_types

super
end

COMMANDS = {
# get_available_log_types: [:get, 'session/:session_id/log/types'],
get_log: [:post, 'session/:session_id/log']
get_available_log_types: [:get, 'session/:session_id/se/log/types'],
get_log: [:post, 'session/:session_id/se/log'],
get_log_legacy: [:post, 'session/:session_id/log']
}.freeze

def commands(command)
COMMANDS[command] || super
end

def available_log_types
types = execute :get_available_log_types
Array(types).map(&:to_sym)
rescue ::Selenium::WebDriver::Error::UnknownCommandError
raise NotImplementedError, LOG_MSG
end

def log(type)
data = execute :get_log, {}, type: type.to_s
data = begin
execute :get_log, {}, type: type.to_s
rescue ::Selenium::WebDriver::Error::UnknownCommandError
execute :get_log_legacy, {}, type: type.to_s
end

Array(data).map do |l|
begin
Expand All @@ -34,6 +39,8 @@ def log(type)
next
end
end
rescue ::Selenium::WebDriver::Error::UnknownCommandError
raise NotImplementedError, LOG_MSG
end
end
end
Expand Down
5 changes: 3 additions & 2 deletions spec/selenium_spec_chrome.rb
Original file line number Diff line number Diff line change
Expand Up @@ -125,10 +125,11 @@ module TestSessions
describe 'log access' do
before { skip 'Only makes sense in W3C mode' if ENV['W3C'] == 'false' }

it 'errors when getting log types' do
it 'does not error getting log types' do
skip if Gem::Version.new(session.driver.browser.capabilities['chrome']['chromedriverVersion'].split[0]) < Gem::Version.new('75.0.3770.90')
expect do
session.driver.browser.manage.logs.available_types
end.to raise_error(NotImplementedError, /Chromedriver 75\+ defaults to W3C mode/)
end.not_to raise_error
end

it 'does not error when getting logs' do
Expand Down
5 changes: 3 additions & 2 deletions spec/selenium_spec_chrome_remote.rb
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,11 @@ module TestSessions
describe 'log access' do
before { skip 'Only makes sense in W3C mode' if ENV['W3C'] == 'false' }

it 'errors when getting log types' do
it 'does not error when getting log types' do
skip if Gem::Version.new(session.driver.browser.capabilities['chrome']['chromedriverVersion'].split[0]) < Gem::Version.new('75.0.3770.90')
expect do
session.driver.browser.manage.logs.available_types
end.to raise_error(NotImplementedError, /Chromedriver 75\+ defaults to W3C mode/)
end.not_to raise_error
end

it 'does not error when getting logs' do
Expand Down

0 comments on commit 7ba0579

Please sign in to comment.