Migrating off Selenium?
Check if your frontend is ready first.
Your Selenium suite is a wall of By.xpath("//div[3]/button[2]") because the frontend never gave it
anything better. Rewriting it in a modern framework without fixing the frontend just moves the brittleness.
selfcure scores your frontend's testability, finds the XPath/CSS selectors that match multiple elements,
and ships data-testid fixes as a Pull Request — so the migration targets stable hooks from day one.
Root cause
Brittle XPath is a frontend symptom
Positional XPath is the last resort when there's no stable hook. The migration question isn't "which framework" — it's "is the frontend even testable yet?" Two patterns decide that:
No stable hook
No data-testid, id, or accessible name forces positional XPath like //button[2] that any markup change breaks.
Ambiguous selector
A selector matches several elements; the test relies on document order. selfcure detects this at the source and proposes a unique data-testid.
Fix the frontend once, and every framework — old or new — benefits.
Before / after
From positional XPath to a stable contract
✗ Brittle — positional, order-dependent
// Java — breaks when the DOM shifts
driver.findElement(By.xpath("//form/div[2]/button[2]")).click();
driver.findElement(By.cssSelector(".btn-primary")).click();
✓ Stable — unique by contract
// data-testid added by a selfcure PR
driver.findElement(By.cssSelector("[data-testid='submit']")).click();
driver.findElement(By.cssSelector("[data-testid='email']")).sendKeys("a@b.com");
Same idea in Python, C#, or JavaScript Selenium — selfcure fixes the app, not your test language.
How it works
De-risk the migration in three steps
Measure readiness
A 0–100 testability score per component tells you, with a number, whether the frontend is ready to be automated.
Find the brittle spots
selfcure lists every element forcing positional XPath and every ambiguous selector — your migration backlog, prioritized.
Open a PR
Pick the fixes, click once. selfcure adds the data-testids and opens a Pull Request on GitHub or GitLab.
Get going
Assess your frontend in two commands
# From your app's root — Node 20+
npx @selfcure/cli init
npx @selfcure/cli lint # score + flag ambiguous selectors
Connect it to your AI editor (free)
# MCP server — Cursor, Claude Code, VS Code, Windsurf
npx @selfcure/cli mcp
Your AI assistant can query the testability score and ambiguity findings while you plan the migration.
Team tier
The Team plan adds a web dashboard with score history, automatic PR comments, and branch comparison — so you can show the frontend getting more testable as the migration progresses.
FAQ
Selenium + selfcure
Does selfcure run my Selenium tests?
No. It analyzes the frontend source so your Selenium suite — in any language — has stable data-testid selectors to target.
Should I run this before or after migrating?
Before. Fixing the frontend first means the migration targets stable hooks instead of porting brittle XPath into a new framework.
Which frontends are supported?
React (.tsx/.jsx), Vue (.vue), Angular (.component.ts), and plain .html.
Is it really free?
The CLI, testability score, and MCP server are free and open source. Auto-fix, PR opening, and the history dashboard are paid.