Platform

Solutions

Resources

Platform

Solutions

Resources

Platform

Solutions

Resources

Blog

10 Test Automation Challenges and How to Fix Them

Virtuoso QA

Published on

Test Automation Challenges
eBook CTA Background
RECOMMENDED RESOURCES

The Ultimate Enterprise Guide To Agentic Testing

AI agents can write, fix and triage your tests at scale. See how to use them in QA while keeping people in control of everything that ships.

Get the eBook →

Enterprise guide to agentic testing
eBook CTA Background
RECOMMENDED RESOURCES

The Ultimate Enterprise Guide To Agentic Testing

AI agents can write, fix and triage your tests at scale. See how to use them in QA while keeping people in control of everything that ships.

Get the eBook →

Enterprise guide to agentic testing
eBook CTA Background
RECOMMENDED RESOURCES
Enterprise guide to agentic testing

The Ultimate Enterprise Guide To Agentic Testing

AI agents can write, fix and triage your tests at scale. See how to use them in QA while keeping people in control of everything that ships.

Get the eBook →

eBook CTA Background
RECOMMENDED RESOURCES

The Ultimate Enterprise Guide To Agentic Testing

AI agents can write, fix and triage your tests at scale. See how to use them in QA while keeping people in control of everything that ships.

Get the eBook →

Enterprise guide to agentic testing

Table of contents

Lorem ipsum

Lorem ipsum

Lorem ipsum

Lorem ipsum

Lorem ipsum

Most test automation projects start with big plans. Build a framework, automate the regression suite, cut testing time, release faster. A year later, a lot of teams find themselves somewhere else entirely: hundreds of tests that break every release, a handful of people who can fix them, and a regression cycle that still takes days.

The problem usually isn't automation itself. It's the way it's been built. Tests tied to fragile locators, written in code only a few people can read, and maintained by hand will always struggle to keep up with an app that changes every sprint.

In this guide, we'll go through the ten most common test automation challenges, why each one happens, and what actually fixes it. You'll also find a quick self-assessment to see where your team stands, and a practical plan for getting automation back on track.



The 10 Test Automation Challenges

#

Challenge

Main Symptom

What Fixes It

1

Test maintenance

Tests break every time the UI changes

Tests that find elements in several ways, with fixes your team approves

2

Slow test writing

New tests take days to build

Plain English tests, and drafting tests from requirements

3

Flaky tests

Tests pass and fail with no code change

Waiting for real conditions, stable data and isolated tests

4

Skills gap

Only a few people can write or fix tests

Tools the whole team can use

5

Limited coverage

Key journeys still tested by hand

Prioritising by risk, and making tests faster to create

6

CI/CD integration

Tests run too slowly or too rarely to help

Running tests in parallel, in the pipeline, on every change

7

Cross-browser coverage

Bugs only show up in one browser

One test that runs across every browser you support

8

Test data

Tests fail because the data changed

Test data kept separate, and created on demand

9

Enterprise applications

Each business system needs its own specialists

Reusable test building blocks across systems

10

Proving the value

Nobody can show what automation is saving

Tracking the right numbers from day one



  1. Test Maintenance Takes Over

This is the challenge almost every team runs into. Apps change constantly. A button moves, a class name is regenerated, a page is redesigned. Each change can break tests even though the app still works, and someone has to find and fix every one.

As the test suite grows, so does the upkeep. Before long, the people who should be adding new coverage spend most of their week keeping old tests alive, and the suite stops growing.

Why It Happens

Most scripted tests find each element using one fixed locator, like an ID or an XPath. When that one locator changes, the test fails.

// Breaks if the layout or the generated class name changes
driver.findElement(By.xpath("//div[2]/form/div[4]/button[@class='btn-a91f']")).click();
// Breaks if the layout or the generated class name changes
driver.findElement(By.xpath("//div[2]/form/div[4]/button[@class='btn-a91f']")).click();
// Breaks if the layout or the generated class name changes
driver.findElement(By.xpath("//div[2]/form/div[4]/button[@class='btn-a91f']")).click();
// Breaks if the layout or the generated class name changes
driver.findElement(By.xpath("//div[2]/form/div[4]/button[@class='btn-a91f']")).click();

How to Fix It

Use tests that find elements the way a person would, using several clues like the label, the type of element and where it sits on the page. When the UI changes, the tool can usually still find the element, and suggest an updated step for someone to approve.

Keep a person in the loop for those fixes. A test that quietly "fixes itself" might also hide a real bug.


  1. Writing Tests Takes Too Long

With traditional frameworks, a single end-to-end test can take days to write, debug and stabilise. Features now ship weekly or even daily, so test writing falls further behind with every sprint, and manual testing fills the gap.

How to Fix It

Remove the coding step where you can. When tests are written in plain English, testers and business analysts can build them directly. Tools that suggest the next step as you write, or draft tests from the requirements you already have, cut the time even further.


  1. Flaky Tests

Flaky tests pass one run and fail the next, without any change to the code. They're one of the fastest ways to lose trust in automation. Once people start saying "it's probably just flaky", real failures get ignored too.

Common Causes

Cause

What Happens

Fixed waits

The test waits a set time, and fails if the page is slower than usual

Shared test data

One test changes data another test relies on

Test order

A test only passes if another one ran first

Unstable environments

A slow service or a restart makes tests fail at random

Fragile locators

Dynamic IDs change from one page load to the next

How to Fix It

Wait for the thing you need, not a set amount of time. Give each test its own data. Make sure tests can run in any order. And track which tests fail intermittently, so you can fix or quarantine them rather than ignoring every failure.

// Flaky: guesses how long the page will take
await page.waitForTimeout(3000);
await page.click('#confirm');

// Steadier: waits until the button is actually ready
await page.getByRole('button', { name: 'Confirm order' }).click();
// Flaky: guesses how long the page will take
await page.waitForTimeout(3000);
await page.click('#confirm');

// Steadier: waits until the button is actually ready
await page.getByRole('button', { name: 'Confirm order' }).click();
// Flaky: guesses how long the page will take
await page.waitForTimeout(3000);
await page.click('#confirm');

// Steadier: waits until the button is actually ready
await page.getByRole('button', { name: 'Confirm order' }).click();
// Flaky: guesses how long the page will take
await page.waitForTimeout(3000);
await page.click('#confirm');

// Steadier: waits until the button is actually ready
await page.getByRole('button', { name: 'Confirm order' }).click();


  1. The Skills Gap

Traditional automation needs programming skills: Java, Python or JavaScript, plus page object models, waits and error handling. People with those skills are expensive and hard to hire.

The result is a bottleneck. When only two or three people on a QA team can write and fix automated tests, everything waits for them. You haven't really automated testing. You've moved the manual work from running tests to maintaining them.

How to Fix It

Choose tools the whole team can use. Plain English tests let manual testers, business analysts and product owners contribute, while engineers focus on the harder problems. The people who know the business rules best can then turn that knowledge into tests directly.


  1. Limited Test Coverage

Despite years of investment, many teams still test their most important journeys by hand. Automated coverage tends to stall at the easy stuff, because the complex journeys are the hardest to script and the first to break.

Limited coverage means limited confidence. If you can't check a release quickly, you can't release quickly.

How to Fix It

Start with risk, not volume. List the journeys where a failure would cost the most, like checkout, payments, claims or onboarding, and automate those first. Then make test creation fast enough that coverage can keep growing as the app does.


  1. CI/CD Integration

Automated tests are most useful when they run on every change and report back quickly. Many teams struggle here. Set-up is complicated, suites take hours to run, and results are hard to make sense of, so tests end up running nightly or weekly instead.

How to Fix It

Run tests in parallel on cloud infrastructure, so a full regression suite finishes in minutes rather than hours. Trigger them from your pipeline on every change. Make failures easy to understand, with the failing step, screenshots and logs attached, so developers can act on them straight away.

To see how regression tests can run on every release without slowing the pipeline down, take a look at Virtuoso QA's regression testing.


  1. Cross-Browser Coverage

Web apps have to work in Chrome, Safari, Firefox and Edge, on desktop and mobile. Testing every combination by hand isn't practical. Automating them with traditional frameworks often means maintaining browser-specific workarounds, which multiplies the upkeep.

How to Fix It

Write each test once and run it across every browser and operating system you support, on a cloud grid. Tests that find elements by what users see, rather than browser-specific details, hold up much better across browsers.


  1. Test Data

Realistic tests need realistic data. Many teams end up with values written straight into their tests, which break when the environment changes, or a homemade data set-up that becomes yet another thing to maintain.

How to Fix It

Keep test data separate from test logic, so the same test can run with many sets of data. Create data on demand rather than relying on whatever's already in the environment. And use AI to generate realistic data for edge cases, without copying real customer records.

If you're comparing options for this, our roundup of test data management tools covers ten of them side by side.


  1. Enterprise Applications

Enterprises don't run one app. They run SAP, Salesforce, Oracle, Dynamics 365, ServiceNow and many custom systems, often all in one business process. Each one has its own quirks, and traditional automation tends to need a specialist for each.

That creates silos. The Salesforce test team can't help with SAP, the SAP specialists can't help with the custom portal, and journeys that cross several systems fall between the gaps.

How to Fix It

Build tests from reusable building blocks, like "create a customer" or "approve a purchase order", that can be shared across teams and journeys. Use one approach for every browser-based system, so a journey that starts in Salesforce and ends in SAP can be tested in one go.

For Dynamics 365 and SAP, Virtuoso QA's composable testing gives you ready-made building blocks, so you start from a foundation rather than a blank page.

And for more on building tests that can be reused across journeys and teams, see our guide to reusable test cases


  1. Proving the Value of Automation

Sooner or later, someone asks what automation is actually saving. Many teams can't answer, because they never measured where they started. Without numbers, automation looks like a cost rather than an investment, and budgets get cut.

How to Fix It

Measure a few things from day one, and keep tracking them:

Metric

What It Shows

Time to write a test

Whether automation is keeping up with new features

Time spent fixing tests

Whether upkeep is under control

Regression cycle time

How quickly you can check a release

Share of key journeys automated

Whether coverage is going where the risk is

Bugs found before release vs after

Whether automation is catching what matters

Flaky test rate

Whether people can trust the results

A Quick Way to Estimate Upkeep Cost

Here's a simple illustrative calculation. Plug in your own numbers.





Halving that upkeep would free up more than 2,000 hours a year to spend on new coverage instead.



Quick Self-Assessment: Where Does Your Team Stand?

Answer these honestly. The more "yes" answers in the right-hand column, the more your automation is likely to be struggling.

Question

Healthy

Warning Sign

How much of your team's automation time goes on fixing tests?

Less than a quarter

More than half

How many people can write and fix automated tests?

Most of the QA team

Two or three specialists

How long does a full regression run take?

Minutes to an hour

Days

Do people trust a failed test?

Yes, failures get investigated

"It's probably just flaky"

Are your riskiest journeys automated?

Yes

They're still tested by hand

Can you say what automation saved last quarter?

Yes, with numbers

Not really



How to Get Test Automation Back on Track

Step

What to Do

Measure where you are

Record how many tests are automated, how much time goes on upkeep, how long regression takes and how often tests fail for no reason

Pick one painful area

Start with the regression suite that breaks most, a journey that crosses several systems, or tests only specialists can touch

Prove it on real releases

Run the new approach alongside the old one for a few releases, and compare the upkeep, speed and bugs caught

Build for reuse

Turn common steps into shared building blocks before expanding, so coverage grows without upkeep growing with it

Expand and keep measuring

Add more journeys and teams, and keep tracking the metrics above to show the value



How Virtuoso QA Helps with Test Automation Challenges

Challenge

How Virtuoso QA Helps

Test maintenance

Finds elements using several clues, and when the UI changes, suggests a fix for your team to accept or reject

Slow test writing

Tests are written in plain English, StepIQ suggests the next step as you write, and Touchstone drafts tests from your specs and stories, with a named person approving each requirement

Flaky tests

Tests run on a deterministic engine that waits for the page to be ready, so the same test gives the same result every run

Skills gap

Manual testers and business analysts can write and read tests without code

CI/CD integration

Runs from Jenkins, Azure DevOps and GitHub Actions, in parallel, with root cause analysis on every failure

Cross-browser coverage

The same test runs across 2,000+ browser and OS combinations

Test data

Data is kept separate from tests, and AI generates realistic test data from a plain English description

Enterprise applications

One approach for any browser-based system, with ready-made building blocks for Dynamics 365 and SAP

Existing Selenium tests

GENerator converts existing Selenium tests into plain English, so you don't start from scratch

Proving the value

Every run records what was tested, against which requirement, the result and who approved the test

To see how this works on your own applications, take a look at Virtuoso QA's AI test automation.

And when someone asks exactly what was tested before a release, Virtuoso QA's release evidence has the answer ready.

Test Automation Challenges FAQs

Why do automated tests become flaky?

How much time should teams spend on test maintenance?

How can organizations overcome the test automation skills gap?

How does AI improve test automation?

What is the difference between AI native and AI add on test automation?

How do you measure test automation success?

Written by

Virtuoso QA

Guest Author

Written by the Virtuoso QA team or a guest contributor. These pieces draw on platform data, customer outcomes and the team’s work with enterprise QA leaders.

See what your next release looks like with Virtuoso

Book a walkthrough on your applications and your workflows. Bring a requirement, a user journey, or a brittle Selenium script, and watch the loop run on something you recognise.

See what your next release looks like with Virtuoso

Book a walkthrough on your applications and your workflows. Bring a requirement, a user journey, or a brittle Selenium script, and watch the loop run on something you recognise.

See what your next release looks like with Virtuoso

Book a walkthrough on your applications and your workflows. Bring a requirement, a user journey, or a brittle Selenium script, and watch the loop run on something you recognise.

Virtuoso QA is establishing the standard of proof for software releases. Its governed QA loop turns business requirements into tests for any browser-based application: AI proposes, a deterministic engine executes, a person approves what matters, and every decision leaves evidence.

Trust Center

AICPA

SOC

WAVE STRONG PERFORMER

@ Copyright 2026 SpotQA, Creators of Virtuoso QA

Virtuoso QA is establishing the standard of proof for software releases. Its governed QA loop turns business requirements into tests for any browser-based application: AI proposes, a deterministic engine executes, a person approves what matters, and every decision leaves evidence.

Trust Center

AICPA

SOC

WAVE STRONG PERFORMER

@ Copyright 2026 SpotQA, Creators of Virtuoso QA

Virtuoso QA is establishing the standard of proof for software releases. Its governed QA loop turns business requirements into tests for any browser-based application: AI proposes, a deterministic engine executes, a person approves what matters, and every decision leaves evidence.

Trust Center

AICPA

SOC

WAVE STRONG PERFORMER

@ Copyright 2026 SpotQA, Creators of Virtuoso QA