Logging with Log4j in Selenium Java - Build an Automation Script
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; 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 org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.time.Duration; public class LoginTest { private WebDriver driver; private WebDriverWait wait; private static final Logger logger = LogManager.getLogger(LoginTest.class); @BeforeClass public void setUp() { // Setup ChromeDriver path if needed driver = new ChromeDriver(); wait = new WebDriverWait(driver, Duration.ofSeconds(10)); logger.info("Browser launched"); } @Test public void testLoginWithLogging() { driver.get("https://example.com/login"); logger.info("Navigated to login page"); driver.findElement(By.id("email")).sendKeys("admin@test.com"); logger.debug("Entered email address"); driver.findElement(By.id("password")).sendKeys("Pass123!"); logger.debug("Entered password"); driver.findElement(By.id("loginBtn")).click(); logger.info("Clicked login button"); // Wait until URL changes to dashboard wait.until(ExpectedConditions.urlToBe("https://example.com/dashboard")); logger.info("Login successful, dashboard loaded"); Assert.assertEquals(driver.getCurrentUrl(), "https://example.com/dashboard", "Dashboard URL should be loaded after login"); } @AfterClass public void tearDown() { if (driver != null) { driver.quit(); logger.info("Browser closed"); } } }
This test class uses Selenium WebDriver with TestNG and Log4j2 for logging.
1. Logger setup: We create a static logger instance using LogManager.getLogger for this class.
2. Setup method: Launches Chrome browser and initializes explicit wait. Logs info message.
3. Test method: Navigates to login page and logs info. Enters email and password with debug logs after each input. Clicks login button and logs info. Waits explicitly for the dashboard URL to load and logs success info. Asserts the URL is correct.
4. Teardown method: Closes browser and logs info.
Explicit waits avoid flaky tests. Using By.id locators keeps selectors stable. Logging at info and debug levels helps track test flow and data entry.
Now add data-driven testing with 3 different sets of login credentials (valid and invalid) using TestNG data provider.