Explain loss of `available_log_types`/`logs` in Chrome driver

This commit is contained in:
Thomas Walpole 2019-06-09 11:16:37 -07:00
parent 9ae7d749f2
commit a71be59131
3 changed files with 42 additions and 0 deletions

View File

@ -1,8 +1,14 @@
# frozen_string_literal: true
require 'capybara/selenium/nodes/chrome_node'
require 'capybara/selenium/patches/logs'
module Capybara::Selenium::Driver::ChromeDriver
def self.extended(base)
bridge = base.send(:bridge)
bridge.extend Capybara::Selenium::ChromeLogs unless bridge.respond_to?(:available_log_types)
end
def fullscreen_window(handle)
within_given_window(handle) do
begin

View File

@ -0,0 +1,20 @@
# frozen_string_literal: true
module Capybara
module Selenium
module ChromeLogs
LOG_MSG = <<~MSG
Chromedriver 75+ defaults to W3C mode. The W3C webdriver spec does not define methods for accessing \
logs or log types. If you need to access the logs, in the short term, you can configure you driver to not use the W3C mode. \
It is unknown how long non-W3C mode will be supported by chromedriver (it won't be supported by selenium-webdriver 4+) \
so you may need to consider other solutions in the near future.
MSG
def method_missing(meth, *) # rubocop:disable Style/MissingRespondToMissing
raise NotImplementedError, LOG_MSG if %i[available_log_types log].include? meth
super
end
end
end
end

View File

@ -121,4 +121,20 @@ RSpec.describe 'Capybara::Session with chrome' do
expect(session).to have_current_path('/form')
end
end
describe 'log access' do
before { skip 'Only makes sense in W3C mode' unless ENV['W3C'] }
it 'errors when getting log types' do
expect do
session.driver.browser.manage.logs.available_types
end.to raise_error(NotImplementedError, /Chromedriver 75\+ defaults to W3C mode/)
end
it 'errors when getting logs' do
expect do
session.driver.browser.manage.logs.get(:browser)
end.to raise_error(NotImplementedError, /Chromedriver 75\+ defaults to W3C mode/)
end
end
end