Excel data reading (Apache POI) in Selenium Java - Build an Automation Script
import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; 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.io.FileInputStream; import java.io.IOException; import java.time.Duration; public class ExcelDataLoginTest { private WebDriver driver; private WebDriverWait wait; private String username; private String password; @BeforeClass public void setUp() throws IOException { // Read Excel file try (FileInputStream fis = new FileInputStream("credentials.xlsx")) { Workbook workbook = new XSSFWorkbook(fis); Sheet sheet = workbook.getSheet("LoginData"); Row row = sheet.getRow(1); // second row (index 1) Cell userCell = row.getCell(0); // Username column Cell passCell = row.getCell(1); // Password column username = userCell.getStringCellValue(); password = passCell.getStringCellValue(); workbook.close(); } // Setup WebDriver driver = new ChromeDriver(); wait = new WebDriverWait(driver, Duration.ofSeconds(10)); } @Test public void testLoginFieldsWithExcelData() { driver.get("https://example.com/login"); // Wait for username field and enter username WebElement usernameField = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("username"))); usernameField.clear(); usernameField.sendKeys(username); // Wait for password field and enter password WebElement passwordField = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("password"))); passwordField.clear(); passwordField.sendKeys(password); // Assert username field value Assert.assertEquals(usernameField.getAttribute("value"), username, "Username input mismatch"); // Assert password field value Assert.assertEquals(passwordField.getAttribute("value"), password, "Password input mismatch"); } @AfterClass public void tearDown() { if (driver != null) { driver.quit(); } } }
This test reads username and password from an Excel file using Apache POI in the @BeforeClass setup method. It opens the Excel file credentials.xlsx, accesses the sheet LoginData, and reads the second row's first two cells for username and password.
Then it opens the browser and navigates to the login page URL. It waits explicitly for the username and password input fields to be visible before interacting with them. It enters the read username and password into the respective fields.
Assertions check that the input fields contain the exact values read from Excel, ensuring the data was correctly loaded and entered.
The @AfterClass method closes the browser to clean up resources.
This structure follows best practices: explicit waits avoid timing issues, resource cleanup is done, and exceptions during file reading are handled by try-with-resources.
Now add data-driven testing to run the login field verification with 3 different username/password pairs from the Excel sheet