TAMASH · Shield

Your interface changes.
Your tests keep running.

Shield heals supported locator failures while the test runs, shows you every heal, and turns the fixes worth keeping into code changes. RunSights is included.

For Playwright and Cucumber.js teams, locally and in CI.

Shield · CheckoutLast 30 days
Healed255locators that broke and were healed
Needs a look5healed to an element that may be wrong
Fixed for good12by maintenance, verified
  • Healed21 timesa stale id on a described locator is healed by the rules
  • Healed5 timesprojects: refresh after a rename
  • Needs a look1 timeaccount: a stale CSS class for Create access token
A heal, start to finish

Recover the action.
Keep the business check.

Healing helps a click, fill, select or check find the element it meant. Your assertions still decide whether the application is right.

01 · During the run
npx playwright test
[self-healer] checkout.spec.ts:18 — locator.click "Pay now" -> HEALED [by TAMASH, suggested="getByRole('button', { name: 'Pay now' })"]
  ✓ checkout.spec.ts › the payment step opens
  8 passed (6.2s)

The button was renamed in the last deploy. The test carried on, and its assertion still checked the order.

02 · In the portal
checkout.spec.ts · the payment step openslocator('#pay-btn')getByRole('button', { name: 'Pay now' })Healed · 4 runs

Every heal is listed by test. One that may have found the wrong element is marked for a person to check. The same break elsewhere gets the same heal, counted once.

03 · Made permanent
npx tamash-shield apply-heals --dry-run
$ npx tamash-shield apply-heals --dry-run
  1 change in 1 file · tests/checkout.spec.ts:18
  + getByRole('button', { name: 'Pay now' })
  - locator('#pay-btn')
  Re-verify: the payment step opens

Runtime healing never edits your files. apply-heals does, after a preview; in CI it opens a pull request.

In your workflow

Locally and in CI, the same way.

On a laptop

Sign the machine in once with npx tamash-shield login. From then on every run heals as it goes and reaches RunSights in your name.

In CI

The project key and a service token as secrets. Healing runs the same way, and apply-heals after the job opens the pull request.

What Shield never touches

  • expect() assertions. A silently "fixed" assertion could hide a real bug.
  • Drag and drop, and waitFor. One side of a drag cannot be guessed from the other, and a wait that ran out may be a correct outcome.

What is sent to the service

  • When a locator breaks: the action, the element's description, the error, and the page's accessibility outline with secrets removed.
  • Never the values your tests type or your test data. Nothing of the page is stored.
Works with

Your runner, your tests, as they are.

Playwright Test

Import test and expect from @vibetestq/tamash-shield instead of @playwright/test; init does it for you. Everything else stays.

Playwright library and page objects

Wrap a page with bindPageActions where you create it. Chain .describe('Pay now button') on plain CSS locators so the healer knows what it is looking for.

Cucumber.js

Steps that drive Playwright heal the same way, and the RunSights formatter records each scenario and the Playwright calls it made.

Try Shield on your own tests.

Your existing suite, unchanged, with every heal in the portal.