0
0
Selenium-pythonHow-ToBeginner · 4 min read

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 to timeout seconds.
  • 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.readyState to be complete, 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

MethodDescriptionExample
WebDriverWait + document.readyStateWaits until page load is completeWebDriverWait(driver, 10).until(lambda d: d.execute_script('return document.readyState') == 'complete')
time.sleep()Fixed wait, not recommendedtime.sleep(5)
Expected Conditions (visibility)Waits for element visibility after loadWebDriverWait(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.