from typing import Any

from selenium.common.exceptions import WebDriverException as WebDriverException
from selenium.webdriver.common.by import By as By
from selenium.webdriver.remote.webdriver import WebDriver as WebDriver
from selenium.webdriver.remote.webelement import WebElement as WebElement

from .abstract_event_listener import AbstractEventListener as AbstractEventListener

class EventFiringWebDriver:
    def __init__(self, driver, event_listener) -> None: ...
    @property
    def wrapped_driver(self): ...
    def get(self, url) -> None: ...
    def back(self) -> None: ...
    def forward(self) -> None: ...
    def execute_script(self, script, *args): ...
    def execute_async_script(self, script, *args): ...
    def close(self) -> None: ...
    def quit(self) -> None: ...
    def find_element(self, by=..., value: Any | None = ...): ...
    def find_elements(self, by=..., value: Any | None = ...): ...
    def find_element_by_id(self, id_): ...
    def find_elements_by_id(self, id_): ...
    def find_element_by_xpath(self, xpath): ...
    def find_elements_by_xpath(self, xpath): ...
    def find_element_by_link_text(self, link_text): ...
    def find_elements_by_link_text(self, text): ...
    def find_element_by_partial_link_text(self, link_text): ...
    def find_elements_by_partial_link_text(self, link_text): ...
    def find_element_by_name(self, name): ...
    def find_elements_by_name(self, name): ...
    def find_element_by_tag_name(self, name): ...
    def find_elements_by_tag_name(self, name): ...
    def find_element_by_class_name(self, name): ...
    def find_elements_by_class_name(self, name): ...
    def find_element_by_css_selector(self, css_selector): ...
    def find_elements_by_css_selector(self, css_selector): ...
    def __setattr__(self, item, value) -> None: ...
    def __getattr__(self, name): ...

class EventFiringWebElement:
    def __init__(self, webelement, ef_driver) -> None: ...
    @property
    def wrapped_element(self): ...
    def click(self) -> None: ...
    def clear(self) -> None: ...
    def send_keys(self, *value) -> None: ...
    def find_element(self, by=..., value: Any | None = ...): ...
    def find_elements(self, by=..., value: Any | None = ...): ...
    def find_element_by_id(self, id_): ...
    def find_elements_by_id(self, id_): ...
    def find_element_by_name(self, name): ...
    def find_elements_by_name(self, name): ...
    def find_element_by_link_text(self, link_text): ...
    def find_elements_by_link_text(self, link_text): ...
    def find_element_by_partial_link_text(self, link_text): ...
    def find_elements_by_partial_link_text(self, link_text): ...
    def find_element_by_tag_name(self, name): ...
    def find_elements_by_tag_name(self, name): ...
    def find_element_by_xpath(self, xpath): ...
    def find_elements_by_xpath(self, xpath): ...
    def find_element_by_class_name(self, name): ...
    def find_elements_by_class_name(self, name): ...
    def find_element_by_css_selector(self, css_selector): ...
    def find_elements_by_css_selector(self, css_selector): ...
    def __setattr__(self, item, value) -> None: ...
    def __getattr__(self, name): ...
