diff --git a/gen_stub.py b/gen_stub.py index edaa923b8..bfc9f3c9d 100644 --- a/gen_stub.py +++ b/gen_stub.py @@ -15,7 +15,7 @@ import sys from datetime import timedelta from pathlib import Path -from typing import Any +from typing import Any, Union, get_args, get_origin from robotlibcore import KeywordBuilder # type: ignore @@ -40,12 +40,46 @@ def get_method_name_for_keyword(keyword_name: str) -> str: return keyword_name -def get_type_string_from_type(argument_type: type) -> str: - if hasattr(argument_type, "__name__"): - return argument_type.__name__ - else: - arg_type_str = str(argument_type.__repr__()).lstrip("typing.") - return arg_type_str.replace("NoneType", "None") +def _format_type_name(tp: Any) -> str: + """Return a short, pyi-compatible name for a plain (non-generic) type.""" + name = getattr(tp, "__name__", None) + if name is not None: + return name + # Fallback for typing constructs that lack __name__ (e.g. typing.List[int]). + origin = get_origin(tp) + if origin is not None and getattr(origin, "__name__", None): + return origin.__name__ + return repr(tp) + + +def _is_union_origin(origin: Any) -> bool: + """True for typing.Union / typing.Optional / PEP 604 types.UnionType.""" + if origin is Union: + return True + # PEP 604 unions (X | Y) have origin types.UnionType (Py>=3.10). + union_type = getattr(sys.modules.get("types"), "UnionType", None) + return union_type is not None and origin is union_type + + +def get_type_string_from_type(argument_type: Any) -> str: + """Render a Robot keyword argument type as a valid PEP 484 annotation. + + The previous implementation returned the bare string ``"Union"`` for any + typing.Union / typing.Optional / PEP 604 union (because each of those + exposes ``__name__ == "Union"``), which produced invalid annotations like + ``locator: Union`` and ``Optional[Optional]`` in the generated ``.pyi``. + """ + origin = get_origin(argument_type) + if _is_union_origin(origin): + args = [a for a in get_args(argument_type) if a is not type(None)] + if not args: + return "Any" + if len(args) == 1: + return get_type_string_from_type(args[0]) + return "Union[" + ", ".join(get_type_string_from_type(a) for a in args) + "]" + if argument_type is type(None): + return "None" + return _format_type_name(argument_type) def get_type_sting_from_argument(argument_string: str, argument_types: dict) -> str: @@ -70,6 +104,21 @@ def get_function_list_from_keywords(keywords): return functions +def _type_already_includes_none(type_str: str) -> bool: + """True when a rendered annotation already accepts ``None``.""" + if type_str in ("None", "Any"): + return True + # PEP 604 form, e.g. "str | None" / "list[int] | None". + if " | None" in type_str or type_str.endswith(" | None"): + return True + # typing.Union / typing.Optional form. + if type_str.startswith("Optional["): + return True + if type_str.startswith("Union[") and "None" in type_str: + return True + return False + + def keyword_line(keyword_arguments, keyword_types, method_name): arguments_list = list() for argument in keyword_arguments: @@ -78,7 +127,11 @@ def keyword_line(keyword_arguments, keyword_types, method_name): default_value = argument[1] arg_type_str = get_type_sting_from_argument(arg_str, keyword_types) if arg_type_str: - if default_value is None: + is_optional = ( + default_value is None + and not _type_already_includes_none(arg_type_str) + ) + if is_optional: arg_type_str = f"Optional[{arg_type_str}]" if arg_type_str == "str" or arg_type_str == "Union[list, str]": default_value = f"'{default_value}'" @@ -109,9 +162,12 @@ def keyword_line(keyword_arguments, keyword_types, method_name): from typing import Any, Optional, Union import selenium +from selenium.webdriver import FirefoxProfile from selenium.webdriver.remote.webdriver import WebDriver from selenium.webdriver.remote.webelement import WebElement +from SeleniumLibrary.utils.types import Secret + class SeleniumLibrary: """ pyi_boilerplate_append = """ @@ -128,7 +184,7 @@ def register_driver(self, driver: WebDriver, alias: str): ... @property def driver(self) -> WebDriver: ... def find_element(self, locator: str, parent: Optional[WebElement] = None): ... - def find_elements(self, locator: str, parent: WebElement = None): ... + def find_elements(self, locator: str, parent: Optional[WebElement] = None): ... def _parse_plugins(self, plugins: Any): ... def _parse_plugin_doc(self): ... def _get_intro_documentation(self): ... diff --git a/src/SeleniumLibrary/__init__.pyi b/src/SeleniumLibrary/__init__.pyi index 45998d55a..9c673af2b 100644 --- a/src/SeleniumLibrary/__init__.pyi +++ b/src/SeleniumLibrary/__init__.pyi @@ -2,84 +2,89 @@ from datetime import timedelta from typing import Any, Optional, Union import selenium +from selenium.webdriver import FirefoxProfile from selenium.webdriver.remote.webdriver import WebDriver from selenium.webdriver.remote.webelement import WebElement +from SeleniumLibrary.utils.types import Secret + class SeleniumLibrary: - def __init__(self, timeout = timedelta(seconds=5.0), implicit_wait = timedelta(seconds=0.0), run_on_failure = 'Capture Page Screenshot', screenshot_root_directory: Optional[Optional] = None, plugins: Optional[Optional] = None, event_firing_webdriver: Optional[Optional] = None, page_load_timeout = timedelta(seconds=300.0), action_chain_delay = timedelta(seconds=0.25), language: Optional[Optional] = None): ... - def add_cookie(self, name: str, value: str, path: Optional[Optional] = None, domain: Optional[Optional] = None, secure: Optional[Optional] = None, expiry: Optional[Optional] = None): ... + def __init__(self, timeout = timedelta(seconds=5.0), implicit_wait = timedelta(seconds=0.0), run_on_failure = 'Capture Page Screenshot', screenshot_root_directory: Optional[str] = None, plugins: Optional[str] = None, event_firing_webdriver: Optional[str] = None, page_load_timeout = timedelta(seconds=300.0), action_chain_delay = timedelta(seconds=0.25), language: Optional[str] = None): ... + def add_cookie(self, name: str, value: str, path: Optional[str] = None, domain: Optional[str] = None, secure: Optional[bool] = None, expiry: Optional[str] = None): ... def add_location_strategy(self, strategy_name: str, strategy_keyword: str, persist: bool = False): ... - def alert_should_be_present(self, text: str = '', action: str = 'ACCEPT', timeout: Optional[Optional] = None): ... - def alert_should_not_be_present(self, action: str = 'ACCEPT', timeout: Optional[Optional] = None): ... - def assign_id_to_element(self, locator: Union, id: str): ... - def capture_element_screenshot(self, locator: Union, filename: str = 'selenium-element-screenshot-{index}.png'): ... + def alert_should_be_present(self, text: str = '', action: str = 'ACCEPT', timeout: Optional[timedelta] = None): ... + def alert_should_not_be_present(self, action: str = 'ACCEPT', timeout: Optional[timedelta] = None): ... + def assign_id_to_element(self, locator: Union[WebElement, str, list], id: str): ... + def capture_element_screenshot(self, locator: Union[WebElement, str, list], filename: str = 'selenium-element-screenshot-{index}.png'): ... def capture_page_screenshot(self, filename: str = 'selenium-screenshot-{index}.png'): ... - def checkbox_should_be_selected(self, locator: Union): ... - def checkbox_should_not_be_selected(self, locator: Union): ... - def choose_file(self, locator: Union, file_path: str): ... - def clear_element_text(self, locator: Union): ... - def click_button(self, locator: Union, modifier: Union = False): ... - def click_element(self, locator: Union, modifier: Union = False, action_chain: bool = False): ... - def click_element_at_coordinates(self, locator: Union, xoffset: int, yoffset: int): ... - def click_image(self, locator: Union, modifier: Union = False): ... - def click_link(self, locator: Union, modifier: Union = False): ... + def checkbox_should_be_selected(self, locator: Union[WebElement, str, list]): ... + def checkbox_should_not_be_selected(self, locator: Union[WebElement, str, list]): ... + def choose_file(self, locator: Union[WebElement, str, list], file_path: str): ... + def clear_element_text(self, locator: Union[WebElement, str, list]): ... + def click_button(self, locator: Union[WebElement, str, list], modifier: Union[bool, str] = False): ... + def click_element(self, locator: Union[WebElement, str, list], modifier: Union[bool, str] = False, action_chain: bool = False): ... + def click_element_at_coordinates(self, locator: Union[WebElement, str, list], xoffset: int, yoffset: int): ... + def click_image(self, locator: Union[WebElement, str, list], modifier: Union[bool, str] = False): ... + def click_link(self, locator: Union[WebElement, str, list], modifier: Union[bool, str] = False): ... def close_all_browsers(self): ... def close_browser(self): ... def close_window(self): ... - def cover_element(self, locator: Union): ... - def create_webdriver(self, driver_name: str, alias: Optional[Optional] = None, kwargs: Optional[Optional] = None, **init_kwargs): ... + def cover_element(self, locator: Union[WebElement, str, list]): ... + def create_webdriver(self, driver_name: str, alias: Optional[str] = None, kwargs: Optional[dict] = None, **init_kwargs): ... def current_frame_should_contain(self, text: str, loglevel: str = 'TRACE'): ... def current_frame_should_not_contain(self, text: str, loglevel: str = 'TRACE'): ... def delete_all_cookies(self): ... def delete_cookie(self, name): ... - def double_click_element(self, locator: Union): ... - def drag_and_drop(self, locator: Union, target: Union): ... - def drag_and_drop_by_offset(self, locator: Union, xoffset: int, yoffset: int): ... - def element_attribute_value_should_be(self, locator: Union, attribute: str, expected: Optional, message: Optional[Optional] = None): ... - def element_should_be_disabled(self, locator: Union): ... - def element_should_be_enabled(self, locator: Union): ... - def element_should_be_focused(self, locator: Union): ... - def element_should_be_visible(self, locator: Union, message: Optional[Optional] = None): ... - def element_should_contain(self, locator: Union, expected: Optional, message: Optional[Optional] = None, ignore_case: bool = False): ... - def element_should_not_be_visible(self, locator: Union, message: Optional[Optional] = None): ... - def element_should_not_contain(self, locator: Union, expected: Optional, message: Optional[Optional] = None, ignore_case: bool = False): ... - def element_text_should_be(self, locator: Union, expected: Optional, message: Optional[Optional] = None, ignore_case: bool = False): ... - def element_text_should_not_be(self, locator: Union, not_expected: Optional, message: Optional[Optional] = None, ignore_case: bool = False): ... + def double_click_element(self, locator: Union[WebElement, str, list]): ... + def drag_and_drop(self, locator: Union[WebElement, str, list], target: Union[WebElement, str, list]): ... + def drag_and_drop_across_frames(self, locator: Union[WebElement, str, list], target: Union[WebElement, str, list], target_frame: Union[WebElement, str, list], source_frame: Optional[Union[WebElement, str, list]] = None): ... + def drag_and_drop_by_offset(self, locator: Union[WebElement, str, list], xoffset: int, yoffset: int): ... + def element_attribute_value_should_be(self, locator: Union[WebElement, str, list], attribute: str, expected: str, message: Optional[str] = None): ... + def element_should_be_disabled(self, locator: Union[WebElement, str, list]): ... + def element_should_be_enabled(self, locator: Union[WebElement, str, list]): ... + def element_should_be_focused(self, locator: Union[WebElement, str, list]): ... + def element_should_be_visible(self, locator: Union[WebElement, str, list], message: Optional[str] = None): ... + def element_should_contain(self, locator: Union[WebElement, str, list], expected: str, message: Optional[str] = None, ignore_case: bool = False): ... + def element_should_not_be_visible(self, locator: Union[WebElement, str, list], message: Optional[str] = None): ... + def element_should_not_contain(self, locator: Union[WebElement, str, list], expected: str, message: Optional[str] = None, ignore_case: bool = False): ... + def element_text_should_be(self, locator: Union[WebElement, str, list], expected: str, message: Optional[str] = None, ignore_case: bool = False): ... + def element_text_should_not_be(self, locator: Union[WebElement, str, list], not_expected: str, message: Optional[str] = None, ignore_case: bool = False): ... def execute_async_javascript(self, *code: Any): ... def execute_javascript(self, *code: Any): ... - def frame_should_contain(self, locator: Union, text: str, loglevel: str = 'TRACE'): ... + def frame_should_contain(self, locator: Union[WebElement, str, list], text: str, loglevel: str = 'TRACE'): ... def get_action_chain_delay(self): ... def get_all_links(self): ... def get_browser_aliases(self): ... def get_browser_ids(self): ... def get_cookie(self, name: str): ... def get_cookies(self, as_dict: bool = False): ... - def get_dom_attribute(self, locator: Union, attribute: str): ... - def get_element_attribute(self, locator: Union, attribute: str): ... - def get_element_count(self, locator: Union): ... - def get_element_size(self, locator: Union): ... - def get_horizontal_position(self, locator: Union): ... - def get_list_items(self, locator: Union, values: bool = False): ... + def get_css_property_value(self, locator: Union[WebElement, str, list], css_property: str): ... + def get_dom_attribute(self, locator: Union[WebElement, str, list], attribute: str): ... + def get_element_attribute(self, locator: Union[WebElement, str, list], attribute: str): ... + def get_element_count(self, locator: Union[WebElement, str, list]): ... + def get_element_size(self, locator: Union[WebElement, str, list]): ... + def get_horizontal_position(self, locator: Union[WebElement, str, list]): ... + def get_list_items(self, locator: Union[WebElement, str, list], values: bool = False): ... def get_location(self): ... def get_locations(self, browser: str = 'CURRENT'): ... - def get_property(self, locator: Union, property: str): ... - def get_selected_list_label(self, locator: Union): ... - def get_selected_list_labels(self, locator: Union): ... - def get_selected_list_value(self, locator: Union): ... - def get_selected_list_values(self, locator: Union): ... + def get_property(self, locator: Union[WebElement, str, list], property: str): ... + def get_selected_list_label(self, locator: Union[WebElement, str, list]): ... + def get_selected_list_labels(self, locator: Union[WebElement, str, list]): ... + def get_selected_list_value(self, locator: Union[WebElement, str, list]): ... + def get_selected_list_values(self, locator: Union[WebElement, str, list]): ... def get_selenium_implicit_wait(self): ... def get_selenium_page_load_timeout(self): ... def get_selenium_speed(self): ... def get_selenium_timeout(self): ... def get_session_id(self): ... def get_source(self): ... - def get_table_cell(self, locator: Union, row: int, column: int, loglevel: str = 'TRACE'): ... - def get_text(self, locator: Union): ... + def get_table_cell(self, locator: Union[WebElement, str, list], row: int, column: int, loglevel: str = 'TRACE'): ... + def get_text(self, locator: Union[WebElement, str, list]): ... def get_title(self): ... - def get_value(self, locator: Union): ... - def get_vertical_position(self, locator: Union): ... - def get_webelement(self, locator: Union): ... - def get_webelements(self, locator: Union): ... + def get_value(self, locator: Union[WebElement, str, list]): ... + def get_vertical_position(self, locator: Union[WebElement, str, list]): ... + def get_webelement(self, locator: Union[WebElement, str, list]): ... + def get_webelements(self, locator: Union[WebElement, str, list]): ... def get_window_handles(self, browser: str = 'CURRENT'): ... def get_window_identifiers(self, browser: str = 'CURRENT'): ... def get_window_names(self, browser: str = 'CURRENT'): ... @@ -88,107 +93,107 @@ class SeleniumLibrary: def get_window_titles(self, browser: str = 'CURRENT'): ... def go_back(self): ... def go_to(self, url): ... - def handle_alert(self, action: str = 'ACCEPT', timeout: Optional[Optional] = None): ... - def input_password(self, locator: Union, password: str, clear: bool = True): ... - def input_text(self, locator: Union, text: str, clear: bool = True): ... - def input_text_into_alert(self, text: str, action: str = 'ACCEPT', timeout: Optional[Optional] = None): ... - def list_selection_should_be(self, locator: Union, *expected: str): ... - def list_should_have_no_selections(self, locator: Union): ... - def location_should_be(self, url: str, message: Optional[Optional] = None): ... - def location_should_contain(self, expected: str, message: Optional[Optional] = None): ... + def handle_alert(self, action: str = 'ACCEPT', timeout: Optional[timedelta] = None): ... + def input_password(self, locator: Union[WebElement, str, list], password: Union[str, Secret], clear: bool = True): ... + def input_text(self, locator: Union[WebElement, str, list], text: Union[str, Secret], clear: bool = True): ... + def input_text_into_alert(self, text: str, action: str = 'ACCEPT', timeout: Optional[timedelta] = None): ... + def list_selection_should_be(self, locator: Union[WebElement, str, list], *expected: str): ... + def list_should_have_no_selections(self, locator: Union[WebElement, str, list]): ... + def location_should_be(self, url: str, message: Optional[str] = None): ... + def location_should_contain(self, expected: str, message: Optional[str] = None): ... def log_location(self): ... def log_source(self, loglevel: str = 'INFO'): ... def log_title(self): ... def maximize_browser_window(self): ... def minimize_browser_window(self): ... - def mouse_down(self, locator: Union): ... - def mouse_down_on_image(self, locator: Union): ... - def mouse_down_on_link(self, locator: Union): ... - def mouse_out(self, locator: Union): ... - def mouse_over(self, locator: Union): ... - def mouse_up(self, locator: Union): ... - def open_browser(self, url: Optional[Optional] = None, browser: str = 'firefox', alias: Optional[Optional] = None, remote_url: Union = False, desired_capabilities: Optional[Union] = None, ff_profile_dir: Optional[Union] = None, options: Optional[Any] = None, service_log_path: Optional[Optional] = None, executable_path: Optional[Optional] = None, service: Optional[Any] = None): ... - def open_context_menu(self, locator: Union): ... + def mouse_down(self, locator: Union[WebElement, str, list]): ... + def mouse_down_on_image(self, locator: Union[WebElement, str, list]): ... + def mouse_down_on_link(self, locator: Union[WebElement, str, list]): ... + def mouse_out(self, locator: Union[WebElement, str, list]): ... + def mouse_over(self, locator: Union[WebElement, str, list]): ... + def mouse_up(self, locator: Union[WebElement, str, list]): ... + def open_browser(self, url: Optional[str] = None, browser: str = 'firefox', alias: Optional[str] = None, remote_url: Union[bool, str] = False, desired_capabilities: Optional[Union[dict, str]] = None, ff_profile_dir: Optional[Union[FirefoxProfile, str]] = None, options: Any = None, service_log_path: Optional[str] = None, executable_path: Optional[str] = None, service: Any = None): ... + def open_context_menu(self, locator: Union[WebElement, str, list]): ... def page_should_contain(self, text: str, loglevel: str = 'TRACE'): ... - def page_should_contain_button(self, locator: Union, message: Optional[Optional] = None, loglevel: str = 'TRACE'): ... - def page_should_contain_checkbox(self, locator: Union, message: Optional[Optional] = None, loglevel: str = 'TRACE'): ... - def page_should_contain_element(self, locator: Union, message: Optional[Optional] = None, loglevel: str = 'TRACE', limit: Optional[Optional] = None): ... - def page_should_contain_image(self, locator: Union, message: Optional[Optional] = None, loglevel: str = 'TRACE'): ... - def page_should_contain_link(self, locator: Union, message: Optional[Optional] = None, loglevel: str = 'TRACE'): ... - def page_should_contain_list(self, locator: Union, message: Optional[Optional] = None, loglevel: str = 'TRACE'): ... - def page_should_contain_radio_button(self, locator: Union, message: Optional[Optional] = None, loglevel: str = 'TRACE'): ... - def page_should_contain_textfield(self, locator: Union, message: Optional[Optional] = None, loglevel: str = 'TRACE'): ... + def page_should_contain_button(self, locator: Union[WebElement, str, list], message: Optional[str] = None, loglevel: str = 'TRACE'): ... + def page_should_contain_checkbox(self, locator: Union[WebElement, str, list], message: Optional[str] = None, loglevel: str = 'TRACE'): ... + def page_should_contain_element(self, locator: Union[WebElement, str, list], message: Optional[str] = None, loglevel: str = 'TRACE', limit: Optional[int] = None): ... + def page_should_contain_image(self, locator: Union[WebElement, str, list], message: Optional[str] = None, loglevel: str = 'TRACE'): ... + def page_should_contain_link(self, locator: Union[WebElement, str, list], message: Optional[str] = None, loglevel: str = 'TRACE'): ... + def page_should_contain_list(self, locator: Union[WebElement, str, list], message: Optional[str] = None, loglevel: str = 'TRACE'): ... + def page_should_contain_radio_button(self, locator: Union[WebElement, str, list], message: Optional[str] = None, loglevel: str = 'TRACE'): ... + def page_should_contain_textfield(self, locator: Union[WebElement, str, list], message: Optional[str] = None, loglevel: str = 'TRACE'): ... def page_should_not_contain(self, text: str, loglevel: str = 'TRACE'): ... - def page_should_not_contain_button(self, locator: Union, message: Optional[Optional] = None, loglevel: str = 'TRACE'): ... - def page_should_not_contain_checkbox(self, locator: Union, message: Optional[Optional] = None, loglevel: str = 'TRACE'): ... - def page_should_not_contain_element(self, locator: Union, message: Optional[Optional] = None, loglevel: str = 'TRACE'): ... - def page_should_not_contain_image(self, locator: Union, message: Optional[Optional] = None, loglevel: str = 'TRACE'): ... - def page_should_not_contain_link(self, locator: Union, message: Optional[Optional] = None, loglevel: str = 'TRACE'): ... - def page_should_not_contain_list(self, locator: Union, message: Optional[Optional] = None, loglevel: str = 'TRACE'): ... - def page_should_not_contain_radio_button(self, locator: Union, message: Optional[Optional] = None, loglevel: str = 'TRACE'): ... - def page_should_not_contain_textfield(self, locator: Union, message: Optional[Optional] = None, loglevel: str = 'TRACE'): ... - def press_key(self, locator: Union, key: str): ... - def press_keys(self, locator: Optional[Union] = None, *keys: str): ... - def print_page_as_pdf(self, filename: str = 'selenium-page-{index}.pdf', background: Optional[Optional] = None, margin_bottom: Optional[Optional] = None, margin_left: Optional[Optional] = None, margin_right: Optional[Optional] = None, margin_top: Optional[Optional] = None, orientation: Optional[Optional] = None, page_height: Optional[Optional] = None, page_ranges: Optional[Optional] = None, page_width: Optional[Optional] = None, scale: Optional[Optional] = None, shrink_to_fit: Optional[Optional] = None): ... + def page_should_not_contain_button(self, locator: Union[WebElement, str, list], message: Optional[str] = None, loglevel: str = 'TRACE'): ... + def page_should_not_contain_checkbox(self, locator: Union[WebElement, str, list], message: Optional[str] = None, loglevel: str = 'TRACE'): ... + def page_should_not_contain_element(self, locator: Union[WebElement, str, list], message: Optional[str] = None, loglevel: str = 'TRACE'): ... + def page_should_not_contain_image(self, locator: Union[WebElement, str, list], message: Optional[str] = None, loglevel: str = 'TRACE'): ... + def page_should_not_contain_link(self, locator: Union[WebElement, str, list], message: Optional[str] = None, loglevel: str = 'TRACE'): ... + def page_should_not_contain_list(self, locator: Union[WebElement, str, list], message: Optional[str] = None, loglevel: str = 'TRACE'): ... + def page_should_not_contain_radio_button(self, locator: Union[WebElement, str, list], message: Optional[str] = None, loglevel: str = 'TRACE'): ... + def page_should_not_contain_textfield(self, locator: Union[WebElement, str, list], message: Optional[str] = None, loglevel: str = 'TRACE'): ... + def press_key(self, locator: Union[WebElement, str, list], key: str): ... + def press_keys(self, locator: Optional[Union[WebElement, str, list]] = None, *keys: str): ... + def print_page_as_pdf(self, filename: str = 'selenium-page-{index}.pdf', background: Optional[bool] = None, margin_bottom: Optional[float] = None, margin_left: Optional[float] = None, margin_right: Optional[float] = None, margin_top: Optional[float] = None, orientation: Optional[str] = None, page_height: Optional[float] = None, page_ranges: Optional[list] = None, page_width: Optional[float] = None, scale: Optional[float] = None, shrink_to_fit: Optional[bool] = None): ... def radio_button_should_be_set_to(self, group_name: str, value: str): ... def radio_button_should_not_be_selected(self, group_name: str): ... - def register_keyword_to_run_on_failure(self, keyword: Optional): ... + def register_keyword_to_run_on_failure(self, keyword: str): ... def reload_page(self): ... def remove_location_strategy(self, strategy_name: str): ... - def scroll_element_into_view(self, locator: Union): ... - def select_all_from_list(self, locator: Union): ... - def select_checkbox(self, locator: Union): ... - def select_frame(self, locator: Union): ... - def select_from_list_by_index(self, locator: Union, *indexes: str): ... - def select_from_list_by_label(self, locator: Union, *labels: str): ... - def select_from_list_by_value(self, locator: Union, *values: str): ... + def scroll_element_into_view(self, locator: Union[WebElement, str, list]): ... + def select_all_from_list(self, locator: Union[WebElement, str, list]): ... + def select_checkbox(self, locator: Union[WebElement, str, list]): ... + def select_frame(self, locator: Union[WebElement, str, list]): ... + def select_from_list_by_index(self, locator: Union[WebElement, str, list], *indexes: str): ... + def select_from_list_by_label(self, locator: Union[WebElement, str, list], *labels: str): ... + def select_from_list_by_value(self, locator: Union[WebElement, str, list], *values: str): ... def select_radio_button(self, group_name: str, value: str): ... def set_action_chain_delay(self, value: timedelta): ... def set_browser_implicit_wait(self, value: timedelta): ... - def set_focus_to_element(self, locator: Union): ... - def set_screenshot_directory(self, path: Optional): ... + def set_focus_to_element(self, locator: Union[WebElement, str, list]): ... + def set_screenshot_directory(self, path: str): ... def set_selenium_implicit_wait(self, value: timedelta): ... def set_selenium_page_load_timeout(self, value: timedelta): ... def set_selenium_speed(self, value: timedelta): ... def set_selenium_timeout(self, value: timedelta): ... def set_window_position(self, x: int, y: int): ... def set_window_size(self, width: int, height: int, inner: bool = False): ... - def simulate_event(self, locator: Union, event: str): ... - def submit_form(self, locator: Optional[Union] = None): ... + def simulate_event(self, locator: Union[WebElement, str, list], event: str): ... + def submit_form(self, locator: Optional[Union[WebElement, str, list]] = None): ... def switch_browser(self, index_or_alias: str): ... - def switch_window(self, locator: Union = MAIN, timeout: Optional[Optional] = None, browser: str = 'CURRENT'): ... - def table_cell_should_contain(self, locator: Union, row: int, column: int, expected: str, loglevel: str = 'TRACE'): ... - def table_column_should_contain(self, locator: Union, column: int, expected: str, loglevel: str = 'TRACE'): ... - def table_footer_should_contain(self, locator: Union, expected: str, loglevel: str = 'TRACE'): ... - def table_header_should_contain(self, locator: Union, expected: str, loglevel: str = 'TRACE'): ... - def table_row_should_contain(self, locator: Union, row: int, expected: str, loglevel: str = 'TRACE'): ... - def table_should_contain(self, locator: Union, expected: str, loglevel: str = 'TRACE'): ... - def textarea_should_contain(self, locator: Union, expected: str, message: Optional[Optional] = None): ... - def textarea_value_should_be(self, locator: Union, expected: str, message: Optional[Optional] = None): ... - def textfield_should_contain(self, locator: Union, expected: str, message: Optional[Optional] = None): ... - def textfield_value_should_be(self, locator: Union, expected: str, message: Optional[Optional] = None): ... - def title_should_be(self, title: str, message: Optional[Optional] = None): ... - def unselect_all_from_list(self, locator: Union): ... - def unselect_checkbox(self, locator: Union): ... + def switch_window(self, locator: Union[list, str] = 'MAIN', timeout: Optional[str] = None, browser: str = 'CURRENT'): ... + def table_cell_should_contain(self, locator: Union[WebElement, str, list], row: int, column: int, expected: str, loglevel: str = 'TRACE'): ... + def table_column_should_contain(self, locator: Union[WebElement, str, list], column: int, expected: str, loglevel: str = 'TRACE'): ... + def table_footer_should_contain(self, locator: Union[WebElement, str, list], expected: str, loglevel: str = 'TRACE'): ... + def table_header_should_contain(self, locator: Union[WebElement, str, list], expected: str, loglevel: str = 'TRACE'): ... + def table_row_should_contain(self, locator: Union[WebElement, str, list], row: int, expected: str, loglevel: str = 'TRACE'): ... + def table_should_contain(self, locator: Union[WebElement, str, list], expected: str, loglevel: str = 'TRACE'): ... + def textarea_should_contain(self, locator: Union[WebElement, str, list], expected: str, message: Optional[str] = None): ... + def textarea_value_should_be(self, locator: Union[WebElement, str, list], expected: str, message: Optional[str] = None): ... + def textfield_should_contain(self, locator: Union[WebElement, str, list], expected: str, message: Optional[str] = None): ... + def textfield_value_should_be(self, locator: Union[WebElement, str, list], expected: str, message: Optional[str] = None): ... + def title_should_be(self, title: str, message: Optional[str] = None): ... + def unselect_all_from_list(self, locator: Union[WebElement, str, list]): ... + def unselect_checkbox(self, locator: Union[WebElement, str, list]): ... def unselect_frame(self): ... - def unselect_from_list_by_index(self, locator: Union, *indexes: str): ... - def unselect_from_list_by_label(self, locator: Union, *labels: str): ... - def unselect_from_list_by_value(self, locator: Union, *values: str): ... - def wait_for_condition(self, condition: str, timeout: Optional[Optional] = None, error: Optional[Optional] = None): ... - def wait_for_expected_condition(self, condition: string, *args, timeout: Optional = 10): ... - def wait_until_element_contains(self, locator: Union, text: str, timeout: Optional[Optional] = None, error: Optional[Optional] = None): ... - def wait_until_element_does_not_contain(self, locator: Union, text: str, timeout: Optional[Optional] = None, error: Optional[Optional] = None): ... - def wait_until_element_is_enabled(self, locator: Union, timeout: Optional[Optional] = None, error: Optional[Optional] = None): ... - def wait_until_element_is_not_visible(self, locator: Union, timeout: Optional[Optional] = None, error: Optional[Optional] = None): ... - def wait_until_element_is_visible(self, locator: Union, timeout: Optional[Optional] = None, error: Optional[Optional] = None): ... - def wait_until_location_contains(self, expected: str, timeout: Optional[Optional] = None, message: Optional[Optional] = None): ... - def wait_until_location_does_not_contain(self, location: str, timeout: Optional[Optional] = None, message: Optional[Optional] = None): ... - def wait_until_location_is(self, expected: str, timeout: Optional[Optional] = None, message: Optional[Optional] = None): ... - def wait_until_location_is_not(self, location: str, timeout: Optional[Optional] = None, message: Optional[Optional] = None): ... - def wait_until_page_contains(self, text: str, timeout: Optional[Optional] = None, error: Optional[Optional] = None): ... - def wait_until_page_contains_element(self, locator: Union, timeout: Optional[Optional] = None, error: Optional[Optional] = None, limit: Optional[Optional] = None): ... - def wait_until_page_does_not_contain(self, text: str, timeout: Optional[Optional] = None, error: Optional[Optional] = None): ... - def wait_until_page_does_not_contain_element(self, locator: Union, timeout: Optional[Optional] = None, error: Optional[Optional] = None, limit: Optional[Optional] = None): ... + def unselect_from_list_by_index(self, locator: Union[WebElement, str, list], *indexes: str): ... + def unselect_from_list_by_label(self, locator: Union[WebElement, str, list], *labels: str): ... + def unselect_from_list_by_value(self, locator: Union[WebElement, str, list], *values: str): ... + def wait_for_condition(self, condition: str, timeout: Optional[timedelta] = None, error: Optional[str] = None): ... + def wait_for_expected_condition(self, condition: str, *args, timeout: float = 10): ... + def wait_until_element_contains(self, locator: Union[WebElement, str, list], text: str, timeout: Optional[timedelta] = None, error: Optional[str] = None): ... + def wait_until_element_does_not_contain(self, locator: Union[WebElement, str, list], text: str, timeout: Optional[timedelta] = None, error: Optional[str] = None): ... + def wait_until_element_is_enabled(self, locator: Union[WebElement, str, list], timeout: Optional[timedelta] = None, error: Optional[str] = None): ... + def wait_until_element_is_not_visible(self, locator: Union[WebElement, str, list], timeout: Optional[timedelta] = None, error: Optional[str] = None): ... + def wait_until_element_is_visible(self, locator: Union[WebElement, str, list], timeout: Optional[timedelta] = None, error: Optional[str] = None): ... + def wait_until_location_contains(self, expected: str, timeout: Optional[timedelta] = None, message: Optional[str] = None): ... + def wait_until_location_does_not_contain(self, location: str, timeout: Optional[timedelta] = None, message: Optional[str] = None): ... + def wait_until_location_is(self, expected: str, timeout: Optional[timedelta] = None, message: Optional[str] = None): ... + def wait_until_location_is_not(self, location: str, timeout: Optional[timedelta] = None, message: Optional[str] = None): ... + def wait_until_page_contains(self, text: str, timeout: Optional[timedelta] = None, error: Optional[str] = None): ... + def wait_until_page_contains_element(self, locator: Union[WebElement, str, list], timeout: Optional[timedelta] = None, error: Optional[str] = None, limit: Optional[int] = None): ... + def wait_until_page_does_not_contain(self, text: str, timeout: Optional[timedelta] = None, error: Optional[str] = None): ... + def wait_until_page_does_not_contain_element(self, locator: Union[WebElement, str, list], timeout: Optional[timedelta] = None, error: Optional[str] = None, limit: Optional[int] = None): ... # methods from library. def add_library_components(self, library_components): ... def get_keyword_names(self): ... @@ -203,7 +208,7 @@ class SeleniumLibrary: @property def driver(self) -> WebDriver: ... def find_element(self, locator: str, parent: Optional[WebElement] = None): ... - def find_elements(self, locator: str, parent: WebElement = None): ... + def find_elements(self, locator: str, parent: Optional[WebElement] = None): ... def _parse_plugins(self, plugins: Any): ... def _parse_plugin_doc(self): ... def _get_intro_documentation(self): ...