teamcapybara/capybara · error · Capybara::DriverNotFoundError
no driver called #{mode.inspect} was found, available driver
Error message
no driver called #{mode.inspect} was found, available drivers: #{other_drivers.join(', ')} What it means
Sessions resolve their driver lazily; when the requested mode symbol is not registered in Capybara.drivers, Capybara::DriverNotFoundError is raised with the list of registered driver names. The message exists to catch typos and unregistered third-party drivers.
Source
Thrown at lib/capybara/session.rb:104
@app = app
if block_given?
raise 'A configuration block is only accepted when Capybara.threadsafe == true' unless Capybara.threadsafe
yield config
end
@server = if config.run_server && @app && driver.needs_server?
server_options = { port: config.server_port, host: config.server_host, reportable_errors: config.server_errors }
server_options[:extra_middleware] = [Capybara::Server::AnimationDisabler] if config.disable_animation
Capybara::Server.new(@app, **server_options).boot
end
@touched = false
end
def driver
@driver ||= begin
unless Capybara.drivers[mode]
other_drivers = Capybara.drivers.names.map(&:inspect)
raise Capybara::DriverNotFoundError, "no driver called #{mode.inspect} was found, available drivers: #{other_drivers.join(', ')}"
end
driver = Capybara.drivers[mode].call(app)
driver.session = self if driver.respond_to?(:session=)
driver
end
end
##
#
# Reset the session (i.e. remove cookies and navigate to blank page).
#
# This method does not:
#
# * accept modal dialogs if they are present (Selenium driver now does, others may not)
# * clear browser cache/HTML 5 local storage/IndexedDB/Web SQL database/etc.
# * modify state of the driver/underlying browser in any other way
#
# as doing so will result in performance downsides and it's not needed to do everything from the list above for most apps.View on GitHub (pinned to 15b5fdb76e)
Solutions
- Print Capybara.drivers.names and fix the symbol to a registered driver (built-ins include :rack_test, :selenium, :selenium_headless)
- Register the driver before first use: Capybara.register_driver(:headless_chrome) { |app| ... } in a file loaded by spec_helper/rails_helper
- If a gem provides the driver (cuprite, apparition), require it and follow its registration docs; verify the gem is in the CI bundle
Example fix
# before
Capybara.default_driver = :headless_chrome # never registered
# after
Capybara.register_driver :headless_chrome do |app|
Capybara::Selenium::Driver.new(app, browser: :chrome,
options: Selenium::WebDriver::Chrome::Options.new(args: ['--headless=new']))
end
Capybara.default_driver = :headless_chrome Defensive patterns
Strategy: validation
Validate before calling
def driver_registered?(name)
Capybara.drivers.names.include?(name)
end
raise Capybara::DriverNotFoundError,
"#{Capybara.default_driver} not registered. Have: #{Capybara.drivers.names.join(', ')}" unless driver_registered?(Capybara.default_driver) Try / catch
begin page.driver rescue Capybara::DriverNotFoundError => e warn e.message # lists available drivers; fix the symbol or register it raise end
Prevention
- Load driver registration from spec_helper before any example runs
- Add a smoke spec asserting the configured default_driver is registered
- Audit driver symbols whenever adding or removing driver gems
When it happens
Trigger: Capybara::Session.new(:selenium_firfox, app) (typo); Capybara.default_driver = :poltergeist after removing the poltergeist gem; using :cuprite/:apparition/:webkit without requiring the gem that registers it; registering the driver after the session/driver was first accessed.
Common situations: Replacing an abandoned driver (poltergeist/capybara-webkit) with cuprite while specs still name the old symbol; driver registration code in a file CI does not load; spring/forked runners skipping registration; typos in env-driven driver selection.
Related errors
- rack-test requires a rack application, but none was given
- Capybara.disable_animation supports either a String (the css
- Capybara.app_host should be set to a url (http://www.example
- Capybara.default_host should be set to a url (http://www.exa
AI-assisted analysis of teamcapybara/capybara@15b5fdb76e (2026-08-21).
Data as JSON: /api/errors/24c0200484baeb98.
Report an issue: GitHub.