AxeForge/inspectorbooster
Chrome extension for QA engineers

Stop guessing at CSS selectors.

Open the side panel, hover any element, and InspectorBooster ranks every selector strategy it can find — testid, id, role, aria-label, placeholder, class, CSS path, XPath, text — each scored 0-100 by stability and uniqueness. Organize what you find into scopes and aliases, record whole interaction flows, and export straight to Playwright or Cypress.

How it works

One inspection, every selector strategy

The content script generates all viable selectors for the element under your cursor, scores each one, and hands you the ranked list — not just the first one that happens to match.

Smart selector engine

Generates testid, id, role, aria-label, placeholder, class, CSS path, XPath, and text selectors for every element, each scored 0-100 by stability and uniqueness.

Missing testid tip

Flags elements that lack a data-testid attribute so flaky selectors get caught before they ship into a test suite.

Scopes and aliases

Organize elements into named, nestable scopes (Login Page, Header, Product List) and give them human-readable aliases, searchable by name, description, or tag.

Interaction recording

Captures clicks, inputs, keypresses, and navigation with full ranked selector options per step, then exports the whole flow as a test script.

Selector engine

Ranked by stability, not by luck

Every strategy gets a score for a unique match and a lower score for a non-unique one, so the panel can auto-select your preferred type on every click.

StrategyTypeScore (unique/non-unique)Example
data-testidtestid98 / 78[data-testid="login-btn"]
#idid92 / 52#login-btn
Role + namerole88 / 65role=button[name="Sign In"]
aria-labelaria83 / 56button[aria-label="Close"]
placeholderplaceholder75 / 55input[placeholder="Search..."]
Class chaincss72 / 30-65button.btn.btn-primary
CSS pathcss62 / 35#login-form > div > button
Partial classcss58 / 38[class*="product-card"]
Text (exact)text44//button[normalize-space(.)="Sign In"]
Absolute XPathxpath28//html/body/div[1]/form/button[1]
Workflow

Four views, one panel

01

Inspect

Hover any element from the side panel to see its ranked selector options. Switch RAW / Playwright / Cypress display mode globally, and copy the formatted string ready to paste into test code.

02

Library

Save elements into scopes and give them aliases. Set a scope container selector and framework exports chain through it automatically: page.locator('[data-testid="card"]').getByTestId('buy-btn').

03

Record

Capture clicks, inputs, keypresses, and navigation with a live feed while recording. Rename, exclude, or swap the active selector on any step afterward.

04

Export

Six formats: JSON and YAML (scoped or flat map), plus Playwright .spec.ts and Cypress .cy.js. Preview before download, or paste JSON/YAML back in to import.

Use cases

Why QA engineers reach for InspectorBooster

"This selector will break on the next deploy"

Skip the class-name guesswork — the panel ranks the stable options first and warns when an element has no data-testid at all.

Writing a Playwright suite

Switch the display mode to PW and every copy is already formatted, from a simple click target to a full role query.

page.getByRole('button', { name: 'Sign In' })

Recording a login flow

Click through the flow once with recording on, then export the whole interaction straight to a Playwright spec.

login-flow.spec.ts

Scoping a repeated component

Give a product card scope its own container selector, and every element inside exports chained through it — no duplicated boilerplate.

cy.get('[data-testid="card"]').find('[data-testid="buy-btn"]')
Install

Load it as an unpacked extension

Build the extension

cd extension && npm install && npm run build

Open chrome://extensions and enable Developer mode

Load unpacked — select extension/dist/

Open the side panel — click the extension icon, or open it from the panel button

Full instructions on GitHub