Find element by class name in Selenium Python - Build an Automation Script
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 from selenium.common.exceptions import TimeoutException # Setup WebDriver (assuming chromedriver is in PATH) driver = webdriver.Chrome() try: # Open login page driver.get('https://example.com/login') # Wait up to 10 seconds for the login button to be clickable wait = WebDriverWait(driver, 10) login_button = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'btn-login'))) # Click the login button login_button.click() # Wait for URL to change to dashboard wait.until(EC.url_to_be('https://example.com/dashboard')) # Assert current URL is dashboard assert driver.current_url == 'https://example.com/dashboard', f"Expected dashboard URL but got {driver.current_url}" print('Test Passed: Login button clicked and dashboard loaded') except TimeoutException: print('Test Failed: Element not found or page did not load in time') finally: driver.quit()
This script uses Selenium WebDriver with Python to automate the manual test case.
First, it opens the login page URL.
Then it waits explicitly up to 10 seconds for the login button to be clickable using By.CLASS_NAME locator with the class name 'btn-login'. This ensures the element is ready before clicking.
After clicking the button, it waits until the URL changes to the expected dashboard URL.
Finally, it asserts the current URL matches the expected dashboard URL to confirm navigation succeeded.
TimeoutException is caught to handle cases where the element is not found or page load is slow.
The driver is closed in the finally block to clean up resources.
Now add data-driven testing with 3 different class names for buttons on different pages
Practice
find_element(By.CLASS_NAME, "example") do?Solution
Step 1: Understand the method purpose
The methodfind_elementlocates a single element on the page.Step 2: Identify the locator type
UsingBy.CLASS_NAMEmeans it looks for the first element with the given class name.Final Answer:
Finds the first element with the class name "example" on the webpage. -> Option DQuick Check:
find_element + CLASS_NAME = first matching element [OK]
- Confusing find_element with find_elements (plural)
- Using class name but expecting multiple elements
- Mixing class name with ID or tag name locators
Solution
Step 1: Recall the correct Selenium syntax
In Selenium Python 4+, the recommended syntax isfind_element(By.CLASS_NAME, "class").Step 2: Check each option for correctness
driver.find_element(By.CLASS_NAME, "btn-primary") uses the correct locatorBy.CLASS_NAMEand methodfind_element. Others use deprecated or incorrect locators.Final Answer:
driver.find_element(By.CLASS_NAME, "btn-primary") -> Option AQuick Check:
Use By.CLASS_NAME with find_element [OK]
- Using deprecated find_element_by_class_name method
- Wrong locator names like CLASS or CLASSNAME
- Missing quotes around class name string
<div class="alert success">Success!</div> <div class="alert error">Error!</div>
What text will this Selenium Python code print?
element = driver.find_element(By.CLASS_NAME, "alert") print(element.text)
Solution
Step 1: Understand find_element behavior
It finds the first element matching the class name "alert" in the HTML order.Step 2: Identify the first matching element
The first <div> with class "alert success" contains text "Success!".Final Answer:
"Success!" -> Option AQuick Check:
find_element returns first matching element's text [OK]
- Assuming it returns all matching elements' text
- Confusing class names with multiple classes
- Expecting an error if multiple classes exist
element = driver.find_element(By.CLASS_NAME, ".button")
Solution
Step 1: Check the class name format
When usingBy.CLASS_NAME, the class name should be given without any CSS selector symbols like ".".Step 2: Identify the error in the code
The code incorrectly includes a dot prefix ".button" which causes a failure to find the element.Final Answer:
Class name should not include the dot prefix "." -> Option BQuick Check:
Class name locator needs plain class name, no dot [OK]
- Adding dot prefix like CSS selectors to class name
- Using find_elements when only one element is needed
- Assuming class names must be uppercase
Solution
Step 1: Choose correct method to find single element by class
Usefind_element(By.CLASS_NAME, "submit-btn")to get the first matching element.Step 2: Call click() on the found element
After locating the element, callclick()to perform the click action.Final Answer:
button = driver.find_element(By.CLASS_NAME, "submit-btn")\nbutton.click() -> Option CQuick Check:
find_element + CLASS_NAME + click() = correct usage [OK]
- Using find_elements returns list, cannot call click() directly
- Using ID locator instead of class name
- Including dot prefix in class name
Ready to prove it?
Pass the test and this pattern moves unknown
