SeleniumHQ/selenium · error · WebDriverException
A WebDriver instance must be supplied
Error message
A WebDriver instance must be supplied
What it means
EventFiringWebDriver.__init__ wraps an existing WebDriver instance; the first argument must be a WebDriver instance (isinstance check). Anything else raises WebDriverException.
Source
Thrown at py/selenium/webdriver/support/event_firing_webdriver.py:71
Example:
from selenium.webdriver import Firefox
from selenium.webdriver.support.events import EventFiringWebDriver, AbstractEventListener
class MyListener(AbstractEventListener):
def before_navigate_to(self, url, driver):
print("Before navigate to %s" % url)
def after_navigate_to(self, url, driver):
print("After navigate to %s" % url)
driver = Firefox()
ef_driver = EventFiringWebDriver(driver, MyListener())
ef_driver.get("http://www.google.co.in/")
"""
if not isinstance(driver, WebDriver):
raise WebDriverException("A WebDriver instance must be supplied")
if not isinstance(event_listener, AbstractEventListener):
raise WebDriverException("Event listener must be a subclass of AbstractEventListener")
self._driver = driver
# this is valid, but type checkers don't like dynamically assigning to a method
self._driver._wrap_value = self._wrap_value # type: ignore
self._listener = event_listener
@property
def wrapped_driver(self) -> WebDriver:
"""Returns the WebDriver instance wrapped by this EventsFiringWebDriver."""
return self._driver
def get(self, url: str) -> None:
self._dispatch("navigate_to", (url, self._driver), "get", (url,))
def back(self) -> None:
self._dispatch("navigate_back", (self._driver,), "back", ())
View on GitHub (pinned to aa36b38e69)
Solutions
- Instantiate the driver first, then wrap it.
- Verify isinstance(driver, WebDriver) before constructing the wrapper.
Example fix
# before ef = EventFiringWebDriver(Firefox, MyListener()) # class, not instance # after ef = EventFiringWebDriver(Firefox(), MyListener())
Defensive patterns
Strategy: type-guard
Validate before calling
from selenium.webdriver.remote.webdriver import WebDriver
if not isinstance(driver, WebDriver):
raise TypeError("first arg must be a WebDriver instance") Type guard
from selenium.webdriver.remote.webdriver import WebDriver
def is_webdriver(v) -> bool:
return isinstance(v, WebDriver) Prevention
- Construct the inner driver before wrapping it.
- Keep argument order: driver first, listener second.
When it happens
Trigger: EventFiringWebDriver(None, listener), EventFiringWebDriver(WebDriverClass, listener) (passing the class not an instance), or passing a WebElement/Remote connection instead of a driver.
Common situations: Forgetting to instantiate the inner driver, or passing arguments in the wrong order (listener first).
Related errors
- Event listener must be a subclass of AbstractEventListener
- Event '{event}' not found. Available events: {self._availabl
- Unexpected compiled output format. Expected it to start with
- Unexpected compiled output format. Expected it to start with
- Unexpected compiled output format. Expected it to start with
AI-assisted analysis of SeleniumHQ/selenium@aa36b38e69 (2026-08-14).
Data as JSON: /api/errors/783f987818d8d3a9.
Report an issue: GitHub.