Skip to content
Software Testing Journal
Software Testing Journal

Your daily dose of learning!

  • Blog
  • Help Center
  • Video Playlist
  • Podcast & FAQ
  • Privacy Policy
Software Testing Journal

Your daily dose of learning!

🔧 Self-Healing Selenium Automation with Java — A Smarter Way to Handle Broken Locators

Dheeraj Gambhir, 2025-04-082025-04-08

How to build smarter, more resilient automated tests?

We’ve all been there — our Selenium test cases start failing because of minor UI changes like updated element IDs, renamed classes, or even reordered elements.

It’s frustrating, time-consuming, and often the most dreaded part of maintaining automated tests.

But what if your automation could heal itself?

💡 What is Self-Healing Automation?

Self-healing automation refers to the capability of a test automation framework to recover from minor UI changes by automatically trying alternative locators when the primary one fails.

It’s like giving your test scripts a survival instinct.

🔨 🛠️ Implementation in Java + Selenium: Step by Step

Step 1: Create a Self-Healing Wrapper

We start by creating a custom class called SelfHealingDriver. This class wraps the standard WebDriver and handles locator failures gracefully.

public class SelfHealingDriver {

private WebDriver driver;

public SelfHealingDriver(WebDriver driver) {

this.driver = driver;

}

public WebElement findElement(By primaryLocator, List<By> alternativeLocators) {

try {

return driver.findElement(primaryLocator);

} catch (NoSuchElementException e) {

System.out.println(“Primary locator failed. Trying alternatives…”);

for (By altLocator : alternativeLocators) {

try {

WebElement altElement = driver.findElement(altLocator);

System.out.println(“Found element using alternative: “ + altLocator.toString());

return altElement;

} catch (NoSuchElementException ignored) {}

}

throw new NoSuchElementException(“Element not found with any locator”);

}

}

}

Step 2: Use It in Your Test

Here’s how you’d use this wrapper in a real test:

public class TestSelfHealing {

public static void main(String[] args) throws InterruptedException {

WebDriver driver = new ChromeDriver();

SelfHealingDriver healingDriver = new SelfHealingDriver(driver);

driver.get(“https://opensource-demo.orangehrmlive.com/web/index.php/auth/login");

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

driver.manage().deleteAllCookies();

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

By primary = By.id(“username”);

List<By> alternatives = Arrays.asList(

By.name(“username”),

By.cssSelector(“input[name=’username’]”),

By.xpath(“//input[contains(@placeholder, ‘User’)]”)

);

healingDriver.findElement(primary, alternatives).sendKeys(“Admin”);

Thread.sleep(2000);

driver.quit();

}

}

Even if the id=”username” changes or disappears, your test can still pass as long as one of the alternative locators works.

📈 Benefits

✅ Reduces test flakiness due to minor UI changes
✅ Saves time spent debugging failing tests
✅ Boosts confidence in automation during CI/CD runs
✅ Can be integrated into existing Selenium frameworks

🧠 Bonus: Room for Innovation

You can further improve this by:

  • Logging fallback events for analysis
  • Capturing screenshots when healing kicks in
  • Integrating AI to generate and validate alternative locators
  • Using libraries like Healenium for production-grade self-healing

🎯 Final Thoughts

Test automation should be smart, resilient, and self-aware. By introducing a basic self-healing mechanism in your Java Selenium framework, you take a big step toward making your tests more reliable and less brittle.

Let your tests evolve — not break.

If you find this post helpful, please share them with your colleagues and friends.

  • Facebook
  • Twitter
  • LinkedIn
  • Email
Automation TestAutomation JavaQuality EngineeringSeleniumtest automationTips

Post navigation

Previous post
Next post
©2025 Software Testing Journal | WordPress Theme by SuperbThemes