import pytest
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
@pytest.fixture
sdef driver():
driver = webdriver.Chrome()
driver.get('https://example.com/login')
yield driver
driver.quit()
@pytest.fixture
def wait(driver):
return WebDriverWait(driver, 10)
def test_login_page_title(driver):
assert driver.title == 'Login Page'
def test_successful_login_redirect(driver, wait):
username_input = driver.find_element(By.ID, 'username')
password_input = driver.find_element(By.ID, 'password')
login_button = driver.find_element(By.ID, 'login-btn')
username_input.send_keys('user1')
password_input.send_keys('Password123')
login_button.click()
wait.until(EC.url_contains('/dashboard'))
assert '/dashboard' in driver.current_url
@pytest.fixture
def open_login_page(driver):
driver.get('https://example.com/login')
def test_username_field_empty_on_load(driver, open_login_page):
username_input = driver.find_element(By.ID, 'username')
assert username_input.get_attribute('value') == ''
def test_password_field_empty_on_load(driver, open_login_page):
password_input = driver.find_element(By.ID, 'password')
assert password_input.get_attribute('value') == ''
def test_login_button_disabled_when_fields_empty(driver, open_login_page):
login_button = driver.find_element(By.ID, 'login-btn')
assert not login_button.is_enabled()This test suite uses pytest with Selenium WebDriver to automate the login page tests.
We use fixtures to open the browser and navigate to the login page before each test.
Each test checks only one thing: the page title, successful login redirect, empty username field, empty password field, and login button disabled state.
This keeps tests simple and focused, making failures easier to understand and fix.
Explicit waits ensure the page redirects before asserting the URL.