Thursday, November 27, 2025

thumbnail

Creating Utility Classes for Common Selenium Functions

 Creating Utility Classes for Common Selenium Functions


When building Selenium automation frameworks, maintaining clean, reusable, and organized code is essential. Utility classes help achieve this by grouping common Selenium functions into dedicated helper files.

This reduces duplication, improves readability, and makes your framework easier to scale.


1. What Are Utility Classes?


A utility class in Selenium is a class that contains commonly used functions, such as:


Clicking elements


Waiting for elements


Handling dropdowns


Taking screenshots


Managing browser actions


Handling alerts and iframes


These methods are typically:


public static


Reusable across multiple test cases


Easy to maintain and update


2. Why Use Utility Classes in Selenium?

✔ Avoid repetitive code


Reduces duplication across test scripts.


✔ Improves readability


Test cases focus on logic, not Selenium boilerplate.


✔ Makes maintenance easier


Updating a method updates all test scripts.


✔ Encourages modular framework design


Supports Page Object Model (POM) and hybrid frameworks.


3. Common Utility Classes in Selenium Frameworks


Typical Selenium frameworks include the following utility classes:


1️⃣ WebDriver Utility


Handles browser actions, waits, windows, frames, alerts, etc.


2️⃣ Element Utility


Wraps interactions like click, sendKeys, getText.


3️⃣ Wait Utility


Explicit and fluent waits.


4️⃣ DropDown Utility


Handles <select> dropdown interactions.


5️⃣ Screenshot Utility


Captures screenshots for reports.


6️⃣ Browser Utils


Launching/closing browser, cookies management.


4. Example: WebDriver Utility Class

public class WebDriverUtils {


    public static void maximizeWindow(WebDriver driver) {

        driver.manage().window().maximize();

    }


    public static void waitForPageLoad(WebDriver driver, int timeout) {

        driver.manage().timeouts().pageLoadTimeout(Duration.ofSeconds(timeout));

    }


    public static void switchToWindow(WebDriver driver, String windowTitle) {

        for (String handle : driver.getWindowHandles()) {

            driver.switchTo().window(handle);

            if (driver.getTitle().equals(windowTitle)) {

                break;

            }

        }

    }


    public static void acceptAlert(WebDriver driver) {

        driver.switchTo().alert().accept();

    }

}


5. Example: Element Utility Class

public class ElementUtils {


    public static void clickElement(WebDriver driver, WebElement element) {

        waitForVisibility(driver, element, 10);

        element.click();

    }


    public static void enterText(WebDriver driver, WebElement element, String text) {

        waitForVisibility(driver, element, 10);

        element.clear();

        element.sendKeys(text);

    }


    public static String getElementText(WebDriver driver, WebElement element) {

        waitForVisibility(driver, element, 10);

        return element.getText();

    }


    public static void waitForVisibility(WebDriver driver, WebElement element, int timeout) {

        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(timeout));

        wait.until(ExpectedConditions.visibilityOf(element));

    }

}


6. Example: Dropdown Utility Class

public class DropDownUtils {


    public static void selectByVisibleText(WebElement element, String visibleText) {

        Select select = new Select(element);

        select.selectByVisibleText(visibleText);

    }


    public static void selectByValue(WebElement element, String value) {

        Select select = new Select(element);

        select.selectByValue(value);

    }


    public static void selectByIndex(WebElement element, int index) {

        Select select = new Select(element);

        select.selectByIndex(index);

    }

}


7. Example: Screenshot Utility Class

public class ScreenshotUtils {


    public static String takeScreenshot(WebDriver driver, String fileName) {

        TakesScreenshot ts = (TakesScreenshot) driver;

        File src = ts.getScreenshotAs(OutputType.FILE);

        String path = System.getProperty("user.dir") + "/screenshots/" + fileName + ".png";

        

        try {

            FileUtils.copyFile(src, new File(path));

        } catch (IOException e) {

            e.printStackTrace();

        }

        

        return path;

    }

}


8. Using Utility Classes in Your Test Script

@Test

public void loginTest() {


    WebDriver driver = new ChromeDriver();

    WebDriverUtils.maximizeWindow(driver);


    driver.get("https://example.com");


    WebElement username = driver.findElement(By.id("username"));

    ElementUtils.enterText(driver, username, "admin");


    WebElement loginBtn = driver.findElement(By.id("login"));

    ElementUtils.clickElement(driver, loginBtn);


    ScreenshotUtils.takeScreenshot(driver, "login_page");

}


9. Best Practices for Utility Classes

✔ Keep methods small and concise


Each method should do one thing.


✔ Use explicit waits instead of Thread.sleep


Improves speed and stability.


✔ Avoid WebDriver instance as static


Pass drivers as arguments or use dependency injection.


✔ Follow naming conventions


Make method names descriptive.


✔ Organize utilities by purpose


Separate concerns (waits, dropdowns, elements).


✔ Reuse utilities inside POM


Combine with the Page Object Model for cleaner code.


10. Summary


Creating utility classes for common Selenium functions helps build:


Cleaner test scripts


Better modular framework structures


Easier maintenance


Higher code reusability


Faster debugging and updates


These utilities form the backbone of robust automation frameworks like Hybrid Framework, POM, or Cucumber BDD.

Learn Selenium with JAVA Training in Hyderabad

Read More

Java OOP Concepts for Selenium Testers

Working with Collections in Java for Selenium Testing

Handling Exceptions in Selenium Test Scripts

Using Loops and Conditions to Control Test Flow

Visit Our Quality Thought Institute in Hyderabad

Get Directions

Subscribe by Email

Follow Updates Articles from This Blog via Email

No Comments

About

Search This Blog

Powered by Blogger.

Blog Archive