β€’
Drizz raises $2.7M in seed funding β€’
β€’
Featured on Forbes
β€’
Drizz raises $2.7M in seed funding β€’
β€’
Featured on Forbes
Logo
Schedule a demo
Blog page
>
Why Test Automation Fails and How to Fix It

Why Test Automation Fails and How to Fix It

Why test automation fails at most companies, with the five failure modes QA leads actually hit and concrete fixes for each one.
Author:
Asad Abrar
Posted on:
June 16, 2026
Read time:

Three things to know before reading:

  1. Capgemini's World Quality Report found that up to 50% of automation budgets get consumed by script maintenance, not new test coverage.
  2. Google's engineering team reported that 84% of pass-to-fail transitions in their CI system were caused by flaky tests, not real code regressions.
  3. Most automation projects don't fail on day one. They fail slowly, over 6 to 18 months, as maintenance costs outgrow value suite produces.

‍

Why test automation fails slowly, not all at once

There's a stat that gets repeated often: roughly 60% of test automation initiatives fail to meet expectations. That number comes from industry surveys across companies of all sizes, and it tracks with what most QA leads have seen firsthand.

But reason isn't "they picked wrong tool." The Capgemini World Quality Report 2024-25 found that 57% of organizations cite a lack of comprehensive test automation strategy as their top barrier to advancing automation. The tool works fine. The problem is what happens around it:

  • Which tests get automated, and in what order
  • How tests are written (stable selectors vs. brittle ones)
  • Whether anyone budgets for ongoing maintenance
  • Whether team tracks ROI after first quarter

This is why understanding benefits of test automation without understanding failure modes is dangerous. Teams invest expecting faster releases and fewer bugs. They get faster releases for three months, then watch suite degrade until CI is red more often than green.

Problem 1: automating wrong tests first

The first instinct is to automate everything. Start with login, then registration, then homepage, then settings. Teams work down a list of screens rather than a list of business risks.

This fails because not all tests have equal value. A flaky test on a settings page that nobody visits daily costs same maintenance time as a flaky test on checkout, but checkout is one that blocks revenue. When you automate 200 tests without ranking them by business impact, you end up maintaining 200 tests but only 30 of them actually catch regressions that matter.

The fix is to start with flows that, if broken, would cause most damage. For most apps, that's:

  • The purchase or sign-up funnel
  • The core transaction loop (place order, make payment, confirm booking)
  • Authentication (login, password reset, session handling)
  • Any flow that touches payments or user data

Automate those first, stabilize them, and then expand. You can write test cases for everything else, but keep them manual until core suite is running clean. This applies whether you're running Selenium, Cypress, Playwright, or any mobile framework.

Problem 2: selectors break on every UI change

This is most common reason why test automation fails after initial setup period. Every selector-based framework, whether it uses XPaths, CSS selectors, accessibility IDs, or resource IDs, ties test to internal structure of UI. When a developer renames a button ID, moves a div, or swaps a component library, test breaks. The app works fine. The user sees no difference. But test fails.

A BrowserStack press release from November 2025 reported that teams spend an average of 15 minutes fixing each broken locator, with some organizations losing up to half their QA time to test maintenance instead of building new features.

On a suite with 300 tests, even a 5% breakage rate per sprint means 15 broken tests. That's nearly 4 hours of triage and repair, every two weeks, producing zero new coverage. Multiply that by a year and cost is clear. A QA engineer making $120,000 annually who spends 30% of their time fixing selectors is burning $36,000 per year on maintenance that doesn't find a single bug.

The fix depends on how deep you want to go:

  • At shallow end: use stable selectors (data-testid attributes), enforce a selector naming contract between QA and dev, and flag any PR that changes a test ID.
  • At mid level: abstract selectors behind Page Object Models so a broken locator only needs one fix, not twenty.
  • At deeper end: consider tools that don't use selectors at all, like vision-based testing (more on this in Drizz section below).

Problem 3: flaky tests destroy confidence in suite

Flaky tests are tests that pass and fail on same code without any real change. Common causes include:

  • Timing issues and race conditions (element loads after test tries to click)
  • Test order dependencies (test B relies on state from test A)
  • Shared state between tests (one test's data leaks into another)
  • Network variability (API calls that timeout intermittently)

The Google Testing Blog (John Micco) reported that 84% of pass-to-fail transitions in their CI system involved a flaky test, not a real regression. At their scale, with a 1.5% flake rate across a project with 1,000 tests, roughly 15 tests show red in any given cycle. Each one demands investigation.

The damage goes beyond wasted time. When suite is flaky, developers stop trusting it. They merge code with red pipelines because "it's probably just flaky." At that point, automated regression testing stops being a safety net and becomes noise that everyone ignores.

The fix has two parts:

  • Quarantine flaky tests. Tag them, move them out of blocking CI path, and file tickets to fix them within a defined SLA. Two sprints is a reasonable deadline.
  • Prevent new flakes. Require explicit waits or auto-wait mechanisms, isolate test state so no test depends on another test's output, and run each test in a clean environment.

If your framework doesn't support auto-wait natively (Selenium doesn't), you'll write and maintain retry wrappers yourself. That's more code to maintain. Frameworks like Cypress and Playwright handle this better out of box.

Problem 4: maintenance scales linearly, but coverage value doesn't

This is economics problem that sinks most automation efforts over time. Every new test you add creates an ongoing maintenance liability. But bug-finding value of each additional test drops as you cover more of core flows.

The Capgemini World Quality Report has consistently found that up to 50% of automation budgets get consumed by script maintenance. That's money spent keeping existing tests alive, not expanding coverage or finding new bugs. The pattern is consistent across industries and team sizes: senior engineers, who are only ones with enough context to triage complex failures, end up spending their most expensive hours on upkeep.

The result is a team that looks busy but isn't expanding coverage. New features ship without tests because "we didn't have time." The suite grows, but ratio of value to cost gets worse every quarter.

The fix is to treat tests like code with a carrying cost:

  • Track maintenance hours per test. If a test breaks more than three times in a quarter and has never caught a real bug, delete it.
  • Run a quarterly test maintenance review where team identifies most expensive tests and decides whether to fix, rewrite, or remove them.
  • Set a maintenance budget. If your team spends more than 40% of QA time on upkeep, something is structurally wrong with suite or framework.

Problem 5: ignoring mobile, or assuming web tools work there

Teams that ship both a web app and a mobile app often try to use same framework for both. Selenium handles web side, and Appium (which uses WebDriver protocol) handles mobile. In theory, skill set transfers. In practice, Appium introduces a second set of problems:

  • Slower execution than web-based frameworks
  • More brittle selectors (Android resource IDs change between builds)
  • Emulator and simulator setup complexity
  • A different flake profile driven by OS-level popups, permission dialogs, and async screen loading

Mobile apps are harder to automate than web apps. The UI is more dynamic, screens load asynchronously, and popups (permission dialogs, app update prompts, system alerts) appear unpredictably. Selector-based mobile testing has all same problems as web testing, plus these on top.

If your product is mobile-first and you're wondering why test automation fails despite having "full coverage," framework might be root cause. A 200-test Appium suite that breaks 10% of time per sprint isn't a coverage win. It's a maintenance liability.

How Drizz fixes problems that break test automation

Drizz is built for Android, iOS, and mobile web testing. It uses Vision AI instead of selectors: engine reads screen way a human does, finding elements by what they look like and what text they display, not by DOM paths or resource IDs.

A Drizz test reads like this:

Tap on "Add to Cart"
Scroll down until "Proceed to Pay"
Type "2" in quantity field
Validate "Order Confirmed" is visible

‍

Each line is a plain English command. There are no XPaths, no CSS selectors, and no accessibility IDs to maintain. When a developer renames a button's internal ID or restructures layout, test still passes because button still looks same to Vision AI.

This directly addresses problems 2 and 4 from this blog. The selector breakage problem disappears because there are no selectors. The linear maintenance scaling slows down because tests don't break from UI refactors.

Drizz also handles mobile-specific flake sources that trip up Appium:

  • Unexpected popups (permissions, app updates, cookie banners) are handled automatically by a built-in popup agent called unblocker. No extra test code needed.
  • Adaptive wait logic replaces explicit waits and Thread.sleep() calls. Drizz waits for screen to stabilize before executing next step.
  • IF/ELSE conditional blocks handle cases where UI state varies between runs (logged in vs. logged out, different A/B test variants).

For teams that have felt maintenance cost of Appium suites firsthand, Drizz consolidates mobile testing into a single tool that doesn't require selector management or framework-level code.

FAQ

Why does test automation fail at most companies?

The main causes are selector breakage, flaky tests, poor test prioritization, and maintenance costs that outgrow coverage value.

How much time do teams spend on test maintenance?

Industry data shows 50 to 70% of QA budgets go to maintaining existing tests rather than writing new ones.

Can flaky tests be completely eliminated?

Not entirely, but quarantining, state isolation, and auto-wait mechanisms reduce flake rates to manageable levels.

Is test automation still worth investment?

Yes, when scoped correctly. Automating high-value flows first and controlling maintenance costs makes ROI positive.

What's biggest test automation mistake?

Automating every test case without ranking by business risk. Low-value tests cost same to maintain as high-value ones.

How do selector-free tools reduce maintenance?

They find elements visually instead of by DOM path, so UI refactors that change internal IDs don't break tests.

‍

About the Author:

Asad Abrar
Co-founder & CEO, Drizz
Ex-Coinbase PM and IIT Kharagpur grad killing flaky mobile tests by day, and obsessing over F1 lap timings by night.
Schedule a demo