We use findElement by className to quickly find a web page element using its CSS class name. This helps us interact with buttons, text boxes, or other parts of a webpage during testing.
findElement by className in Selenium Java
WebElement element = driver.findElement(By.className("class-name"));Replace "class-name" with the actual class attribute value of the element.
This finds the first element matching the class name on the page.
submit-btn, often a submit button.WebElement button = driver.findElement(By.className("submit-btn"));WebElement message = driver.findElement(By.className("alert-message"));WebElement inputField = driver.findElement(By.className("input-text"));This program opens a browser, goes to a test page, finds a button by its class name submit-btn, and prints if it is visible or not. It handles the case if the element is missing.
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class FindElementByClassNameExample { public static void main(String[] args) { // Set path to chromedriver executable if needed // System.setProperty("webdriver.chrome.driver", "path/to/chromedriver"); WebDriver driver = new ChromeDriver(); try { driver.get("https://example.com/testpage"); // Find element by class name WebElement button = driver.findElement(By.className("submit-btn")); // Check if button is displayed if (button.isDisplayed()) { System.out.println("Button found and visible."); } else { System.out.println("Button found but not visible."); } } catch (Exception e) { System.out.println("Element not found: " + e.getMessage()); } finally { driver.quit(); } } }
Class names should not contain spaces; if the element has multiple classes, use only one class name at a time.
If multiple elements share the same class, findElement returns the first one found.
Use findElements to get all elements with the same class name.
findElement by className helps locate a single web element using its CSS class.
It returns the first matching element or throws an error if none found.
Useful for interacting with buttons, inputs, or messages identified by class.
Practice
findElement(By.className("btn-primary")) do in a test script?Solution
Step 1: Understand the method purpose
The methodfindElementlocates a single element on the page.Step 2: Analyze the locator type
UsingBy.className("btn-primary")targets elements with the CSS class "btn-primary".Final Answer:
It finds the first web element with the CSS class "btn-primary" on the page. -> Option CQuick Check:
findElement + className = first matching element [OK]
- Confusing findElement with findElements (plural)
- Using className to find by ID or tag
- Expecting multiple elements returned
Solution
Step 1: Recall correct method usage
The correct method to locate by class name isBy.className()with capital N.Step 2: Check syntax correctness
driver.findElement(By.className("login-button")); uses the exact correct syntax:By.className("login-button").Final Answer:
driver.findElement(By.className("login-button")); -> Option BQuick Check:
Correct method name is className with capital N [OK]
- Using By.class instead of By.className
- Wrong method casing like class_name or classname
- Missing quotes around class name
<button class="submit-btn primary">Submit</button>
What will the following code return?
WebElement btn = driver.findElement(By.className("primary"));
System.out.println(btn.getText());Solution
Step 1: Locate element by class name "primary"
The button has class "primary" among others, so it matches.Step 2: Get the text of the found element
ThegetText()method returns the visible text inside the button, which is "Submit".Final Answer:
Submit -> Option AQuick Check:
findElement by className finds element, getText returns inner text [OK]
- Expecting class name as text output
- Confusing class attribute with element text
- Assuming exception if multiple classes present
WebElement element = driver.findElement(By.className("btn primary"));It tries to find an element with classes "btn" and "primary".
Solution
Step 1: Understand className locator rules
TheBy.classNamelocator accepts only a single class name without spaces.Step 2: Identify the error in locator usage
Using "btn primary" with space is invalid and causes an error; it cannot find elements with multiple classes this way.Final Answer:
className locator cannot contain spaces; it matches only one class. -> Option DQuick Check:
className accepts single class only, no spaces [OK]
- Trying to find multiple classes with space-separated string
- Expecting findElement to accept compound class selectors
- Confusing className with CSS selector syntax
Solution
Step 1: Understand limitation of className locator
TheBy.classNamelocator cannot handle multiple classes separated by spaces.Step 2: Use CSS selector for multiple classes
The CSS selector.nav-item.activematches elements with both classes and works correctly.Step 3: Compare other options
driver.findElement(By.className("nav-item active")).click(); is invalid due to space in className; driver.findElement(By.className("nav-item")).click(); matches only one class; driver.findElement(By.xpath("//button[@class='nav-item active']")).click(); uses XPath but is less concise.Final Answer:
driver.findElement(By.cssSelector(".nav-item.active")).click(); -> Option AQuick Check:
Use CSS selector for multiple classes, not className [OK]
- Using className with multiple classes separated by space
- Using only one class when both are needed
- Ignoring CSS selectors as a better alternative
Ready to prove it?
Pass the test and this pattern moves unknown
