GuidesEngineering

Selenium Testing in 2026: When It Is Still the Right Answer

Shiplight AI Team

Shiplight AI Team

Updated on July 31, 2026

View as Markdown
Illustrated Shiplight blog cover: a standards-based browser driver connecting many language clients to many browsers, with assembly pieces alongside.

Most articles about Selenium in 2026 are written to sell something else. The honest position is narrower and more useful: it remains the right choice for a specific set of situations, and the wrong one for most new projects, and the reasons are concrete rather than a matter of taste.

What it is

Selenium drives real browsers through WebDriver, a W3C standard. Not a wrapper around one browser's debugging protocol; an actual specification that browser vendors implement.

Two consequences follow, and they are the whole case for it.

Every browser, including old ones. If you must support a browser version that modern frameworks dropped, or an enterprise-managed environment nobody else targets, WebDriver is often the only thing that reaches it.

Six languages, properly. Java, Python, C#, Ruby, JavaScript, Kotlin, all first-class. Not a primary language with ports. For a QA organization standardized on Java or C#, this is not a preference, it is a requirement.

Add Grid, which distributes tests across machines and has been doing so reliably for longer than most alternatives have existed, and you have the case for Selenium in 2026.

What it costs

No automatic waiting. This is the big one. Selenium does what you tell it, when you tell it. Nothing waits for an element to become interactable unless you write the wait.

The consequence is not inconvenience, it is flakiness. Most flaky browser tests are timing assumptions that hold on a fast machine and break in CI, and a framework that does not wait by default produces them at a much higher rate. Explicit waits solve it, correctly written, everywhere, forever. In practice teams write them inconsistently and then spend years on intermittent failures.

Assembly required. Selenium is a library. Test runner, assertions, reporting, parallelism, retries, fixtures, screenshots on failure: you choose and wire each one. That is flexibility if you want it and a pile of decisions that can rot if you do not.

Debugging is thinner. No trace viewer recording a timeline with DOM snapshots per step. When a test fails only in CI, you are reading logs.

More code per test. Explicit waits and manual setup mean more lines for the same behavior, and more lines mean more to maintain.

When to choose it anyway

Your language is not JavaScript. The clearest case. A Java or C# QA organization should not adopt a JavaScript-first framework to get auto-waiting.

You must support unusual or legacy browsers. WebDriver's standards basis reaches places others do not.

You already have a large working suite. A stable Selenium suite is not a problem in need of a migration. Rewriting passing tests is cost with no user-visible benefit. Migrate when something specific stops working, not on principle.

You need Grid's maturity at scale. Some organizations have Grid infrastructure that works and staff who know it.

When not to

New JavaScript or TypeScript project. Auto-waiting alone justifies a modern framework, and you get a runner, parallelism and a trace viewer without assembly. See Playwright vs Puppeteer and Playwright vs Cypress.

Small team without automation specialists. Assembly cost lands on people who would rather be shipping.

Fighting persistent flakiness. If your Selenium suite fails intermittently and nobody trusts it, more explicit waits is treating a symptom. A framework that waits by default removes the category.

Agents in your workflow. Browser tooling for coding agents standardized on Playwright, so an agent verifying its own work follows a more mature path there. See Playwright MCP.

The problem no framework solves

Whichever you pick, the thing that kills suites over time is the same: tests bound to selectors that change.

A test finding a button by CSS class works until someone renames the class. A few hundred tests and one redesign later, the suite fails for reasons unrelated to whether the product works. The noisy tests get disabled to unblock a release, nobody re-enables them, and coverage decays while the dashboard stays green.

Selenium suites suffer this more than most, because verbose locator code makes each fix more expensive, so fixes get deferred more often.

And it is accelerating. Coding agents refactor and rename far more aggressively than cautious humans, so selector churn rises at exactly the moment test volume does.

Shiplight works on that layer rather than replacing a driver. Tests are written as intent, transpiled to Playwright plus an AI SDK, and run in ordinary Playwright browsers. A stale locator re-resolves from intent against the current page rather than failing, with the heal surfaced as a reviewable diff. Honest scope: web applications, JavaScript-family execution, and it does not migrate a Selenium suite for you. If your constraint is Java or legacy browser support, Selenium remains your answer and this is not a substitute.

Frequently Asked Questions

1

Is Selenium still used in 2026?

Widely, especially in enterprises with large existing suites, non-JavaScript languages, or unusual browser requirements. It is rarely the choice for a new JavaScript project.

2

Why is Selenium considered flaky?

It has no automatic waiting. Every wait is explicit, and inconsistently written waits produce timing failures that appear in CI and not locally.

3

Should I migrate from Selenium to Playwright?

Only for a reason: persistent flakiness, needing WebKit coverage, or agent tooling. A working suite in a supported language is not worth rewriting.

4

What does Selenium do better than Playwright?

Language breadth beyond JavaScript, reach into legacy and unusual browsers through the WebDriver standard, and mature Grid infrastructure at scale.

5

Can I use Selenium with AI coding agents?

Yes, but the browser tooling ecosystem for agents standardized on Playwright, so the path is less mature.