Bird
Raised Fist0
Selenium Javatesting~10 mins

findElement by className in Selenium Java - Test Execution Trace

Choose your learning style10 modes available
Test Overview

This test opens a web page, finds a button using its class name, clicks it, and verifies that a confirmation message appears.

Test Code - JUnit with Selenium WebDriver
Selenium Java
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class FindElementByClassNameTest {
    private WebDriver driver;
    private WebDriverWait wait;

    @BeforeEach
    public void setUp() {
        driver = new ChromeDriver();
        wait = new WebDriverWait(driver, 10);
    }

    @Test
    public void testClickButtonByClassName() {
        driver.get("https://example.com/testpage");
        WebElement button = wait.until(ExpectedConditions.presenceOfElementLocated(By.className("submit-btn")));
        button.click();
        WebElement message = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("confirmation-message")));
        assertEquals("Submission successful", message.getText());
    }

    @AfterEach
    public void tearDown() {
        if (driver != null) {
            driver.quit();
        }
    }
}
Execution Trace - 6 Steps
StepActionSystem StateAssertionResult
1Test starts and Chrome browser opensChrome browser window is open and ready—PASS
2Navigates to https://example.com/testpagePage loads with a button having class 'submit-btn' and an empty confirmation message area—PASS
3Waits until element with class name 'submit-btn' is present and finds the buttonButton with class 'submit-btn' is located on the pageElement presence verifiedPASS
4Clicks the button found by class nameButton is clicked, triggering submission action—PASS
5Waits until confirmation message with id 'confirmation-message' is visibleConfirmation message area is visible with text 'Submission successful'Message text equals 'Submission successful'PASS
6Test ends and browser closesBrowser window is closed—PASS
Failure Scenario
Failing Condition: The button with class name 'submit-btn' is not found on the page
Execution Trace Quiz - 3 Questions
Test your understanding
What Selenium method is used to find the button in this test?
Adriver.findElement(By.className("submit-btn"))
Bdriver.findElement(By.id("submit-btn"))
Cdriver.findElement(By.name("submit-btn"))
Ddriver.findElement(By.tagName("button"))
Key Result
Always use explicit waits like WebDriverWait with ExpectedConditions to reliably find elements by class name before interacting with them.

Practice

(1/5)
1. What does the Selenium method findElement(By.className("btn-primary")) do in a test script?
easy
A. It finds an element by its HTML tag name "btn-primary".
B. It finds all web elements with the CSS class "btn-primary" on the page.
C. It finds the first web element with the CSS class "btn-primary" on the page.
D. It finds an element by its ID "btn-primary".

Solution

  1. Step 1: Understand the method purpose

    The method findElement locates a single element on the page.
  2. Step 2: Analyze the locator type

    Using By.className("btn-primary") targets elements with the CSS class "btn-primary".
  3. Final Answer:

    It finds the first web element with the CSS class "btn-primary" on the page. -> Option C
  4. Quick Check:

    findElement + className = first matching element [OK]
Hint: findElement with className returns first matching element [OK]
Common Mistakes:
  • Confusing findElement with findElements (plural)
  • Using className to find by ID or tag
  • Expecting multiple elements returned
2. Which of the following is the correct syntax to find an element by class name "login-button" in Selenium Java?
easy
A. driver.findElement(By.classname("login-button"));
B. driver.findElement(By.className("login-button"));
C. driver.findElement(By.class_name("login-button"));
D. driver.findElement(By.class("login-button"));

Solution

  1. Step 1: Recall correct method usage

    The correct method to locate by class name is By.className() with capital N.
  2. Step 2: Check syntax correctness

    driver.findElement(By.className("login-button")); uses the exact correct syntax: By.className("login-button").
  3. Final Answer:

    driver.findElement(By.className("login-button")); -> Option B
  4. Quick Check:

    Correct method name is className with capital N [OK]
Hint: Use By.className with capital N for correct syntax [OK]
Common Mistakes:
  • Using By.class instead of By.className
  • Wrong method casing like class_name or classname
  • Missing quotes around class name
3. Given the HTML snippet:
<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());
medium
A. Submit
B. primary
C. submit-btn
D. NoSuchElementException

Solution

  1. Step 1: Locate element by class name "primary"

    The button has class "primary" among others, so it matches.
  2. Step 2: Get the text of the found element

    The getText() method returns the visible text inside the button, which is "Submit".
  3. Final Answer:

    Submit -> Option A
  4. Quick Check:

    findElement by className finds element, getText returns inner text [OK]
Hint: getText() returns visible text inside found element [OK]
Common Mistakes:
  • Expecting class name as text output
  • Confusing class attribute with element text
  • Assuming exception if multiple classes present
4. What is wrong with this Selenium Java code snippet?
WebElement element = driver.findElement(By.className("btn primary"));

It tries to find an element with classes "btn" and "primary".
medium
A. The syntax is correct; it finds elements with both classes.
B. It should use findElements instead of findElement.
C. It should use By.id instead of By.className.
D. className locator cannot contain spaces; it matches only one class.

Solution

  1. Step 1: Understand className locator rules

    The By.className locator accepts only a single class name without spaces.
  2. 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.
  3. Final Answer:

    className locator cannot contain spaces; it matches only one class. -> Option D
  4. Quick Check:

    className accepts single class only, no spaces [OK]
Hint: Use single class name without spaces in className locator [OK]
Common Mistakes:
  • Trying to find multiple classes with space-separated string
  • Expecting findElement to accept compound class selectors
  • Confusing className with CSS selector syntax
5. You want to click the first button with class "nav-item active" on a page. Which is the best way to do this using Selenium Java?
hard
A. driver.findElement(By.cssSelector(".nav-item.active")).click();
B. driver.findElement(By.className("nav-item active")).click();
C. driver.findElement(By.className("nav-item")).click();
D. driver.findElement(By.xpath("//button[@class='nav-item active']")).click();

Solution

  1. Step 1: Understand limitation of className locator

    The By.className locator cannot handle multiple classes separated by spaces.
  2. Step 2: Use CSS selector for multiple classes

    The CSS selector .nav-item.active matches elements with both classes and works correctly.
  3. 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.
  4. Final Answer:

    driver.findElement(By.cssSelector(".nav-item.active")).click(); -> Option A
  5. Quick Check:

    Use CSS selector for multiple classes, not className [OK]
Hint: Use CSS selector for multiple classes, not className [OK]
Common Mistakes:
  • Using className with multiple classes separated by space
  • Using only one class when both are needed
  • Ignoring CSS selectors as a better alternative
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard