Reading test data from CSV helps you run tests with different inputs easily. It saves time and avoids mistakes from typing data manually.
You want to test a login form with many usernames and passwords.
You need to check a search feature with different keywords.
You want to verify a form accepts various valid and invalid inputs.
You want to separate test data from test code for easier updates.
Syntax
Selenium Python
import csv
withopen('data.csv', newline='') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
# use row data hereprint(row)
Use csv.reader to read rows as lists.
Each row is a list of strings representing one line in the CSV.
Examples
This reads a CSV with two columns: username and password, then prints them.
Selenium Python
import csv
withopen('users.csv', newline='') as file:
reader = csv.reader(file)
for username, password in reader:
print(f"User: {username}, Pass: {password}")
Using DictReader reads CSV rows as dictionaries using header names.
Selenium Python
import csv
withopen('data.csv', newline='') as file:
reader = csv.DictReader(file)
for row in reader:
print(row['email'], row['age'])
Sample Program
This script reads usernames and passwords from a CSV file and prints a message for each. It shows how to use CSV data in tests.
Selenium Python
import csv
# Sample CSV content saved in 'testdata.csv':# username,password# alice,pass123# bob,secretwithopen('testdata.csv', newline='') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
username = row['username']
password = row['password']
print(f"Testing login with {username} and {password}")
OutputSuccess
Important Notes
Always close the CSV file or use with to open it safely.
CSV files should have consistent columns and no extra spaces.
Use DictReader for clearer code with headers.
Summary
CSV files let you store test data outside your code.
Use Python's csv module to read data easily.
Reading data from CSV helps run many tests with different inputs.
Practice
(1/5)
1. What is the main advantage of reading test data from a CSV file in Selenium Python tests?
easy
A. It allows running tests with multiple sets of data without changing the code.
B. It makes the test run faster by using CSV format.
C. It automatically fixes bugs in the test code.
D. It encrypts the test data for security.
Solution
Step 1: Understand the purpose of external test data
Using CSV files lets you separate test data from test code, making tests flexible.
Step 2: Identify the benefit in test execution
With CSV, you can run the same test multiple times with different inputs easily.
Final Answer:
It allows running tests with multiple sets of data without changing the code. -> Option A
Quick Check:
CSV externalizes data = flexible tests [OK]
Hint: CSV stores data separately for easy test reuse [OK]
Common Mistakes:
Thinking CSV speeds up test execution
Believing CSV fixes code bugs automatically
Assuming CSV encrypts data
2. Which Python code snippet correctly opens a CSV file named data.csv for reading test data?
easy
A. file = open('data.csv', 'w')
B. file = open('data.csv', 'r')
C. file = open('data.csv', 'a')
D. file = open('data.csv')
Solution
Step 1: Identify the correct file mode for reading
To read a file, use mode 'r' which stands for read-only.
Step 2: Check the options
file = open('data.csv', 'r') uses 'r' mode correctly; others use write ('w'), append ('a'), or default mode which may not be explicit.
Final Answer:
file = open('data.csv', 'r') -> Option B
Quick Check:
Read mode = 'r' [OK]
Hint: Use 'r' mode to open files for reading [OK]
Common Mistakes:
Using 'w' which overwrites the file
Using 'a' which appends instead of reading
Not specifying mode explicitly
3. Given the CSV file users.csv with content:
username,password
alice,pass123
bob,secure456
What will the output of this code be?
import csv
with open('users.csv', 'r') as file:
reader = csv.reader(file)
for row in reader:
print(row)
medium
A. ('username', 'password')
('alice', 'pass123')
('bob', 'secure456')
B. username,password
alice,pass123
bob,secure456
C. Error: csv.reader cannot read files
D. ['username', 'password']
['alice', 'pass123']
['bob', 'secure456']
Solution
Step 1: Understand csv.reader output
csv.reader reads each line as a list of strings split by commas.
Step 2: Analyze the print output
Each row prints as a list, so header and data rows print as lists of strings.
Final Answer:
['username', 'password']
['alice', 'pass123']
['bob', 'secure456'] -> Option D
Quick Check:
csv.reader returns lists per row [OK]
Hint: csv.reader returns list of strings per row [OK]
Common Mistakes:
Expecting strings instead of lists
Confusing tuples with lists
Thinking csv.reader raises error on valid files
4. What is wrong with this code snippet that reads CSV data for Selenium tests?
import csv
file = open('testdata.csv')
reader = csv.reader(file)
for row in reader:
print(row)
file.close()
medium
A. The file is not opened in read mode explicitly.
B. The file is not closed after reading.
C. Using open() without a context manager can cause resource leaks.
D. csv.reader cannot be used with open() function.
Solution
Step 1: Check file handling best practices
Using open() without 'with' can cause the file to remain open if errors occur.
Step 2: Identify the issue in the code
Though file.close() is called, if an error happens before, file may not close properly.
Final Answer:
Using open() without a context manager can cause resource leaks. -> Option C
Quick Check:
Use 'with' to auto-close files [OK]
Hint: Always use 'with' to open files safely [OK]
Common Mistakes:
Thinking file.close() always prevents leaks
Believing csv.reader can't work with open()
Ignoring explicit read mode is optional
5. You want to run a Selenium test multiple times using usernames and passwords stored in credentials.csv. Which code snippet correctly reads the CSV and uses the data in a test function?
hard
A. import csv
with open('credentials.csv', 'r') as file:
reader = csv.DictReader(file)
for row in reader:
username = row['username']
password = row['password']
test_login(username, password)
B. import csv
file = open('credentials.csv', 'r')
reader = csv.reader(file)
for row in reader:
test_login(row[0], row[1])
file.close()
C. import csv
with open('credentials.csv') as file:
reader = csv.reader(file)
for row in reader:
test_login(row['username'], row['password'])
D. import csv
with open('credentials.csv', 'r') as file:
reader = csv.reader(file)
for row in reader:
test_login(row[0], row[1])
Solution
Step 1: Choose correct CSV reading method for named columns
csv.DictReader reads CSV rows as dictionaries with column names as keys.
Step 2: Use dictionary keys to access username and password
Accessing row['username'] and row['password'] matches CSV headers and passes correct data.
Final Answer:
Using csv.DictReader and accessing row['username'] and row['password'] correctly. -> Option A
Quick Check:
DictReader + keys = clean data access [OK]
Hint: Use csv.DictReader for named column access [OK]
Common Mistakes:
Using csv.reader but accessing row by keys
Not closing files without 'with' block
Forgetting to specify read mode explicitly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.