We wait in tests to let the web page load or elements appear before interacting with them. Using the right wait helps tests run smoothly and avoid errors.
Time.sleep vs proper waits in Selenium Python
import time time.sleep(seconds) # pauses test for fixed seconds from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC WebDriverWait(driver, timeout).until(EC.condition(locator)) # waits until condition is true or timeout
time.sleep(seconds) pauses the test for exactly the seconds you give, no matter what.
WebDriverWait waits only as long as needed until the element or condition is ready, up to a maximum timeout.
import time time.sleep(5) # wait 5 seconds no matter what
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver, 10) wait.until(EC.visibility_of_element_located((By.ID, 'submit')))
This script shows two ways to wait for a button that appears after some delay. The first uses time.sleep which always waits 5 seconds. The second uses WebDriverWait which waits up to 10 seconds but continues as soon as the button is visible.
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 import time # Setup driver (example with Chrome) driver = webdriver.Chrome() driver.get('https://example.com') # Using time.sleep (bad practice) print('Waiting with time.sleep...') time.sleep(5) # waits fixed 5 seconds try: button = driver.find_element(By.ID, 'delayed-button') print('Button found after sleep') except Exception as e: print('Button not found after sleep') # Using proper wait (good practice) print('Waiting with WebDriverWait...') wait = WebDriverWait(driver, 10) try: button = wait.until(EC.visibility_of_element_located((By.ID, 'delayed-button'))) print('Button found with proper wait') except Exception as e: print('Button not found with proper wait') # Cleanup driver.quit()
Avoid using time.sleep because it slows tests and can cause failures if the wait time is too short or too long.
Proper waits like WebDriverWait make tests faster and more reliable by waiting only as long as needed.
Always use explicit waits for elements that load dynamically or after actions.
time.sleep pauses for a fixed time no matter what.
Proper waits wait only as long as needed up to a timeout.
Use proper waits to make tests faster and less flaky.