Taiab's Blog

Selenium WebDriver: My Setup for Automated Regression Testing

Md. Taiab

Md. Taiab

2024-08-20 ยท 2 mins read


When I joined the FK IT Solution project, regression testing was taking 3+ hours per release cycle. Manual clicks through 50+ test cases, repeated every time a developer merged code. I proposed automating the critical path โ€” and by the end, we cut that time in half.

My Stack

  • Selenium WebDriver (Java)
  • TestNG for test management and reporting
  • Maven for dependency management
  • ChromeDriver (headless for CI)

Project Structure

src/
  test/
    java/
      base/
        BaseTest.java       โ† WebDriver init/teardown
      pages/
        LoginPage.java      โ† Page Object Model
        ProductPage.java
        CartPage.java
        CheckoutPage.java
      tests/
        AuthTest.java
        CartTest.java
        CheckoutTest.java

Page Object Model โ€” LoginPage Example

public class LoginPage {
    private WebDriver driver;

@FindBy(id = "email") private WebElement emailField; @FindBy(id = "password") private WebElement passwordField; @FindBy(css = "button[type='submit']") private WebElement submitBtn; @FindBy(css = ".error-message") private WebElement errorMsg;

public LoginPage(WebDriver driver) { this.driver = driver; PageFactory.initElements(driver, this); }

public void login(String email, String password) { emailField.clear(); emailField.sendKeys(email); passwordField.clear(); passwordField.sendKeys(password); submitBtn.click(); }

public String getErrorMessage() { return errorMsg.getText(); } }

Data-Driven Testing with TestNG

@DataProvider(name = "loginData")
public Object[][] loginData() {
    return new Object[][] {
        {"valid@email.com", "validPass123", true},
        {"invalid@email.com", "wrongPass", false},
        {"", "", false},
        {"sql@test.com", "' OR '1'='1", false},
    };
}

@Test(dataProvider = "loginData") public void testLogin(String email, String pass, boolean shouldSucceed) { LoginPage loginPage = new LoginPage(driver); loginPage.login(email, pass);

if (shouldSucceed) { Assert.assertTrue(driver.getCurrentUrl().contains("/dashboard")); } else { Assert.assertFalse(loginPage.getErrorMessage().isEmpty()); } }

What Automated, What Didn't

    Automated successfully:
  • Login/logout flows
  • Product search and filtering
  • Add to cart, update quantity
  • Coupon code application
    Kept manual:
  • Visual/UI design checks
  • First-run exploratory testing
  • Payment gateway (sandbox limits)

The 50% time reduction came almost entirely from automating the cart and checkout regression suite โ€” those 12 test cases took 45 minutes manually and under 4 minutes automated.

Md. Taiab

Written by Md. Taiab

Follow

Md. Taiab is a Software QA Engineer and security enthusiast based in Dhaka, Bangladesh. He interned as a QA Engineer at Battery Low Interactive Ltd. and competes in CTFs and programming contests โ€” ranked Top 3% globally on TryHackMe and Champion of GUB Junior IDPC 2023.

Comments disabled โ€” add your CommentBox.io project ID to .env.local as NEXT_PUBLIC_COMMENTBOX_ID