Developer Snippet Diary

Waits in selenium Python

To get all ajax loaded we use waits

An explicit wait makes WebDriver wait for a certain condition to occur before proceeding further with execution.

An implicit wait makes WebDriver poll the DOM for a certain amount of time when trying to locate an element.

Explicit Waits

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("http://somedomain/url_that_delays_loading")
try:
    element = WebDriverWait(driver, 10).until( #wait 10 seconds to check element found else exception
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )
finally:
    driver.quit()

These are options 

  • title_is :: if title of document is given text
    wait = WebDriverWait(driver, 10) # Wait up to 10 seconds for the page title to be "Example Domain"
    wait.until(EC.title_is("Example Domain"))
    print("Page title is: " + driver.title) # Do something after the page has loaded with the expected title
  • title_contains 
    element = WebDriverWait(driver, 10).until(EC.title_contains("New chat"))
  • presence_of_element_located  :: if element exists 
    wait = WebDriverWait(driver, 10) # Wait for an element to be present, if not found in 10 seconds, exception occure
    element = wait.until(EC.presence_of_element_located((By.ID, "example_element_id")))
  • visibility_of_element_located ::: waits until an element is both present in the DOM (Document Object Model) and visible on the page
    # Wait for an element to be visible
    wait = WebDriverWait(driver, 10)
    element = wait.until(EC.visibility_of_element_located((By.ID, "example_element_id")))
  • visibility_of ::: it waits until an element is visible on the page. This can be useful for waiting until an element is loaded and displayed on the page before interacting with it.
    # Wait for an element to be visible
    wait = WebDriverWait(driver, 10)
    element = wait.until(EC.visibility_of(driver.find_element(By.ID, "example_element_id")))
  • presence_of_all_elements_located::: waits until all elements that match a specified locator strategy are present in the DOM. It returns a list of all the matching elements that were found. 
    # Wait for multiple elements to be present
    wait = WebDriverWait(driver, 10)
    elements = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, "example_class_name")))
  • text_to_be_present_in_element :::  waits until a specified text is present in the inner HTML of a given web element. It is useful for waiting until a specific text appears on the page, for example, to verify that a certain message or content has loaded successfully.
    # Wait for an element to contain specific text
    wait = WebDriverWait(driver, 10)
    element = wait.until(EC.text_to_be_present_in_element((By.ID, "example_element_id"), "Example Text"))
  • text_to_be_present_in_element_value
  • frame_to_be_available_and_switch_to_it
  • invisibility_of_element_located:::  waits until a specified element is no longer visible on the page. It is useful for waiting until an element disappears from the page, for example, after submitting a form or closing a dialog box.
    # Wait for an element to become invisible
    wait = WebDriverWait(driver, 10)
    element = wait.until(EC.visibility_of_element_located((By.ID, "example_element_id")))
    # interact with the element
    element.click()
  • element_to_be_clickable
  • staleness_of:::  waits until a specified web element is no longer attached to the DOM (Document Object Model). It is useful for waiting until an element is removed from the page, for example, after deleting an item from a list. 
    # Wait for an element to become stale
    wait = WebDriverWait(driver, 10)
    element = driver.find_element(By.ID, "example_element_id")
    # interact with the element
  • element_to_be_selected
  • element_located_to_be_selected
  • element_selection_state_to_be
  • element_located_selection_state_to_be
  • alert_is_present

Implict wait

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10) # seconds
driver.get("http://somedomain/url_that_delays_loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")

 

Posted by: R GONDAL
Email: rizikmw@gmail.com