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
# Setup WebDriver (assuming chromedriver is in PATH)
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
try:
# Open the test page
driver.get('https://example.com/test-list') # Replace with actual test page URL
# Wait for the list container to be present
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'ul#item-list')))
# Locate elements using CSS pseudo-classes
first_item = driver.find_element(By.CSS_SELECTOR, 'ul#item-list li:first-child')
last_item = driver.find_element(By.CSS_SELECTOR, 'ul#item-list li:last-child')
third_item = driver.find_element(By.CSS_SELECTOR, 'ul#item-list li:nth-child(3)')
even_items = driver.find_elements(By.CSS_SELECTOR, 'ul#item-list li:nth-child(even)')
odd_items = driver.find_elements(By.CSS_SELECTOR, 'ul#item-list li:nth-child(odd)')
# Assertions
assert first_item.text == 'Item 1', f"Expected 'Item 1' but got '{first_item.text}'"
assert last_item.text == 'Item 5', f"Expected 'Item 5' but got '{last_item.text}'"
assert third_item.text == 'Item 3', f"Expected 'Item 3' but got '{third_item.text}'"
even_texts = [item.text for item in even_items]
assert even_texts == ['Item 2', 'Item 4'], f"Expected ['Item 2', 'Item 4'] but got {even_texts}"
odd_texts = [item.text for item in odd_items]
assert odd_texts == ['Item 1', 'Item 3', 'Item 5'], f"Expected ['Item 1', 'Item 3', 'Item 5'] but got {odd_texts}"
finally:
driver.quit()This script uses Selenium WebDriver with Python to automate the test case.
First, it opens the test page URL where the list is located.
It waits explicitly for the list container to be present to avoid timing issues.
Then, it uses CSS selectors with pseudo-classes like :first-child, :last-child, :nth-child(3), :nth-child(even), and :nth-child(odd) to locate specific list items.
Assertions check that the text content of these elements matches the expected values, with clear messages to help identify failures.
Finally, the browser is closed cleanly in a finally block to ensure resources are freed.