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
Subscribe by Email
Follow Updates Articles from This Blog via Email
No Comments