| # Licensed to the Software Freedom Conservancy (SFC) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The SFC licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| """Exceptions that may happen in all the webdriver code.""" |
| |
| from typing import Optional |
| from typing import Sequence |
| |
| |
| class WebDriverException(Exception): |
| """Base webdriver exception.""" |
| |
| def __init__( |
| self, msg: Optional[str] = None, screen: Optional[str] = None, stacktrace: Optional[Sequence[str]] = None |
| ) -> None: |
| super().__init__() |
| self.msg = msg |
| self.screen = screen |
| self.stacktrace = stacktrace |
| |
| def __str__(self) -> str: |
| exception_msg = f"Message: {self.msg}\n" |
| if self.screen: |
| exception_msg += "Screenshot: available via screen\n" |
| if self.stacktrace: |
| stacktrace = "\n".join(self.stacktrace) |
| exception_msg += f"Stacktrace:\n{stacktrace}" |
| return exception_msg |
| |
| |
| class InvalidSwitchToTargetException(WebDriverException): |
| """Thrown when frame or window target to be switched doesn't exist.""" |
| |
| |
| class NoSuchFrameException(InvalidSwitchToTargetException): |
| """Thrown when frame target to be switched doesn't exist.""" |
| |
| |
| class NoSuchWindowException(InvalidSwitchToTargetException): |
| """Thrown when window target to be switched doesn't exist. |
| |
| To find the current set of active window handles, you can get a list |
| of the active window handles in the following way:: |
| |
| print driver.window_handles |
| """ |
| |
| |
| class NoSuchElementException(WebDriverException): |
| """Thrown when element could not be found. |
| |
| If you encounter this exception, you may want to check the following: |
| * Check your selector used in your find_by... |
| * Element may not yet be on the screen at the time of the find operation, |
| (webpage is still loading) see selenium.webdriver.support.wait.WebDriverWait() |
| for how to write a wait wrapper to wait for an element to appear. |
| """ |
| |
| |
| class NoSuchAttributeException(WebDriverException): |
| """Thrown when the attribute of element could not be found. |
| |
| You may want to check if the attribute exists in the particular |
| browser you are testing against. Some browsers may have different |
| property names for the same property. (IE8's .innerText vs. Firefox |
| .textContent) |
| """ |
| |
| |
| class NoSuchShadowRootException(WebDriverException): |
| """Thrown when trying to access the shadow root of an element when it does |
| not have a shadow root attached.""" |
| |
| |
| class StaleElementReferenceException(WebDriverException): |
| """Thrown when a reference to an element is now "stale". |
| |
| Stale means the element no longer appears on the DOM of the page. |
| |
| |
| Possible causes of StaleElementReferenceException include, but not limited to: |
| * You are no longer on the same page, or the page may have refreshed since the element |
| was located. |
| * The element may have been removed and re-added to the screen, since it was located. |
| Such as an element being relocated. |
| This can happen typically with a javascript framework when values are updated and the |
| node is rebuilt. |
| * Element may have been inside an iframe or another context which was refreshed. |
| """ |
| |
| |
| class InvalidElementStateException(WebDriverException): |
| """Thrown when a command could not be completed because the element is in |
| an invalid state. |
| |
| This can be caused by attempting to clear an element that isn't both |
| editable and resettable. |
| """ |
| |
| |
| class UnexpectedAlertPresentException(WebDriverException): |
| """Thrown when an unexpected alert has appeared. |
| |
| Usually raised when an unexpected modal is blocking the webdriver |
| from executing commands. |
| """ |
| |
| def __init__( |
| self, |
| msg: Optional[str] = None, |
| screen: Optional[str] = None, |
| stacktrace: Optional[Sequence[str]] = None, |
| alert_text: Optional[str] = None, |
| ) -> None: |
| super().__init__(msg, screen, stacktrace) |
| self.alert_text = alert_text |
| |
| def __str__(self) -> str: |
| return f"Alert Text: {self.alert_text}\n{super().__str__()}" |
| |
| |
| class NoAlertPresentException(WebDriverException): |
| """Thrown when switching to no presented alert. |
| |
| This can be caused by calling an operation on the Alert() class when |
| an alert is not yet on the screen. |
| """ |
| |
| |
| class ElementNotVisibleException(InvalidElementStateException): |
| """Thrown when an element is present on the DOM, but it is not visible, and |
| so is not able to be interacted with. |
| |
| Most commonly encountered when trying to click or read text of an |
| element that is hidden from view. |
| """ |
| |
| |
| class ElementNotInteractableException(InvalidElementStateException): |
| """Thrown when an element is present in the DOM but interactions with that |
| element will hit another element due to paint order.""" |
| |
| |
| class ElementNotSelectableException(InvalidElementStateException): |
| """Thrown when trying to select an unselectable element. |
| |
| For example, selecting a 'script' element. |
| """ |
| |
| |
| class InvalidCookieDomainException(WebDriverException): |
| """Thrown when attempting to add a cookie under a different domain than the |
| current URL.""" |
| |
| |
| class UnableToSetCookieException(WebDriverException): |
| """Thrown when a driver fails to set a cookie.""" |
| |
| |
| class TimeoutException(WebDriverException): |
| """Thrown when a command does not complete in enough time.""" |
| |
| |
| class MoveTargetOutOfBoundsException(WebDriverException): |
| """Thrown when the target provided to the `ActionsChains` move() method is |
| invalid, i.e. out of document.""" |
| |
| |
| class UnexpectedTagNameException(WebDriverException): |
| """Thrown when a support class did not get an expected web element.""" |
| |
| |
| class InvalidSelectorException(WebDriverException): |
| """Thrown when the selector which is used to find an element does not |
| return a WebElement. |
| |
| Currently this only happens when the selector is an xpath expression |
| and it is either syntactically invalid (i.e. it is not a xpath |
| expression) or the expression does not select WebElements (e.g. |
| "count(//input)"). |
| """ |
| |
| |
| class ImeNotAvailableException(WebDriverException): |
| """Thrown when IME support is not available. |
| |
| This exception is thrown for every IME-related method call if IME |
| support is not available on the machine. |
| """ |
| |
| |
| class ImeActivationFailedException(WebDriverException): |
| """Thrown when activating an IME engine has failed.""" |
| |
| |
| class InvalidArgumentException(WebDriverException): |
| """The arguments passed to a command are either invalid or malformed.""" |
| |
| |
| class JavascriptException(WebDriverException): |
| """An error occurred while executing JavaScript supplied by the user.""" |
| |
| |
| class NoSuchCookieException(WebDriverException): |
| """No cookie matching the given path name was found amongst the associated |
| cookies of the current browsing context's active document.""" |
| |
| |
| class ScreenshotException(WebDriverException): |
| """A screen capture was made impossible.""" |
| |
| |
| class ElementClickInterceptedException(WebDriverException): |
| """The Element Click command could not be completed because the element |
| receiving the events is obscuring the element that was requested to be |
| clicked.""" |
| |
| |
| class InsecureCertificateException(WebDriverException): |
| """Navigation caused the user agent to hit a certificate warning, which is |
| usually the result of an expired or invalid TLS certificate.""" |
| |
| |
| class InvalidCoordinatesException(WebDriverException): |
| """The coordinates provided to an interaction's operation are invalid.""" |
| |
| |
| class InvalidSessionIdException(WebDriverException): |
| """Occurs if the given session id is not in the list of active sessions, |
| meaning the session either does not exist or that it's not active.""" |
| |
| |
| class SessionNotCreatedException(WebDriverException): |
| """A new session could not be created.""" |
| |
| |
| class UnknownMethodException(WebDriverException): |
| """The requested command matched a known URL but did not match any methods |
| for that URL.""" |
| |
| |
| class SeleniumManagerException(WebDriverException): |
| """Raised when an issue interacting with selenium manager occurs.""" |