from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# Setup Chrome options
chrome_options = Options()
chrome_options.add_argument('--headless=new') # Run headless for faster execution
# Setup WebDriver service
service = Service()
driver = webdriver.Chrome(service=service, options=chrome_options)
try:
driver.get('https://example.com')
# Wait until the document.readyState is 'complete'
WebDriverWait(driver, 10).until(
lambda d: d.execute_script('return document.readyState') == 'complete'
)
# Collect performance timing metrics
performance_timing = driver.execute_script('return window.performance.timing')
load_event_end = performance_timing.get('loadEventEnd', 0)
dom_content_loaded_event_end = performance_timing.get('domContentLoadedEventEnd', 0)
assert load_event_end > 0, f"Expected loadEventEnd > 0 but got {load_event_end}"
assert dom_content_loaded_event_end > 0, f"Expected domContentLoadedEventEnd > 0 but got {dom_content_loaded_event_end}"
finally:
driver.quit()This script uses Selenium WebDriver with Python to open the browser and navigate to 'https://example.com'.
It waits explicitly until the page's document.readyState is 'complete', ensuring the page is fully loaded before collecting performance data.
Using execute_script, it accesses the browser's window.performance.timing object to get timing metrics.
The script asserts that both loadEventEnd and domContentLoadedEventEnd are greater than zero, which means the page loaded successfully.
Finally, the browser is closed properly in a finally block to clean up resources.