0
0
Selenium Javatesting~15 mins

Handling hidden elements in Selenium Java - Build an Automation Script

Choose your learning style9 modes available
Verify interaction with a hidden element on a web page
Preconditions (2)
Step 1: Navigate to the test page URL
Step 2: Locate and click the 'Show' button to reveal the hidden button
Step 3: Wait until the hidden button is visible
Step 4: Click the now visible hidden button
Step 5: Verify that clicking the hidden button triggers the expected action (e.g., a message appears)
✅ Expected Result: The hidden button becomes visible after clicking 'Show', can be clicked, and triggers the expected action
Automation Requirements - Selenium WebDriver with Java
Assertions Needed:
Assert the hidden button is not visible before clicking 'Show'
Assert the hidden button is visible after clicking 'Show'
Assert the expected action occurs after clicking the hidden button
Best Practices:
Use explicit waits (WebDriverWait) to wait for element visibility
Use By locators with IDs or unique attributes
Avoid Thread.sleep; use waits instead
Handle NoSuchElementException and ElementNotInteractableException properly
Automated Solution
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.*;
import java.time.Duration;

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

    @BeforeEach
    public void setUp() {
        // Set path to chromedriver executable if needed
        driver = new ChromeDriver();
        wait = new WebDriverWait(driver, Duration.ofSeconds(10));
    }

    @Test
    public void testHiddenElementInteraction() {
        driver.get("https://example.com/test-hidden-element");

        By showButtonLocator = By.id("show-button");
        By hiddenButtonLocator = By.id("hidden-button");
        By messageLocator = By.id("message");

        // Assert hidden button is not visible initially
        assertTrue(driver.findElements(hiddenButtonLocator).size() > 0, "Hidden button should be present in DOM");
        WebElement hiddenButton = driver.findElement(hiddenButtonLocator);
        assertFalse(hiddenButton.isDisplayed(), "Hidden button should not be visible initially");

        // Click the 'Show' button
        WebElement showButton = driver.findElement(showButtonLocator);
        showButton.click();

        // Wait until hidden button is visible
        wait.until(ExpectedConditions.visibilityOfElementLocated(hiddenButtonLocator));

        // Click the now visible hidden button
        hiddenButton = driver.findElement(hiddenButtonLocator); // re-find element
        hiddenButton.click();

        // Verify expected action: message appears
        WebElement message = wait.until(ExpectedConditions.visibilityOfElementLocated(messageLocator));
        assertEquals("Button clicked!", message.getText(), "Expected message after clicking hidden button");
    }

    @AfterEach
    public void tearDown() {
        if (driver != null) {
            driver.quit();
        }
    }
}

This test uses Selenium WebDriver with Java and JUnit 5.

Setup: We create a ChromeDriver instance and a WebDriverWait with 10 seconds timeout.

Test steps:

  • Navigate to the test page URL.
  • Check the hidden button is present in the page but not visible initially.
  • Click the 'Show' button to reveal the hidden button.
  • Use explicit wait to wait until the hidden button becomes visible.
  • Click the now visible hidden button.
  • Wait for the expected message to appear and verify its text.

Teardown: Close the browser after the test.

This approach avoids using Thread.sleep and uses explicit waits for reliability. It also re-finds the hidden button after it becomes visible to avoid stale element issues.

Common Mistakes - 4 Pitfalls
Using Thread.sleep() to wait for the hidden element to appear
Trying to click the hidden element before it is visible
Using XPath with absolute paths for locating elements
Not handling NoSuchElementException when element is not found
Bonus Challenge

Now add data-driven testing with 3 different URLs where the hidden button behaves similarly

Show Hint