""" Collection of waiting statements. """ from selenium.webdriver.remote.webdriver import WebDriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By def wait_for_url_change(driver: WebDriver, old_url: str, timeout: int = 10) -> None: WebDriverWait(driver, timeout).until(lambda d: d.current_url != old_url) def wait_until_url_contains(driver: WebDriver, text: str, timeout: int = 10) -> None: WebDriverWait(driver, timeout).until(lambda d: text in d.current_url) def wait_for_element(driver: WebDriver, by: str, value: str, timeout: int = 10): return WebDriverWait(driver, timeout).until( EC.presence_of_element_located((by, value)) ) def wait_for_element_with_text( driver: WebDriver, tag: str, text: str, timeout: int = 10 ): return WebDriverWait(driver, timeout).until( EC.text_to_be_present_in_element((By.TAG_NAME, tag), text) ) def wait_for_clickable(driver: WebDriver, by: str, value: str, timeout: int = 10): return WebDriverWait(driver, timeout).until(EC.element_to_be_clickable((by, value))) def wait_for_element_to_be_visisble(driver: WebDriver, id: str, timeout: int = 10): return WebDriverWait(driver, timeout).until( EC.visibility_of_element_located((By.ID, id)) ) def wait_for_element_to_be_disabled( driver: WebDriver, by: str, value: str, timeout: int = 10 ): """Wait for an element to be disabled.""" return WebDriverWait(driver, timeout).until( EC.none_of(EC.element_to_be_clickable((by, value))) ) def wait_for_alert(driver: WebDriver, timeout: int = 10): """Wait for an alert.""" return WebDriverWait(driver, timeout).until(lambda d: d.switch_to.alert) def wait_for_element_to_disappear( driver: WebDriver, by: str, value: str, timeout: int = 10 ): """Wait for an element to disappear.""" return WebDriverWait(driver, timeout).until( EC.none_of(EC.presence_of_element_located((by, value))) )