from selenium import webdriver
from selenium.webdriver.chrome.service import Service
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 Chrome driver with DevTools Protocol
options = webdriver.ChromeOptions()
service = Service()
driver = webdriver.Chrome(service=service, options=options)
try:
# Enable network throttling to simulate slow 3G
driver.execute_cdp_cmd('Network.enable', {})
driver.execute_cdp_cmd('Network.emulateNetworkConditions', {
'offline': False,
'latency': 200, # 200 ms latency
'downloadThroughput': 500 * 1024 / 8, # 500 kbps
'uploadThroughput': 500 * 1024 / 8 # 500 kbps
})
start_time = time.time()
driver.get('https://example.com') # Replace with actual app URL
# Wait for main element to load
WebDriverWait(driver, 30).until(
EC.presence_of_element_located((By.ID, 'main-content'))
)
load_time = time.time() - start_time
# Assert page load time under 15 seconds for slow network
assert load_time < 15, f"Page load took too long: {load_time} seconds"
# Fill and submit form
input_field = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, 'input-name'))
)
input_field.send_keys('Test User')
submit_button = driver.find_element(By.ID, 'submit-btn')
submit_button.click()
# Wait for success message
success_msg = WebDriverWait(driver, 15).until(
EC.visibility_of_element_located((By.ID, 'success-message'))
)
assert 'success' in success_msg.text.lower(), "Success message not displayed"
finally:
driver.quit()This script uses Selenium WebDriver with Chrome DevTools Protocol to simulate a slow 3G network by setting latency and throughput limits.
We start by enabling network throttling, then load the application page and measure the load time.
We assert that the page loads within 15 seconds, which is reasonable for slow networks.
Next, we fill a form field and submit it, then wait for a success message to confirm the form submission worked.
Explicit waits ensure the script waits for elements to be ready before interacting, avoiding flaky tests.
Finally, the driver quits to close the browser cleanly.