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.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import java.time.Duration;
public class LoginPageStateTest {
private WebDriver driver;
private WebDriverWait wait;
@BeforeClass
public void setUp() {
driver = new ChromeDriver();
wait = new WebDriverWait(driver, Duration.ofSeconds(10));
driver.get("https://example.com/login");
}
@Test
public void testElementStates() {
WebElement usernameField = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("username")));
Assert.assertTrue(usernameField.isDisplayed(), "Username field should be displayed");
WebElement passwordField = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("password")));
Assert.assertTrue(passwordField.isDisplayed(), "Password field should be displayed");
WebElement loginButton = wait.until(ExpectedConditions.elementToBeClickable(By.id("loginBtn")));
Assert.assertTrue(loginButton.isEnabled(), "Login button should be enabled");
WebElement rememberMeCheckbox = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("rememberMe")));
Assert.assertTrue(rememberMeCheckbox.isDisplayed(), "Remember Me checkbox should be displayed");
Assert.assertFalse(rememberMeCheckbox.isSelected(), "Remember Me checkbox should not be selected initially");
rememberMeCheckbox.click();
Assert.assertTrue(rememberMeCheckbox.isSelected(), "Remember Me checkbox should be selected after clicking");
}
@AfterClass
public void tearDown() {
if (driver != null) {
driver.quit();
}
}
}This test class uses Selenium WebDriver with TestNG for assertions.
setUp() opens the browser and navigates to the login page.
testElementStates() waits explicitly for each element to be visible or clickable before checking its state:
- Checks username and password fields are visible using
isDisplayed(). - Checks login button is enabled using
isEnabled(). - Checks 'Remember Me' checkbox is visible and initially not selected using
isDisplayed() and isSelected(). - Clicks the checkbox and verifies it is selected.
tearDown() closes the browser after the test.
Explicit waits ensure elements are ready to interact, avoiding flaky tests. Using meaningful locators like By.id improves reliability. Assertions provide clear pass/fail results.