Unable to Locate Driver Error
Troubleshooting missing path to driver executable.
The W3C WebDriver specification defines the errors a driver can return.
Each language binding turns them into its own exception (or error) class, and the names are not always the same.
Kotlin uses the Java classes, the Ruby classes are in Selenium::WebDriver::Error, and the JavaScript classes
are in the selenium-webdriver/lib/error module.
| W3C error | Java | Python | CSharp | Ruby | JavaScript |
|---|---|---|---|---|---|
| detached shadow root | DetachedShadowRootException | DetachedShadowRootException | DetachedShadowRootException | DetachedShadowRootError | DetachedShadowRootError |
| element click intercepted | ElementClickInterceptedException | ElementClickInterceptedException | ElementClickInterceptedException | ElementClickInterceptedError | ElementClickInterceptedError |
| element not interactable | ElementNotInteractableException | ElementNotInteractableException | ElementNotInteractableException | ElementNotInteractableError | ElementNotInteractableError |
| insecure certificate | InsecureCertificateException | InsecureCertificateException | InsecureCertificateException | InsecureCertificateError | InsecureCertificateError |
| invalid argument | InvalidArgumentException | InvalidArgumentException | WebDriverArgumentException | InvalidArgumentError | InvalidArgumentError |
| invalid cookie domain | InvalidCookieDomainException | InvalidCookieDomainException | InvalidCookieDomainException | InvalidCookieDomainError | InvalidCookieDomainError |
| invalid element state | InvalidElementStateException | InvalidElementStateException | InvalidElementStateException | InvalidElementStateError | InvalidElementStateError |
| invalid selector | InvalidSelectorException | InvalidSelectorException | InvalidSelectorException | InvalidSelectorError | InvalidSelectorError |
| invalid session id | NoSuchSessionException | InvalidSessionIdException | WebDriverException | InvalidSessionIdError | NoSuchSessionError |
| javascript error | JavascriptException | JavascriptException | JavaScriptException | JavascriptError | JavascriptError |
| move target out of bounds | MoveTargetOutOfBoundsException | MoveTargetOutOfBoundsException | MoveTargetOutOfBoundsException | MoveTargetOutOfBoundsError | MoveTargetOutOfBoundsError |
| no such alert | NoAlertPresentException | NoAlertPresentException | NoAlertPresentException | NoSuchAlertError | NoSuchAlertError |
| no such cookie | NoSuchCookieException | NoSuchCookieException | NoSuchCookieException | NoSuchCookieError | NoSuchCookieError |
| no such element | NoSuchElementException | NoSuchElementException | NoSuchElementException | NoSuchElementError | NoSuchElementError |
| no such frame | NoSuchFrameException | NoSuchFrameException | NoSuchFrameException | NoSuchFrameError | NoSuchFrameError |
| no such shadow root | NoSuchShadowRootException | NoSuchShadowRootException | NoSuchShadowRootException | NoSuchShadowRootError | NoSuchShadowRootError |
| no such window | NoSuchWindowException | NoSuchWindowException | NoSuchWindowException | NoSuchWindowError | NoSuchWindowError |
| script timeout | ScriptTimeoutException | TimeoutException | WebDriverTimeoutException | ScriptTimeoutError | ScriptTimeoutError |
| session not created | SessionNotCreatedException | SessionNotCreatedException | InvalidOperationException | SessionNotCreatedError | SessionNotCreatedError |
| stale element reference | StaleElementReferenceException | StaleElementReferenceException | StaleElementReferenceException | StaleElementReferenceError | StaleElementReferenceError |
| timeout | TimeoutException | TimeoutException | WebDriverTimeoutException | TimeoutError | TimeoutError |
| unable to capture screen | ScreenshotException | ScreenshotException | InvalidOperationException | UnableToCaptureScreenError | UnableToCaptureScreenError |
| unable to set cookie | UnableToSetCookieException | UnableToSetCookieException | UnableToSetCookieException | UnableToSetCookieError | UnableToSetCookieError |
| unexpected alert open | UnhandledAlertException | UnexpectedAlertPresentException | UnhandledAlertException | UnexpectedAlertOpenError | UnexpectedAlertOpenError |
| unknown command | UnsupportedCommandException | WebDriverException | NotImplementedException | UnknownCommandError | UnknownCommandError |
| unknown error | WebDriverException | WebDriverException | UnknownErrorException | UnknownError | WebDriverError |
| unknown method | UnsupportedCommandException | WebDriverException | UnknownMethodException | UnknownMethodError | UnknownMethodError |
| unsupported operation | UnsupportedCommandException | WebDriverException | UnsupportedOperationException | UnsupportedOperationError | UnsupportedOperationError |
All of these classes inherit from the base exception of their binding (WebDriverException in Java, Python and CSharp,
WebDriverError in Ruby and JavaScript), except for the CSharp InvalidOperationException and NotImplementedException,
which are .NET system exceptions.
CSS and XPath Selectors are sometimes difficult to get correct.
Run your selector through a validator service:
Or use a browser extension to get a known good value:
The element can not be found at the exact moment you attempted to locate it.
An element goes stale when it was previously located, but can not be currently accessed. Elements do not get relocated automatically; the driver creates a reference ID for the element and has a particular place it expects to find it in the DOM. If it can not find the element in the current DOM, any action using that element will result in this exception.
This can happen when:
The DOM has changed
When the page is refreshed or items on the page have moved around, there is still an element with the desired locator on the page, it is just no longer accessible by the element object being used, and the element must be relocated before it can be used again. This is often done in one of two ways:
Always relocate the element every time you go to use it. The likelihood of the element going stale in the microseconds between locating and using the element is small, though possible. The downside is that this is not the most efficient approach, especially when running on a remote grid.
Wrap the Web Element with another object that stores the locator, and caches the located Selenium element. When taking actions with this wrapped object, you can attempt to use the cached object if previously located, and if it is stale, exception can be caught, the element relocated with the stored locator, and the method re-tried. This is more efficient, but it can cause problems if the locator you’re using references a different element (and not the one you want) after the page has changed.
The Context has changed
Element objects are stored for a given context, so if you move to a different context — like a different window or a different frame or iframe — the element reference will still be valid, but will be temporarily inaccessible. In this scenario, it won’t help to relocate the element, because it doesn’t exist in the current context. To fix this, you need to make sure to switch back to the correct context before using the element.
The Page has changed
This scenario is when you haven’t just changed contexts, you have navigated to another page and have destroyed the context in which the element was located. You can’t just relocate it from the current context, and you can’t switch back to an active context where it is valid. If this is the reason for your error, you must both navigate back to the correct location and relocate it.
This exception occurs when Selenium tries to click an element, but the click would instead be received by a different element. Before Selenium will click an element, it checks if the element is visible, unobscured by any other elements, and enabled - if the element is obscured, it will raise this exception.
UI Elements Overlapping
Elements on the UI are typically placed next to each other, but occasionally elements may overlap. For example, a navbar always staying at the top of your window as you scroll a page. If that navbar happens to be covering an element we are trying to click, Selenium might believe it to be visible and enabled, but when you try to click it will throw this exception. Pop-ups and Modals are also common offenders here.
Animations
Elements with animations have the potential to cause this exception as well - it is recommended to wait for animations to cease before attempting to click an element.
Use Explicit Waits
Explicit Waits will likely be your best friend in these instances.
A great way is to use ExpectedCondition.ToBeClickable() with WebDriverWait to wait until the right moment.
Scroll the Element into View
In instances where the element is out of view, but Selenium still registers the element as visible
(e.g. navbars overlapping a section at the top of your screen), you can use the WebDriver.executeScript()
method to execute a javascript function to scroll (e.g. WebDriver.executeScript('window.scrollBy(0,-250)'))
or you can utilize the Actions class with Actions.moveToElement(element).
Sometimes the session you’re trying to access is different than what’s currently available
This usually occurs when the session has been deleted (e.g. driver.quit()) or if the session has changed,
like when the last tab/browser has closed (e.g. driver.close())
Check your script for instances of driver.close() and driver.quit(), and any other possible causes
of closed tabs/browsers. It could be that you are locating an element before you should/can.
This exception occurs when the WebDriver is unable to create a new session for the browser. This often happens due to version mismatches, system-level restrictions, or configuration issues.
chrome://settings/help and download the matching driver from ChromeDriver Downloads.chmod +x /path/to/driver on Linux/macOS).This exception occurs when Selenium tries to interact with an element that is not interactable in its current state.
sendKeys, on an element that doesn’t support it (e.g., <form> or <label>).<td> tag, instead of the intended <input> field.hidden attribute, or being outside the visible viewport.sendKeys with <input> fields only).A shadow root was found earlier, but it is no longer attached to the DOM. This is the shadow root equivalent of a StaleElementReferenceException.
Navigating to a page made the browser show a certificate warning, which is usually the result of an expired, self-signed or otherwise invalid TLS certificate.
acceptInsecureCerts
capability to true in the browser options.The arguments passed to a command are invalid or malformed.
get is not a valid absolute URL (e.g., it is missing https://).A cookie was added for a domain that is different from the domain of the current page.
about:blank or the browser start page).domain value does not match the current page.file:// or data: URL.A command cannot be completed because the element is in a state that does not allow it.
The JavaScript code passed to the driver failed while running in the browser.
An Actions command tried to move the pointer to a point outside of the browser’s viewport.
A command tried to use an alert, confirm or prompt dialog, but no dialog was open.
unhandledPromptBehavior
of the session.No cookie with the given name exists for the current page.
A command to switch to a frame or iframe could not find it.
An element does not have a shadow root.
The window or tab the command was sent to does not exist.
driver.close()) or by the page.The browser could not take a screenshot.
A script passed to the driver did not finish before the script timeout expired.
An operation did not finish before its timeout expired.
The browser could not set a cookie.
secure, and the current page does not use HTTPS.secure cookies.An alert, confirm or prompt dialog is open, and it blocks the command.
unhandledPromptBehavior
capability to make the driver handle unexpected dialogs automatically.The driver does not support the command. Java uses this exception for the unknown command,
unknown method and unsupported operation W3C errors. See the table at the top of this page for the class each binding uses for each of these errors.
An unknown error happened in the driver while processing the command. It is the base exception of most bindings,
so it is also raised for errors that do not have a more specific class.
This exception is not part of the W3C WebDriver specification, and current drivers do not return it.
When an element cannot be interacted with because it is not visible, drivers return an
ElementNotInteractableException instead.
Only the Python binding still defines ElementNotVisibleException, for backward compatibility.
This exception is thrown when the element you are trying to interact with is present in the DOM, but is not visible.
This can occur in several situations:
This issue cannot always be resolved on the user’s end, however when it can it is usually solved by the following: using an explicit wait, or interacting with the page in such a way to make the element visible (scrolling, clicking a button, etc.)
Troubleshooting missing path to driver executable.
Learn more or view the full list of sponsors.