This script reads login data from testdata.json, opens a browser, enters the data, clicks login, and checks if login succeeded.
Selenium Python
import json
from selenium import webdriver
from selenium.webdriver.common.by import By
# Load test data from JSON filedef load_test_data(filename):
withopen(filename) as file:
return json.load(file)
# Test function using Selenium and JSON datadef test_login():
data = load_test_data('testdata.json')
driver = webdriver.Chrome()
driver.get(data['url'])
# Find username and password fields and enter data
driver.find_element(By.ID, 'username').send_keys(data['username'])
driver.find_element(By.ID, 'password').send_keys(data['password'])
# Click login button
driver.find_element(By.ID, 'loginBtn').click()
# Check if login was successful by looking for logout button
logout_button = driver.find_element(By.ID, 'logoutBtn')
assert logout_button.is_displayed(), 'Login failed!'
driver.quit()
# Run the testif __name__ == '__main__':
test_login()
OutputSuccess
Important Notes
Always close the browser after the test to free resources.
Keep your JSON file simple and well-structured for easy reading.
Use meaningful keys in JSON to avoid confusion.
Summary
Reading test data from JSON helps separate data from code.
Use Python's json module to load data easily.
This makes tests easier to maintain and reuse with different data.
Practice
(1/5)
1. What is the main benefit of reading test data from a JSON file in Selenium Python tests?
easy
A. It encrypts test data for security.
B. It makes tests run faster by avoiding web interactions.
C. It automatically generates test cases without writing code.
D. It keeps test code clean and makes data easy to update without changing code.
Solution
Step 1: Understand test data separation
Reading test data from JSON separates data from test logic, making code cleaner.
Step 2: Recognize flexibility advantage
Updating test data in JSON does not require changing test scripts, improving flexibility.
Final Answer:
It keeps test code clean and makes data easy to update without changing code. -> Option D
Quick Check:
Data separation = Clean code + Easy updates [OK]
Hint: Separate data from code for easy updates [OK]
Common Mistakes:
Thinking JSON speeds up test execution
Believing JSON auto-generates tests
Confusing data storage with encryption
2. Which Python code snippet correctly reads a JSON file named data.json into a variable test_data?
easy
A. import json
test_data = json.load(open('data.json'))
B. test_data = open('data.json').read()
C. import json
test_data = json.loads('data.json')
D. test_data = json.read('data.json')
Solution
Step 1: Identify correct json module usage
The json.load() function reads JSON from a file object, so open() must be passed to json.load().
Step 2: Check syntax correctness
import json
test_data = json.load(open('data.json')) correctly imports json and uses json.load(open('data.json')) to read the file.
Final Answer:
import json\ntest_data = json.load(open('data.json')) -> Option A
Quick Check:
json.load + open(file) = correct JSON read [OK]
Hint: Use json.load() with open() for files [OK]
Common Mistakes:
Using json.loads() on filename string
Forgetting to import json module
Calling non-existent json.read() function
3. Given the JSON file user.json with content:
{"username": "testuser", "password": "pass123"}
and the code:
import json
with open('user.json') as f:
data = json.load(f)
print(data['username'])
What will be the output?
medium
A. {'username': 'testuser', 'password': 'pass123'}
B. pass123
C. testuser
D. KeyError
Solution
Step 1: Load JSON data into dictionary
The json.load(f) reads the JSON file and converts it into a Python dictionary with keys 'username' and 'password'.
Step 2: Access dictionary value by key
data['username'] accesses the value 'testuser' from the dictionary.
Final Answer:
testuser -> Option C
Quick Check:
data['username'] = 'testuser' [OK]
Hint: Access JSON keys like dictionary keys [OK]
Common Mistakes:
Printing the whole dictionary instead of key value
Using wrong key causing KeyError
Confusing json.load() with json.loads()
4. What is wrong with this code snippet that reads JSON test data?
import json
file = open('data.json')
data = json.load(file)
file.close()
print(data['email'])
Assuming data.json does not contain the key email.
medium
A. The code will raise a KeyError because 'email' key is missing.
B. The print statement syntax is incorrect.
C. The file is not closed properly.
D. json.load() cannot read from open file objects.
Solution
Step 1: Understand json.load() behavior
json.load() correctly reads JSON from an open file object, so no error here.
Step 2: Identify missing key issue
Accessing data['email'] when 'email' key is missing causes a KeyError at runtime.
Final Answer:
The code will raise a KeyError because 'email' key is missing. -> Option A
Quick Check:
Missing key access = KeyError [OK]
Hint: Check keys exist before accessing JSON data [OK]
Common Mistakes:
Thinking json.load() fails on open files
Ignoring possible missing keys in JSON
Assuming file.close() is missing or wrong
5. You want to use JSON test data to fill a login form in Selenium Python. The JSON file login.json contains:
{"username": "user1", "password": "pass1"}
Which code snippet correctly reads the JSON and uses Selenium to fill the form fields with ids user and pass?
hard
A. import json
with open('login.json') as f:
data = json.load(f)
driver.find_element_by_name('user').send_keys(data['username'])
driver.find_element_by_name('pass').send_keys(data['password'])
B. import json
with open('login.json') as f:
data = json.load(f)
driver.find_element('id', 'user').send_keys(data['username'])
driver.find_element('id', 'pass').send_keys(data['password'])
C. import json
with open('login.json') as f:
data = json.loads(f)
driver.find_element_by_id('user').send_keys(data['username'])
driver.find_element_by_id('pass').send_keys(data['password'])
D. import json
with open('login.json') as f:
data = json.load(f)
driver.find_element('name', 'user').send_keys(data['username'])
driver.find_element('name', 'pass').send_keys(data['password'])
Solution
Step 1: Correctly read JSON file
json.load(f) reads JSON from file object correctly; json.loads() expects a string, so import json
with open('login.json') as f:
data = json.loads(f)
driver.find_element_by_id('user').send_keys(data['username'])
driver.find_element_by_id('pass').send_keys(data['password']) is wrong.
Step 2: Use correct Selenium locator method
driver.find_element('id', 'user') is the modern syntax to find element by id; find_element_by_id() is deprecated.
Step 3: Match locators with element ids
The form fields have ids 'user' and 'pass', so locating by id is correct, not by name.
Final Answer:
import json
with open('login.json') as f:
data = json.load(f)
driver.find_element('id', 'user').send_keys(data['username'])
driver.find_element('id', 'pass').send_keys(data['password']) -> Option B