How to Wait for Page to Load in Selenium: Simple Guide
In Selenium, use
WebDriverWait with expected_conditions like document.readyState to wait until the page fully loads. This ensures your test interacts with elements only after the page is ready, avoiding errors from premature actions.Syntax
Use WebDriverWait combined with a condition that checks if the page's document.readyState is complete. This waits until the browser finishes loading the page.
WebDriverWait(driver, timeout): waits up totimeoutseconds.until(condition): waits until the condition is true.lambda driver: driver.execute_script('return document.readyState') == 'complete': JavaScript check for page load.
python
from selenium.webdriver.support.ui import WebDriverWait # Wait until page load is complete WebDriverWait(driver, 10).until( lambda driver: driver.execute_script('return document.readyState') == 'complete' )
Example
This example opens a webpage and waits for it to fully load before printing a success message. It shows how to use WebDriverWait with a JavaScript check for document.readyState.
python
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait # Setup WebDriver (Chrome example) driver = webdriver.Chrome() # Open a webpage driver.get('https://example.com') # Wait for page to load completely WebDriverWait(driver, 10).until( lambda d: d.execute_script('return document.readyState') == 'complete' ) print('Page loaded successfully') driver.quit()
Output
Page loaded successfully
Common Pitfalls
Common mistakes when waiting for page load in Selenium include:
- Using
time.sleep()which is unreliable and slows tests unnecessarily. - Not waiting for
document.readyStateto becomplete, causing tests to fail when elements are not yet ready. - Ignoring dynamic content loaded after page load, which may require additional waits.
Always prefer explicit waits over fixed delays for better reliability.
python
from selenium.webdriver.support.ui import WebDriverWait # Wrong: fixed sleep (unreliable) import time time.sleep(5) # Waits blindly, may be too short or too long # Right: explicit wait for page load WebDriverWait(driver, 10).until( lambda d: d.execute_script('return document.readyState') == 'complete' )
Quick Reference
| Method | Description | Example |
|---|---|---|
| WebDriverWait + document.readyState | Waits until page load is complete | WebDriverWait(driver, 10).until(lambda d: d.execute_script('return document.readyState') == 'complete') |
| time.sleep() | Fixed wait, not recommended | time.sleep(5) |
| Expected Conditions (visibility) | Waits for element visibility after load | WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, 'id'))) |
Key Takeaways
Use explicit waits with WebDriverWait and document.readyState to wait for page load.
Avoid fixed delays like time.sleep() as they are unreliable and slow tests.
Waiting for document.readyState == 'complete' ensures the page is fully loaded.
Consider additional waits for dynamic content loaded after page load.
Explicit waits improve test stability and reduce flaky failures.