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.