Free browser extension — live on the Chrome Web Store

Locators, managed as infrastructure.
Not buried in files.

Capture a locator once. It gets graded, versioned, and everyone on your team uses the same one.

No account · No setup · Works in your browser today
checkout.example.com/cart
Subtotal$78.00
Shipping$6.00
Total$84.00
Place order
~/team-tests — zsh
$ cor pull --project checkout
↓ resolving locators from the shared repo…
✓ 128 locators synced to .cor-cache.json
  placeOrder  A · promoInput  A · cartBadge  C
$
</> checkout.spec.ts
import { test } from '@corlabs/playwright';
test('places an order', async ({ cor }) => {
  await cor.locator('placeOrder').click();
  // resolved from the graded repo — no selector in your test
});
✓ passed · right locator, first try
Capture in the browser — live today
One capture — every framework you already use
What we’re solving

A real cost. One root cause.

Nobody owns the locator — so everyone keeps re-solving it. This is what owning it looks like today.

pages/CheckoutPage.js
your suite, today
class CheckoutPage {
1placeOrderBtn = '.checkout-form button.primary' // changed 3x this year
2promoInput = '#promo-code' // duplicated in CartPage.js
3cartBadge = '.header .cart > span.count' // broke last sprint
4legacyLink = '//div[3]/nav/ul/li[2]/a' // nobody remembers why
}
✓ File retired
COR
CheckoutPage0 / 4
Nothing migrated yet
AplaceOrderBtn.checkout-form button.primary
ApromoInput#promo-code
CcartBadge.header .cart > span.count
FlegacyLink//div[3]/nav/ul/li[2]/a
The maintenance tax

Nothing in your app broke. The tests broke anyway.

A DOM change breaks selectors, not your product — and someone still has to stop and find out why.

0%
of locator changes inspected in real GitHub repos turned out to be silent breaks, not safe updates
de Moura et al., ReproBreak, arXiv 2026 · 449/580 across repos incl. Playwright’s own
0%
of XPath locators stop resolving after real-world site changes — and in 19% of cases, neither ID nor XPath survives
Kluge & Stocco, Empirical Software Engineering 2026 · 10,376 element pairs across 30 major sites
0%
of test-script failures traced to fragile locator design — the #1 root cause found
Zhang et al., ASE 2025 · 120 real workflows replayed on live top-ranked sites

Locator drift repeats — the same selector, re-found by every engineer, every run. COR fixes it once, for everyone.

Why the usual fixes don’t hold

You’ve already tried the obvious answers.

Each one fixes a test. None fix the real cost: nobody agrees on the right locator.

“Cursor and Copilot already write good locators.”

Still no agreement

Two engineers, two different selectors for the same button — nothing reconciles them. Across 623M commits analyzed since AI coding took off, duplication is up 81% and code reuse is down 70%: a generator that starts fresh every time can't converge on a shared answer. COR stores the one everyone reuses, so the answer stops regenerating.

GitClear data, via LeadDev · Jul 2026

“Self-healing and AI regeneration fix this instantly.”

Doesn’t persist

They fix the run, not the record — the heal dies when the test ends. COR records the fix once, for everyone, so nobody re-solves it next time.

“We already use the Page Object Model.”

Still manual

Still a hand-edited file — updated per change, duplicated unnoticed, no visibility into what's about to break. COR retires it: one centralized, versioned home where a fix updates every test in seconds, no code change required.

Did the AI era solve this?

Generation got easier. Maintenance didn’t.

Writing a locator got solved — AI will hand you one in seconds. What happens after the DOM changes next Tuesday is still entirely on you. Autonomous repair agents don't fix the test, they fix the run, however they have to — and agents that skip locators entirely just pay to rediscover the same element, every single step.

“AI regeneration repairs failing tests for you.”

It deletes the evidence

An independent 2026 study of autonomous test-repair agents found only 10% of scenarios converged on the first attempt, 38% produced no runnable test at all — and documented the agent weakening assertions or deleting the test case outright to force a "passing" result. COR fixes the locator, not the test's ability to catch a real bug.

Lee, arXiv preprint · May 2026, 636 test executions

“Browser agents read the page live — no locators needed.”

Rediscovery, per step

One engineer measured 1M+ tokens for a single 20-step test; another rewrote her agent off browser-agent tooling entirely after finding it slow, token-inefficient, and flaky. Re-deriving the element every step means paying full price for the same lookup — forever. COR resolves it once and hands agents the same graded locator to call.

Practitioner reports, Hacker News · 2025–2026
The complete solution

One place. Every locator. No more guessing.

Capture it once, grade it instantly, and give the whole team one place to reuse it — no rewrite, no re-discovery, no code change. Tracked the whole time, so you always know what's running and what's about to break.

One locator, start to finish
1

Capture it, graded

Click any element in the browser — it's named, stored, and scored A–F on the spot. See how the browser extension grades a locator.

2

Store, centrally

Not a new file to keep in sync — the entry lives in COR, not in your repo.

3

Migrate the existing suite

Your current page objects come in as-is — nothing to rewrite by hand first. How the SDK and CLI resolve locators at run time.

4

Resolve, and learn

Every run pulls the current locator from the repo, not a hardcoded string.

5

When a test fails

COR doesn't just report red — it tells you what changed, and tries to fix it. Review a locator change like a code change in Studio.

placeOrder getByRole('button', { name: 'Place order' })A
promoInput [data-testid="promo"]A
cartBadge .header .cart > span.countC
legacyLink //div[3]/nav/ul/li[2]/aF

Grade F is the XPath that breaks next sprint. COR tells you now.

Coming soon · the platform

Your locators, finally visible.

COR Studio will give the whole team one view of every locator — its score, its history, and what's being healed. In active development.

studio.corlabs.dev/acme/web-app
Dashboard
Locators
Merge Requests3
Health
Settings
Locators⑂ main🔍 Search locators…
NameScoreChangedStatus
checkout.placeOrderButtonrole● 962h agoHealthy
checkout.emailInputtestid● 942h agoHealthy
login.ssoButtonrole● 931d agoHealthy
cart.couponFieldcss● 713d agoWatch
nav.accountMenuxpath● 386d agoHealing PR
checkout.placeOrderButton
v4 · reviewed & approved
96low risk
Exports
playwright getByRole('button', …)
cypress cy.findByRole('button', …)
selenium By.cssSelector(…)
History
v4 healed after DOM change · 2h ago
v1 initial capture · 6d ago
Get on the list

Be first when the SDK ships.

Use the extension today. Join the waitlist to get the CLI, the hosted repo, and the day the token tax stops being yours to pay.

Add to Chrome now — no waiting, no account.