teamcapybara/capybara · error · NotImplementedError
Chromedriver 75+ defaults to W3C mode. Please upgrade to chr
Error message
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.
What it means
Capybara patches the Selenium Chrome driver bridge to expose manage.logs against chromedriver's se/log endpoints. Chromedriver 75+ defaults to W3C mode and the log endpoints only exist from 75.0.3770.90; when the endpoint reports an unknown command, available_log_types converts Selenium's UnknownCommandError into this NotImplementedError with the upgrade message.
Source
Thrown at lib/capybara/selenium/patches/logs.rb:25
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
COMMANDS = {
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 = 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|
::Selenium::WebDriver::LogEntry.new l.fetch('level', 'UNKNOWN'), l.fetch('timestamp'), l.fetch('message')
rescue KeyError
next
end
rescue ::Selenium::WebDriver::Error::UnknownCommandError
raise NotImplementedError, LOG_MSG
end
endView on GitHub (pinned to 15b5fdb76e)
Solutions
- Upgrade chromedriver to >= 75.0.3770.90, matched to the installed Chrome major version (Selenium Manager, webdrivers gem, or pinned CI images)
- Check which chromedriver is actually running: page.driver.browser.capabilities['chrome']['chromedriverVersion']
- If logs are optional, rescue NotImplementedError and degrade (skip log assertions or fall back to CDP Runtime.consoleAPICalled)
- Pin chrome and chromedriver together in CI so the versions cannot drift
Example fix
# before log_types = page.driver.browser.manage.logs.available_log_types # after def chromedriver_log_types page.driver.browser.manage.logs.available_log_types rescue NotImplementedError [] # chromedriver without se/log support in W3C mode end log_types = chromedriver_log_types # plus: let Selenium Manager / webdrivers keep chromedriver matched to Chrome
Defensive patterns
Strategy: fallback
Validate before calling
def chromedriver_supports_logs?
version = page.driver.browser.capabilities
.dig('chrome', 'chromedriverVersion').to_s.split.first
Gem::Version.new(version) >= Gem::Version.new('75.0.3770.90')
rescue StandardError
false
end
log_types = page.driver.browser.manage.logs.available_log_types if chromedriver_supports_logs? Try / catch
def safe_available_log_types page.driver.browser.manage.logs.available_log_types rescue NotImplementedError, Selenium::WebDriver::Error::UnknownCommandError Capybara.logger&.warn 'chromedriver log endpoint unavailable' [] end
Prevention
- Let Selenium Manager or the webdrivers gem supply a chromedriver matched to installed Chrome
- Wrap every manage.logs call in one helper that rescues NotImplementedError
- Add a CI boot check asserting chromedriver >= 75.0.3770.90 when log assertions are required
When it happens
Trigger: Calling page.driver.browser.manage.logs.available_log_types with a chromedriver older than 75.0.3770.90 running in W3C mode, or a chromedriver/headless-shell build where the se/log endpoints are unavailable; also triggered indirectly by console-log helper gems that enumerate log types.
Common situations: Upgrading selenium-webdriver/Capybara while CI keeps a stale pinned chromedriver; Docker images with mismatched chrome/chromedriver versions; headless-shell or Chrome-for-Testing images lacking logging endpoints; log assertions written before the W3C default flip.
Related errors
- You may only upload files: #{local_file.inspect}
- Unknown keys type
- Window size not stable within #{seconds} seconds.
AI-assisted analysis of teamcapybara/capybara@15b5fdb76e (2026-08-21).
Data as JSON: /api/errors/1cca5557745eeb26.
Report an issue: GitHub.