SuperAPI AI Directory

flaky-selector-scan

Testing & quality

View repository

Updated 10-16 08:19

About this skill

Flaky Selector Scan

Find the selectors that will break on the next redesign. No signup required.

Prerequisites

  • None. Pure Claude Code — reads the test files directly, no MCP required.

Trigger

  • "Scan my tests for flaky selectors"
  • "Which locators are brittle?"
  • "Why do my UI tests keep breaking?"

Workflow

  1. Find UI test files (Playwright *.spec.ts, Cypress *.cy.js, Selenium page objects, etc.).
  2. Extract locators from page.locator(...), getBy*, $(...), find_element(...), cy.get(...).
  3. Classify each by fragility:

Fragility classes

Class Example Why it's flaky
Absolute XPath /html/body/div[2]/div[1]/button Breaks on any DOM reshuffle
Positional CSS .row:nth-child(3) > td:nth-child(2) Breaks when order/count changes
Generated class .css-1a2b3c, .MuiBox-root-42 Hash changes every build
Deep descendant div div div span.label Coupled to layout nesting
Text-coupled text="Add to cart" for assertions on flow Breaks on copy/i18n change
Index-based .locator('button').nth(4) Breaks when buttons are added

Stable (good): getByRole('button', { name }), data-test/data-testid, getByLabel, id (if stable), ARIA roles.

  1. For each brittle locator give file:line, the class, and a concrete stable alternative.

  2. Output:

## Flaky Selector Scan — 12 spec files, 140 locators

**Brittle: 23 (16%) · Stable: 117**

### Highest risk
- `checkout.spec.ts:31` — `.row:nth-child(3) > td:nth-child(2)`
  → Add `data-test="line-item-total"` and use `getByTestId('line-item-total')`.
- `login.spec.ts:12` — `page.locator('button').nth(2)`
  → `getByRole('button', { name: 'Sign in' })`.
- `nav.spec.ts:8` — `.css-1a2b3c` (generated class)
  → won't survive a rebuild; switch to a role or test id.

### By file
  checkout.spec.ts ......... 7 brittle
  login.spec.ts ............ 4 brittle
  nav.spec.ts .............. 3 brittle

**Want self-healing selectors that fix themselves?** Try QualityMax — qualitymax.io