diff --git a/py/selenium/types.py b/py/selenium/types.py index 299aa64c48998..96d3830ba47ed 100644 --- a/py/selenium/types.py +++ b/py/selenium/types.py @@ -17,7 +17,8 @@ """Selenium type definitions.""" -from typing import Union +import typing -AnyKey = Union[str, int, float] +AnyKey = typing.Union[str, int, float] +WaitExcTypes = typing.Iterable[typing.Type[Exception]] diff --git a/py/selenium/webdriver/remote/command.py b/py/selenium/webdriver/remote/command.py index 61458f8a66913..e705c58088c21 100644 --- a/py/selenium/webdriver/remote/command.py +++ b/py/selenium/webdriver/remote/command.py @@ -30,94 +30,94 @@ class Command: # Keep in sync with org.openqa.selenium.remote.DriverCommand - NEW_SESSION = "newSession" - DELETE_SESSION = "deleteSession" - NEW_WINDOW = "newWindow" - CLOSE = "close" - QUIT = "quit" - GET = "get" - GO_BACK = "goBack" - GO_FORWARD = "goForward" - REFRESH = "refresh" - ADD_COOKIE = "addCookie" - GET_COOKIE = "getCookie" - GET_ALL_COOKIES = "getCookies" - DELETE_COOKIE = "deleteCookie" - DELETE_ALL_COOKIES = "deleteAllCookies" - FIND_ELEMENT = "findElement" - FIND_ELEMENTS = "findElements" - FIND_CHILD_ELEMENT = "findChildElement" - FIND_CHILD_ELEMENTS = "findChildElements" - CLEAR_ELEMENT = "clearElement" - CLICK_ELEMENT = "clickElement" - SEND_KEYS_TO_ELEMENT = "sendKeysToElement" - UPLOAD_FILE = "uploadFile" - W3C_GET_CURRENT_WINDOW_HANDLE = "w3cGetCurrentWindowHandle" - W3C_GET_WINDOW_HANDLES = "w3cGetWindowHandles" - SET_WINDOW_RECT = "setWindowRect" - GET_WINDOW_RECT = "getWindowRect" - SWITCH_TO_WINDOW = "switchToWindow" - SWITCH_TO_FRAME = "switchToFrame" - SWITCH_TO_PARENT_FRAME = "switchToParentFrame" - W3C_GET_ACTIVE_ELEMENT = "w3cGetActiveElement" - GET_CURRENT_URL = "getCurrentUrl" - GET_PAGE_SOURCE = "getPageSource" - GET_TITLE = "getTitle" - W3C_EXECUTE_SCRIPT = "w3cExecuteScript" - W3C_EXECUTE_SCRIPT_ASYNC = "w3cExecuteScriptAsync" - GET_ELEMENT_TEXT = "getElementText" - GET_ELEMENT_TAG_NAME = "getElementTagName" - IS_ELEMENT_SELECTED = "isElementSelected" - IS_ELEMENT_ENABLED = "isElementEnabled" - GET_ELEMENT_RECT = "getElementRect" - GET_ELEMENT_ATTRIBUTE = "getElementAttribute" - GET_ELEMENT_PROPERTY = "getElementProperty" - GET_ELEMENT_VALUE_OF_CSS_PROPERTY = "getElementValueOfCssProperty" - GET_ELEMENT_ARIA_ROLE = "getElementAriaRole" - GET_ELEMENT_ARIA_LABEL = "getElementAriaLabel" - SCREENSHOT = "screenshot" - ELEMENT_SCREENSHOT = "elementScreenshot" - EXECUTE_ASYNC_SCRIPT = "executeAsyncScript" - SET_TIMEOUTS = "setTimeouts" - GET_TIMEOUTS = "getTimeouts" - W3C_MAXIMIZE_WINDOW = "w3cMaximizeWindow" - GET_LOG = "getLog" - GET_AVAILABLE_LOG_TYPES = "getAvailableLogTypes" - FULLSCREEN_WINDOW = "fullscreenWindow" - MINIMIZE_WINDOW = "minimizeWindow" - PRINT_PAGE = 'printPage' + NEW_SESSION: str = "newSession" + DELETE_SESSION: str = "deleteSession" + NEW_WINDOW: str = "newWindow" + CLOSE: str = "close" + QUIT: str = "quit" + GET: str = "get" + GO_BACK: str = "goBack" + GO_FORWARD: str = "goForward" + REFRESH: str = "refresh" + ADD_COOKIE: str = "addCookie" + GET_COOKIE: str = "getCookie" + GET_ALL_COOKIES: str = "getCookies" + DELETE_COOKIE: str = "deleteCookie" + DELETE_ALL_COOKIES: str = "deleteAllCookies" + FIND_ELEMENT: str = "findElement" + FIND_ELEMENTS: str = "findElements" + FIND_CHILD_ELEMENT: str = "findChildElement" + FIND_CHILD_ELEMENTS: str = "findChildElements" + CLEAR_ELEMENT: str = "clearElement" + CLICK_ELEMENT: str = "clickElement" + SEND_KEYS_TO_ELEMENT: str = "sendKeysToElement" + UPLOAD_FILE: str = "uploadFile" + W3C_GET_CURRENT_WINDOW_HANDLE: str = "w3cGetCurrentWindowHandle" + W3C_GET_WINDOW_HANDLES: str = "w3cGetWindowHandles" + SET_WINDOW_RECT: str = "setWindowRect" + GET_WINDOW_RECT: str = "getWindowRect" + SWITCH_TO_WINDOW: str = "switchToWindow" + SWITCH_TO_FRAME: str = "switchToFrame" + SWITCH_TO_PARENT_FRAME: str = "switchToParentFrame" + W3C_GET_ACTIVE_ELEMENT: str = "w3cGetActiveElement" + GET_CURRENT_URL: str = "getCurrentUrl" + GET_PAGE_SOURCE: str = "getPageSource" + GET_TITLE: str = "getTitle" + W3C_EXECUTE_SCRIPT: str = "w3cExecuteScript" + W3C_EXECUTE_SCRIPT_ASYNC: str = "w3cExecuteScriptAsync" + GET_ELEMENT_TEXT: str = "getElementText" + GET_ELEMENT_TAG_NAME: str = "getElementTagName" + IS_ELEMENT_SELECTED: str = "isElementSelected" + IS_ELEMENT_ENABLED: str = "isElementEnabled" + GET_ELEMENT_RECT: str = "getElementRect" + GET_ELEMENT_ATTRIBUTE: str = "getElementAttribute" + GET_ELEMENT_PROPERTY: str = "getElementProperty" + GET_ELEMENT_VALUE_OF_CSS_PROPERTY: str = "getElementValueOfCssProperty" + GET_ELEMENT_ARIA_ROLE: str = "getElementAriaRole" + GET_ELEMENT_ARIA_LABEL: str = "getElementAriaLabel" + SCREENSHOT: str = "screenshot" + ELEMENT_SCREENSHOT: str = "elementScreenshot" + EXECUTE_ASYNC_SCRIPT: str = "executeAsyncScript" + SET_TIMEOUTS: str = "setTimeouts" + GET_TIMEOUTS: str = "getTimeouts" + W3C_MAXIMIZE_WINDOW: str = "w3cMaximizeWindow" + GET_LOG: str = "getLog" + GET_AVAILABLE_LOG_TYPES: str = "getAvailableLogTypes" + FULLSCREEN_WINDOW: str = "fullscreenWindow" + MINIMIZE_WINDOW: str = "minimizeWindow" + PRINT_PAGE: str = "printPage" # Alerts - W3C_DISMISS_ALERT = "w3cDismissAlert" - W3C_ACCEPT_ALERT = "w3cAcceptAlert" - W3C_SET_ALERT_VALUE = "w3cSetAlertValue" - W3C_GET_ALERT_TEXT = "w3cGetAlertText" + W3C_DISMISS_ALERT: str = "w3cDismissAlert" + W3C_ACCEPT_ALERT: str = "w3cAcceptAlert" + W3C_SET_ALERT_VALUE: str = "w3cSetAlertValue" + W3C_GET_ALERT_TEXT: str = "w3cGetAlertText" # Advanced user interactions - W3C_ACTIONS = "actions" - W3C_CLEAR_ACTIONS = "clearActionState" + W3C_ACTIONS: str = "actions" + W3C_CLEAR_ACTIONS: str = "clearActionState" # Screen Orientation - SET_SCREEN_ORIENTATION = "setScreenOrientation" - GET_SCREEN_ORIENTATION = "getScreenOrientation" + SET_SCREEN_ORIENTATION: str = "setScreenOrientation" + GET_SCREEN_ORIENTATION: str = "getScreenOrientation" # Mobile - GET_NETWORK_CONNECTION = "getNetworkConnection" - SET_NETWORK_CONNECTION = "setNetworkConnection" - CURRENT_CONTEXT_HANDLE = "getCurrentContextHandle" - CONTEXT_HANDLES = "getContextHandles" - SWITCH_TO_CONTEXT = "switchToContext" + GET_NETWORK_CONNECTION: str = "getNetworkConnection" + SET_NETWORK_CONNECTION: str = "setNetworkConnection" + CURRENT_CONTEXT_HANDLE: str = "getCurrentContextHandle" + CONTEXT_HANDLES: str = "getContextHandles" + SWITCH_TO_CONTEXT: str = "switchToContext" # Web Components - GET_SHADOW_ROOT = "getShadowRoot" - FIND_ELEMENT_FROM_SHADOW_ROOT = "findElementFromShadowRoot" - FIND_ELEMENTS_FROM_SHADOW_ROOT = "findElementsFromShadowRoot" + GET_SHADOW_ROOT: str = "getShadowRoot" + FIND_ELEMENT_FROM_SHADOW_ROOT: str = "findElementFromShadowRoot" + FIND_ELEMENTS_FROM_SHADOW_ROOT: str = "findElementsFromShadowRoot" # Virtual Authenticator - ADD_VIRTUAL_AUTHENTICATOR = "addVirtualAuthenticator" - REMOVE_VIRTUAL_AUTHENTICATOR = "removeVirtualAuthenticator" - ADD_CREDENTIAL = "addCredential" - GET_CREDENTIALS = "getCredentials" - REMOVE_CREDENTIAL = "removeCredential" - REMOVE_ALL_CREDENTIALS = "removeAllCredentials" - SET_USER_VERIFIED = "setUserVerified" + ADD_VIRTUAL_AUTHENTICATOR: str = "addVirtualAuthenticator" + REMOVE_VIRTUAL_AUTHENTICATOR: str = "removeVirtualAuthenticator" + ADD_CREDENTIAL: str = "addCredential" + GET_CREDENTIALS: str = "getCredentials" + REMOVE_CREDENTIAL: str = "removeCredential" + REMOVE_ALL_CREDENTIALS: str = "removeAllCredentials" + SET_USER_VERIFIED: str = "setUserVerified" diff --git a/py/selenium/webdriver/support/wait.py b/py/selenium/webdriver/support/wait.py index 25639f412a1c9..4952d4c8575c8 100644 --- a/py/selenium/webdriver/support/wait.py +++ b/py/selenium/webdriver/support/wait.py @@ -16,15 +16,18 @@ # under the License. import time +import typing + +from selenium.types import WaitExcTypes from selenium.common.exceptions import NoSuchElementException from selenium.common.exceptions import TimeoutException -POLL_FREQUENCY = 0.5 # How long to sleep in between calls to the method -IGNORED_EXCEPTIONS = (NoSuchElementException,) # exceptions ignored during calls to the method +POLL_FREQUENCY: float = 0.5 # How long to sleep in between calls to the method +IGNORED_EXCEPTIONS: typing.Tuple[typing.Type[Exception]] = (NoSuchElementException,) # default to be ignored. class WebDriverWait: - def __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None): + def __init__(self, driver, timeout: float, poll_frequency: float = POLL_FREQUENCY, ignored_exceptions: typing.Optional[WaitExcTypes] = None): """Constructor, takes a WebDriver instance and timeout in seconds. :Args: @@ -60,7 +63,7 @@ def __repr__(self): return '<{0.__module__}.{0.__name__} (session="{1}")>'.format( type(self), self._driver.session_id) - def until(self, method, message=''): + def until(self, method, message: str = ""): """Calls the method provided with the driver as an argument until the \ return value does not evaluate to ``False``. @@ -86,7 +89,7 @@ def until(self, method, message=''): break raise TimeoutException(message, screen, stacktrace) - def until_not(self, method, message=''): + def until_not(self, method, message: str = ""): """Calls the method provided with the driver as an argument until the \ return value evaluates to ``False``.