Login test using multiple user credentials from CSV file
Preconditions (2)
✅ Expected Result: For each set of credentials in the CSV, the user successfully logs in and is redirected to the dashboard page.
import unittest import csv 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 class TestLoginWithCSV(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.maximize_window() self.wait = WebDriverWait(self.driver, 10) def test_login_from_csv(self): driver = self.driver wait = self.wait driver.get('https://example.com/login') with open('login_data.csv', newline='') as csvfile: reader = csv.DictReader(csvfile) for row in reader: username = row['username'] password = row['password'] # Enter username username_field = wait.until(EC.visibility_of_element_located((By.ID, 'username'))) username_field.clear() username_field.send_keys(username) # Enter password password_field = wait.until(EC.visibility_of_element_located((By.ID, 'password'))) password_field.clear() password_field.send_keys(password) # Click login button login_button = wait.until(EC.element_to_be_clickable((By.ID, 'loginBtn'))) login_button.click() # Verify URL changed to dashboard wait.until(EC.url_to_be('https://example.com/dashboard')) self.assertEqual(driver.current_url, 'https://example.com/dashboard') # Verify logout button is clickable logout_button = wait.until(EC.element_to_be_clickable((By.ID, 'logoutBtn'))) self.assertTrue(logout_button.is_displayed()) # Click logout to prepare for next test logout_button.click() # Wait for login page to load again wait.until(EC.visibility_of_element_located((By.ID, 'username'))) def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main()
This test script uses Python's unittest framework and Selenium WebDriver.
In setUp, we open the browser and prepare a wait object for explicit waits.
The test test_login_from_csv reads the CSV file using Python's csv.DictReader to get username and password pairs.
For each row, it:
Finally, tearDown closes the browser after all tests.
This approach uses explicit waits to avoid timing issues and reads test data cleanly from CSV, making the test easy to maintain and extend.
Now add data-driven testing with 3 different CSV files for different environments (e.g., dev, staging, production).
data.csv for reading test data?users.csv with content:username,password alice,pass123 bob,secure456
import csv
with open('users.csv', 'r') as file:
reader = csv.reader(file)
for row in reader:
print(row)import csv
file = open('testdata.csv')
reader = csv.reader(file)
for row in reader:
print(row)
file.close()credentials.csv. Which code snippet correctly reads the CSV and uses the data in a test function?Pass the test and this pattern moves unknown