Skip to content

Commit

Permalink
[py] additional type hints in wait.py & command.py (SeleniumHQ#10627)
Browse files Browse the repository at this point in the history
* add additional types to `command.py`

* [py]: adding some types to `wait.py`

* [py]: add alias for wd wait types; ignore `*venv` for flake8

* [py]: Remove unused `InvalidSelectorException` import

Co-authored-by: David Burns <david.burns@theautomatedtester.co.uk>
  • Loading branch information
symonk and AutomatedTester committed Jun 9, 2022
1 parent 27ff586 commit 890f74e
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 86 deletions.
5 changes: 3 additions & 2 deletions py/selenium/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -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]]
158 changes: 79 additions & 79 deletions py/selenium/webdriver/remote/command.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"
13 changes: 8 additions & 5 deletions py/selenium/webdriver/support/wait.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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``.
Expand All @@ -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``.
Expand Down

0 comments on commit 890f74e

Please sign in to comment.