tamash-playwright 0.7.0-beta.3 → 0.7.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -5
- package/dist/bindings/locator.binding.d.ts +1 -0
- package/dist/bindings/locator.binding.d.ts.map +1 -1
- package/dist/bindings/locator.binding.js +13 -10
- package/dist/bindings/locator.binding.js.map +1 -1
- package/dist/healer/index.d.ts.map +1 -1
- package/dist/healer/index.js +192 -34
- package/dist/healer/index.js.map +1 -1
- package/dist/healer/providers/prompt.d.ts +1 -1
- package/dist/healer/providers/prompt.d.ts.map +1 -1
- package/dist/healer/providers/prompt.js +1 -1
- package/dist/healer/vision.d.ts +6 -1
- package/dist/healer/vision.d.ts.map +1 -1
- package/dist/healer/vision.js +3 -9
- package/dist/healer/vision.js.map +1 -1
- package/package.json +3 -1
- package/usage.md +157 -5
package/README.md
CHANGED
|
@@ -170,6 +170,16 @@ test('login test using CSS Selectors', async ({ page }) => {
|
|
|
170
170
|
|
|
171
171
|
This step is optional, but recommended — without it, the healer has to guess purely from a broken CSS selector, which gives it a lot less to work with.
|
|
172
172
|
|
|
173
|
+
## Local vs CI, at a glance
|
|
174
|
+
|
|
175
|
+
Everything below applies identically in both places — same package, same behavior — but a few things are worth knowing up front before you get to the details:
|
|
176
|
+
|
|
177
|
+
| | Locally | In CI |
|
|
178
|
+
| --- | --- | --- |
|
|
179
|
+
| **Healing** | Runs automatically on every `npx playwright test`, using the `.env` file from Step 2. | Runs automatically the same way — set the same variables as CI secrets/environment variables on your test job instead of a `.env` file (there's a real example in [Running `apply-heals` in CI](#running-apply-heals-in-ci-sharded-or-not)). |
|
|
180
|
+
| **Caching** ([below](#not-paying-for-the-same-heal-twice)) | Persists on disk across every run — a real, ongoing saving the longer you keep working. | Only helps *within* one run — most runners start from a fresh checkout each time, so it doesn't carry over between separate CI runs. `apply-heals` landing the real fix is what actually stops repeat AI calls in CI, not the cache. |
|
|
181
|
+
| **`apply-heals`** ([below](#making-a-heal-permanent-apply-heals)) | Run manually whenever you want, preview with `--dry-run`, review the diff yourself, commit when ready. | Runs automatically after your test job and opens a PR for review — nothing ever auto-commits to your branch. |
|
|
182
|
+
|
|
173
183
|
## What else it heals — no extra setup needed
|
|
174
184
|
|
|
175
185
|
Beyond a single broken `click`/`fill`/`getByRole` on the main page, all of this works automatically once you've done Steps 1–2:
|
|
@@ -178,6 +188,20 @@ Beyond a single broken `click`/`fill`/`getByRole` on the main page, all of this
|
|
|
178
188
|
- **Elements inside `<iframe>`s.** `page.frameLocator('#my-iframe')` and anything chained off it heals the same way, scoped correctly to the iframe's own document.
|
|
179
189
|
- **Most of the Playwright API surface**, not just clicks and fills — `check`, `selectOption`, `dragTo`, `dispatchEvent`, read methods like `textContent`/`getAttribute`/`isChecked`, `screenshot`, and more. Methods that can't be safely healed by guessing a replacement element (`dragTo`, `drop`) are still reported honestly on failure, they're just never silently retried with a different element.
|
|
180
190
|
|
|
191
|
+
## When there's no name to match: position-based healing
|
|
192
|
+
|
|
193
|
+
Sometimes the broken element has no useful identity of its own — a plain `<input>` with no name, no working placeholder, and a label that's visually right next to it but never actually linked (no `<label for>`, no `aria-labelledby`). A human finds it instantly by sight; matching purely on accessible name has nothing to grab onto.
|
|
194
|
+
|
|
195
|
+
For exactly these cases, `tamash-playwright` can also identify an element by its relationship to something nearby that *does* have an identity:
|
|
196
|
+
|
|
197
|
+
- **Near a label** — an unlabeled field sitting next to visible text (e.g. "Employee Id" as plain text beside an anonymous textbox).
|
|
198
|
+
- **Scoped to a container** — a name that exists but isn't unique page-wide (a "Yes" button that shows up in several dialogs), disambiguated by which named container it's actually inside.
|
|
199
|
+
- **Containing specific text** — the target is itself a container (a table row, say) identified by content inside it, not its own name.
|
|
200
|
+
|
|
201
|
+
You don't configure any of this — it's tried automatically, after normal name-based matching, only when nothing simpler applies. Same rules as everywhere else in this package: the AI only ever identifies *what* to look for and how it relates to nearby elements, never writes locator code directly, and a result only counts as found if it resolves to exactly one element — an ambiguous match is treated as "not found," never a guess.
|
|
202
|
+
|
|
203
|
+
The AI doesn't always get the strategy choice right on the first try — a model can mistake "text near an unlabeled field" for a real `<label>` association, especially smaller/cheaper models. If it suggests matching by label and that resolves to nothing, `tamash-playwright` automatically retries the same text as a "near" match before giving up — no extra AI call, since the action itself (`fill`, `check`, `selectOption`, …) already tells it what kind of control to look for.
|
|
204
|
+
|
|
181
205
|
## When text alone isn't enough: vision fallback
|
|
182
206
|
|
|
183
207
|
Sometimes an element has nothing useful to match on by text — an icon-only button with no label, or several visually distinct elements that all look identical in the accessibility tree. If your configured model supports image input (e.g. `gpt-4o`, `claude-haiku-4-5`, `gemini-2.0-flash`), `tamash-playwright` automatically falls back to a screenshot-based search after the normal text-based attempt fails — no separate setup, it just uses the same provider and API key from Step 2. Run `npx tamash-playwright doctor` to check whether your configured model is expected to support this.
|
|
@@ -190,7 +214,9 @@ Occasionally a locator heals correctly — the AI found the right element — bu
|
|
|
190
214
|
|
|
191
215
|
Once a locator heals successfully, `tamash-playwright` remembers the fix in `.tamash-playwright/heals.jsonl` — the same file `apply-heals` reads (see below). The next time that exact locator breaks the same way, it tries the previously-confirmed selector *first*, with no ARIA snapshot and no AI call. Only if that no longer works (the page changed again) does it fall through to a fresh snapshot-and-AI-call, exactly as before — so there's no correctness risk in trying the cached selector, only a cost/time saving when it still works.
|
|
192
216
|
|
|
193
|
-
|
|
217
|
+
**Locally**, this is a real, ongoing saving: `.tamash-playwright/heals.jsonl` lives on your disk and persists across every `npx playwright test` you run, for as long as you keep working on that checkout — the same broken locator only ever costs one AI call, no matter how many times you re-run your tests afterward.
|
|
218
|
+
|
|
219
|
+
**In CI, this only helps *within* one run**, not across separate ones — most CI runners start from a fresh checkout every time, so `.tamash-playwright/` (gitignored, never committed) doesn't carry over from yesterday's run to today's. What actually eliminates repeat AI calls in CI is `apply-heals` merging the real fix into your source — once that lands, the locator isn't broken anymore and healing never needs to run for it again. The cache still earns its keep within a single run, though: if the same broken locator shows up in several tests in one run (a shared Page Object method, say), only the first one pays for a fresh AI call — every other occurrence in that same run reuses it for free. You'll see it in the console line as `provider=cache` with no token count, instead of the real provider name:
|
|
194
220
|
|
|
195
221
|
```
|
|
196
222
|
[self-healer] tests/sampletest.spec.ts:13 — locator.fill "User Name Textbox (placeholder "xyz")" -> HEALED [provider=cache, vision=no, actionRecovery=no, suggested="role:textbox:Username"] — locator.fill: Timeout 8000ms exceeded.
|
|
@@ -243,7 +269,15 @@ A GitHub Actions example — each test job uploads its own log as an artifact; a
|
|
|
243
269
|
```yaml
|
|
244
270
|
jobs:
|
|
245
271
|
test:
|
|
246
|
-
# ...your existing test job(s), sharded or not
|
|
272
|
+
# ...your existing test job(s), sharded or not — the part that matters here is that healing
|
|
273
|
+
# needs the same variables from Step 2, set as CI secrets/environment variables instead of a
|
|
274
|
+
# local .env file (which won't exist on the runner and shouldn't be committed anyway).
|
|
275
|
+
runs-on: ubuntu-latest
|
|
276
|
+
env:
|
|
277
|
+
HEALER_ENABLED: true
|
|
278
|
+
HEALER_PROVIDER: ollama
|
|
279
|
+
OLLAMA_MODEL: gpt-oss:120b
|
|
280
|
+
OLLAMA_API_KEY: ${{ secrets.OLLAMA_API_KEY }} # set via `gh secret set OLLAMA_API_KEY`
|
|
247
281
|
steps:
|
|
248
282
|
- run: npx playwright test
|
|
249
283
|
- uses: actions/upload-artifact@v4
|
|
@@ -257,6 +291,12 @@ jobs:
|
|
|
257
291
|
needs: test
|
|
258
292
|
if: ${{ !cancelled() && github.event_name == 'push' }} # not pull_request — see note below
|
|
259
293
|
runs-on: ubuntu-latest
|
|
294
|
+
# Two pushes close together would otherwise race on the same heal branch/PR — whichever
|
|
295
|
+
# finished last could clobber the other mid-update. Queues instead (never cancels an
|
|
296
|
+
# in-progress run) so each one always starts from a clean, fully-finished state.
|
|
297
|
+
concurrency:
|
|
298
|
+
group: apply-heals-${{ github.ref }}
|
|
299
|
+
cancel-in-progress: false
|
|
260
300
|
permissions:
|
|
261
301
|
contents: write
|
|
262
302
|
pull-requests: write
|
|
@@ -280,10 +320,22 @@ jobs:
|
|
|
280
320
|
# HEALER_ENABLED=false here is deliberate: this proves the *written* fix works standalone —
|
|
281
321
|
# leaving healing on could let a still-broken selector get silently re-healed at runtime
|
|
282
322
|
# again, reporting green without ever proving the applied source fix was actually correct.
|
|
323
|
+
#
|
|
324
|
+
# affectedTests (in the JSON report) lists exactly which tests actually exercised a fixed
|
|
325
|
+
# location this run, as `file:line` — scoping the re-run to just those instead of the whole
|
|
326
|
+
# suite. Falls back to a full `npx playwright test` when it's empty (older heals.jsonl
|
|
327
|
+
# entries from before this field existed, or test.info() wasn't available for some reason) —
|
|
328
|
+
# safer to over-verify than to silently under-check.
|
|
283
329
|
- name: Verify the healed selectors work on their own
|
|
284
330
|
id: verify
|
|
285
331
|
if: steps.check.outputs.changed == 'true'
|
|
286
|
-
run:
|
|
332
|
+
run: |
|
|
333
|
+
AFFECTED=$(jq -r '.affectedTests | join(" ")' .tamash-playwright/apply-heals-report.json)
|
|
334
|
+
if [ -n "$AFFECTED" ]; then
|
|
335
|
+
npx playwright test $AFFECTED
|
|
336
|
+
else
|
|
337
|
+
npx playwright test
|
|
338
|
+
fi
|
|
287
339
|
continue-on-error: true
|
|
288
340
|
env:
|
|
289
341
|
HEALER_ENABLED: false
|
|
@@ -317,14 +369,17 @@ jobs:
|
|
|
317
369
|
cat .tamash-playwright/apply-heals-report.md
|
|
318
370
|
} > .tamash-playwright/pr-body.md
|
|
319
371
|
|
|
372
|
+
# branch is suffixed with the ref so two different branches healing at the same time (if
|
|
373
|
+
# your trigger isn't restricted to a single branch) never fight over one physical heal
|
|
374
|
+
# branch — the concurrency group above only serializes runs on the *same* ref.
|
|
320
375
|
- name: Open PR with healed selectors
|
|
321
376
|
if: steps.check.outputs.changed == 'true'
|
|
322
377
|
uses: peter-evans/create-pull-request@v6
|
|
323
378
|
with:
|
|
324
379
|
commit-message: "fix: apply self-healed selectors from CI"
|
|
325
|
-
title: "Apply self-healed selectors (verification ${{ steps.verify.outcome == 'success' && 'passed' || 'FAILED' }})"
|
|
380
|
+
title: "Apply self-healed selectors on ${{ github.ref_name }} (verification ${{ steps.verify.outcome == 'success' && 'passed' || 'FAILED' }})"
|
|
326
381
|
body-path: .tamash-playwright/pr-body.md
|
|
327
|
-
branch: tamash-playwright/apply-heals
|
|
382
|
+
branch: tamash-playwright/apply-heals-${{ github.ref_name }}
|
|
328
383
|
delete-branch: true
|
|
329
384
|
|
|
330
385
|
- name: Fail the job if verification didn't pass
|
|
@@ -340,6 +395,8 @@ A few choices worth calling out:
|
|
|
340
395
|
- **The PR is opened either way**, verification passed or failed — a failed verification is still worth a human's attention (maybe the fix is right and something else was flaky); it just gets an honest label instead of a silent false-positive. The final step fails the *job* itself when verification fails, so CI status stays truthful even though the PR still exists for review.
|
|
341
396
|
- [`peter-evans/create-pull-request`](https://github.com/peter-evans/create-pull-request) is a no-op if there's nothing to commit, so the job is safe to run on every push — it only ever opens a PR when there's an actual fix to review, and reuses the same branch/PR on subsequent runs rather than piling up duplicates.
|
|
342
397
|
|
|
398
|
+
**Want a browsable dashboard, not just PR diffs and CI logs?** You can add a third job that publishes a combined report — the initial run, what got healed, and the post-fix verification, plus every past run archived and browsable — to GitHub Pages. See the "Publishing a healing dashboard to GitHub Pages" section of [usage.md](usage.md) for the full recipe.
|
|
399
|
+
|
|
343
400
|
## Checking what actually happened
|
|
344
401
|
|
|
345
402
|
Every healing attempt — whether it succeeded or not — shows up in Playwright's own HTML report (`npx playwright show-report`), no separate report to check:
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { BrowserContext, Frame, FrameLocator, Locator, Page } from '@playwright/test';
|
|
2
2
|
type BindingKind = 'locator' | 'page' | 'frame' | 'frameLocator';
|
|
3
|
+
export declare function extractVariableName(sourceLocation: string): string | undefined;
|
|
3
4
|
export declare function bindTargetActions<T extends Locator | Page | Frame | FrameLocator>(target: T, kind?: BindingKind, description?: string, frameScope?: FrameLocator, selector?: string, callSite?: Error): T;
|
|
4
5
|
export declare function bindLocatorActions(locator: Locator): Locator;
|
|
5
6
|
export declare function bindPageActions(page: Page): Page;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locator.binding.d.ts","sourceRoot":"","sources":["../../src/bindings/locator.binding.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AA2E3F,KAAK,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"locator.binding.d.ts","sourceRoot":"","sources":["../../src/bindings/locator.binding.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AA2E3F,KAAK,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,cAAc,CAAC;AA0EjE,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA4B9E;AAmDD,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,OAAO,GAAG,IAAI,GAAG,KAAK,GAAG,YAAY,EAC/E,MAAM,EAAE,CAAC,EACT,IAAI,GAAE,WAAuB,EAC7B,WAAW,CAAC,EAAE,MAAM,EAKpB,UAAU,CAAC,EAAE,YAAY,EAMzB,QAAQ,CAAC,EAAE,MAAM,EAKjB,QAAQ,CAAC,EAAE,KAAK,GACf,CAAC,CAyIH;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAE5D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAEhD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAEpD;AAYD,wBAAgB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,cAAc,CAmCnE"}
|
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.extractVariableName = extractVariableName;
|
|
6
7
|
exports.bindTargetActions = bindTargetActions;
|
|
7
8
|
exports.bindLocatorActions = bindLocatorActions;
|
|
8
9
|
exports.bindPageActions = bindPageActions;
|
|
@@ -317,21 +318,23 @@ callSite) {
|
|
|
317
318
|
const resolvedSourceLocation = callSite ? resolveCallerLocation(callSite) : undefined;
|
|
318
319
|
// description defaults to the selector text at the factory call, so the two are
|
|
319
320
|
// identical until `.describe()` overrides description — that equality is exactly
|
|
320
|
-
// how an explicit `.describe()` is told apart from "never called"
|
|
321
|
-
// actually
|
|
322
|
-
//
|
|
323
|
-
//
|
|
324
|
-
//
|
|
325
|
-
//
|
|
321
|
+
// how an explicit `.describe()` is told apart from "never called". Priority for what
|
|
322
|
+
// the AI actually sees: explicit .describe() > inferred variable name > raw selector
|
|
323
|
+
// text, and — deliberately — never combined with the broken selector once either of
|
|
324
|
+
// the first two is available. Combining used to be the default (showing both), but
|
|
325
|
+
// real testing showed this backfires: a model can pattern-match on the old,
|
|
326
|
+
// already-broken value in the description and just parrot it back as its own
|
|
327
|
+
// "suggestion" instead of reasoning fresh from the ARIA snapshot — demonstrated
|
|
328
|
+
// concretely with a smaller model that otherwise picked the correct strategy when
|
|
329
|
+
// given the same description without the selector appended. The AI should find the
|
|
330
|
+
// element from context (the snapshot), not from a hint about what used to be there.
|
|
326
331
|
let effectiveDescription;
|
|
327
332
|
if (description && selector && description !== selector) {
|
|
328
|
-
effectiveDescription =
|
|
333
|
+
effectiveDescription = description;
|
|
329
334
|
}
|
|
330
335
|
else {
|
|
331
336
|
const variableName = resolvedSourceLocation ? extractVariableName(resolvedSourceLocation) : undefined;
|
|
332
|
-
effectiveDescription = variableName
|
|
333
|
-
? `${variableName} (${selector})`
|
|
334
|
-
: (description ?? selector ?? `${kind} action ${String(prop)}`);
|
|
337
|
+
effectiveDescription = variableName ?? description ?? selector ?? `${kind} action ${String(prop)}`;
|
|
335
338
|
}
|
|
336
339
|
const healing = await (0, healer_1.healActionFailure)({
|
|
337
340
|
action: String(prop),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locator.binding.js","sourceRoot":"","sources":["../../src/bindings/locator.binding.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"locator.binding.js","sourceRoot":"","sources":["../../src/bindings/locator.binding.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/healer/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAI3E,OAAO,KAAK,EAAoC,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQtF,KAAK,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,cAAc,CAAC;AAEjE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IAKtB,UAAU,EAAE,OAAO,CAAC;IAIpB,kBAAkB,EAAE,OAAO,CAAC;IAK5B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/healer/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAI3E,OAAO,KAAK,EAAoC,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQtF,KAAK,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,cAAc,CAAC;AAEjE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IAKtB,UAAU,EAAE,OAAO,CAAC;IAIpB,kBAAkB,EAAE,OAAO,CAAC;IAK5B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AA8iBF,wBAAgB,gBAAgB,IAAI,OAAO,CAG1C;AAMD,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAkHD,wBAAsB,iBAAiB,CAAC,OAAO,EAAE;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IAKrB,UAAU,CAAC,EAAE,YAAY,CAAC;IAG1B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CA0M/E;AAED,wBAAgB,iBAAiB,IAAI,iBAAiB,EAAE,CAEvD"}
|
package/dist/healer/index.js
CHANGED
|
@@ -65,14 +65,19 @@ async function captureAriaSnapshot(pageContext, timeoutMs) {
|
|
|
65
65
|
return undefined;
|
|
66
66
|
}
|
|
67
67
|
try {
|
|
68
|
-
//
|
|
69
|
-
//
|
|
70
|
-
//
|
|
71
|
-
|
|
68
|
+
// boxes adds each element's on-screen [box=x,y,w,h] in CSS pixels — needed so the 'near'
|
|
69
|
+
// strategy (see resolveNearLocator) has real position data to judge "close to this text" the
|
|
70
|
+
// way a sighted user would, not just tree nesting. mode: 'ai' (which additionally adds
|
|
71
|
+
// [ref=...] identifiers) was tried first but dropped: nothing in this codebase ever reads a
|
|
72
|
+
// ref — every resolver uses real getByText/getByRole/filter() locators, never a ref-based
|
|
73
|
+
// lookup — and it turned out to be the majority of the size increase (measured: +2877 chars
|
|
74
|
+
// for mode:'ai' alone vs +1391 for boxes:true alone, on the same real page). Paying for data
|
|
75
|
+
// nobody reads on every single heal, not just ones that end up using near/scoped/containing.
|
|
76
|
+
return await pageContext.locator('body').ariaSnapshot({ timeout: timeoutMs, boxes: true });
|
|
72
77
|
}
|
|
73
78
|
catch {
|
|
74
79
|
try {
|
|
75
|
-
return await pageContext.locator(':root').ariaSnapshot({ timeout: timeoutMs,
|
|
80
|
+
return await pageContext.locator(':root').ariaSnapshot({ timeout: timeoutMs, boxes: true });
|
|
76
81
|
}
|
|
77
82
|
catch {
|
|
78
83
|
return undefined;
|
|
@@ -138,10 +143,30 @@ async function resolveContainingLocator(pageContext, suggestion) {
|
|
|
138
143
|
return (await candidate.count()) === 1 ? candidate : undefined;
|
|
139
144
|
}
|
|
140
145
|
// Returns the resolved suggestion alongside the locator, not just the locator — identical to the
|
|
146
|
+
// Deterministic, not AI-based — the action itself already implies what kind of control it targets.
|
|
147
|
+
// Only covers actions with an unambiguous target role; click/hover/etc. could mean almost
|
|
148
|
+
// anything, so those deliberately return undefined rather than guess.
|
|
149
|
+
function inferRoleFromAction(action) {
|
|
150
|
+
switch (action) {
|
|
151
|
+
case 'fill':
|
|
152
|
+
case 'type':
|
|
153
|
+
case 'pressSequentially':
|
|
154
|
+
case 'clear':
|
|
155
|
+
return 'textbox';
|
|
156
|
+
case 'check':
|
|
157
|
+
case 'uncheck':
|
|
158
|
+
case 'setChecked':
|
|
159
|
+
return 'checkbox';
|
|
160
|
+
case 'selectOption':
|
|
161
|
+
return 'combobox';
|
|
162
|
+
default:
|
|
163
|
+
return undefined;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
141
166
|
// input for every strategy except 'near', where resolveNearLocator fills in parentLevels from
|
|
142
167
|
// what actually worked. Callers should log/capture *this* returned suggestion, not the one they
|
|
143
168
|
// passed in, so that detail isn't lost.
|
|
144
|
-
async function buildLocatorFromSuggestion(pageContext, suggestion) {
|
|
169
|
+
async function buildLocatorFromSuggestion(pageContext, suggestion, action) {
|
|
145
170
|
switch (suggestion.strategy) {
|
|
146
171
|
case 'role':
|
|
147
172
|
return { locator: pageContext.getByRole(suggestion.role, suggestion.name ? { name: new RegExp(escapeRegExp(suggestion.name), 'i') } : undefined), resolvedSuggestion: suggestion };
|
|
@@ -149,8 +174,26 @@ async function buildLocatorFromSuggestion(pageContext, suggestion) {
|
|
|
149
174
|
return { locator: pageContext.getByText(suggestion.text, { exact: false }), resolvedSuggestion: suggestion };
|
|
150
175
|
case 'testId':
|
|
151
176
|
return { locator: pageContext.getByTestId(suggestion.testId), resolvedSuggestion: suggestion };
|
|
152
|
-
case 'label':
|
|
153
|
-
|
|
177
|
+
case 'label': {
|
|
178
|
+
const candidate = pageContext.getByLabel(suggestion.label, { exact: false });
|
|
179
|
+
if (await candidate.count() === 1) {
|
|
180
|
+
return { locator: candidate, resolvedSuggestion: suggestion };
|
|
181
|
+
}
|
|
182
|
+
// getByLabel resolving to nothing is exactly the signal `near` exists for: text that reads
|
|
183
|
+
// as a label but isn't actually linked via <label>/aria-labelledby — a real, observed
|
|
184
|
+
// failure mode (a weaker model guessed "label" for exactly this case instead of "near").
|
|
185
|
+
// Retrying locally with the same text costs no extra AI call; the action tells us what kind
|
|
186
|
+
// of control to look for since the suggestion itself doesn't carry a role. Falls through to
|
|
187
|
+
// vision exactly as before if this doesn't resolve either.
|
|
188
|
+
const inferredRole = inferRoleFromAction(action);
|
|
189
|
+
if (!inferredRole) {
|
|
190
|
+
return undefined;
|
|
191
|
+
}
|
|
192
|
+
const resolved = await resolveNearLocator(pageContext, { anchorText: suggestion.label, role: inferredRole });
|
|
193
|
+
return resolved
|
|
194
|
+
? { locator: resolved.locator, resolvedSuggestion: { strategy: 'near', anchorText: suggestion.label, role: inferredRole, parentLevels: resolved.parentLevels } }
|
|
195
|
+
: undefined;
|
|
196
|
+
}
|
|
154
197
|
case 'placeholder':
|
|
155
198
|
return { locator: pageContext.getByPlaceholder(suggestion.placeholder, { exact: false }), resolvedSuggestion: suggestion };
|
|
156
199
|
case 'css':
|
|
@@ -216,13 +259,96 @@ async function attemptActionRecoveryFallback(provider, locator, action, callArgs
|
|
|
216
259
|
}
|
|
217
260
|
return { healing: null, usage: combinedUsage, stage: actionRecovery.stage };
|
|
218
261
|
}
|
|
262
|
+
const SNAPSHOT_BOX_PATTERN = /\[box=(-?\d+(?:\.\d+)?),(-?\d+(?:\.\d+)?),(-?\d+(?:\.\d+)?),(-?\d+(?:\.\d+)?)\]/;
|
|
263
|
+
const SNAPSHOT_TEXT_LINE_PATTERN = /^-\s*text:\s*(.+)$/;
|
|
264
|
+
// A boxes:true ariaSnapshot() is indented text, one element per line — not a structured tree, so
|
|
265
|
+
// this reads it back line-by-line rather than parsing real nesting. Box coordinates are already
|
|
266
|
+
// absolute per line (not relative to a parent), so no nesting context is needed to use them.
|
|
267
|
+
//
|
|
268
|
+
// Verified directly (see diag-snapshot-format.js): a bare text run — Playwright's own rendering
|
|
269
|
+
// for a text node with no ARIA role of its own, e.g. a plain `<span>` used purely as a label —
|
|
270
|
+
// NEVER carries its own [box=...], only role-bearing lines (textbox, button, etc.) do. This is
|
|
271
|
+
// exactly the shape the `near` strategy exists for (label text with no accessible link to the
|
|
272
|
+
// control beside it), so it can't be skipped just because it has no box of its own. Instead: buffer
|
|
273
|
+
// bare text lines and pair each with the box of the very next line that DOES have one — in
|
|
274
|
+
// snapshot/DOM order, that's almost always the control the text is labeling, the same adjacency
|
|
275
|
+
// resolveNearLocator's own xpath=.. ladder already relies on. This is only ever used to RANK
|
|
276
|
+
// candidates by approximate distance; resolveNearLocator's own strict "exactly 1 match" check is
|
|
277
|
+
// what actually verifies any candidate this produces, so a wrong pairing just fails that check and
|
|
278
|
+
// gets skipped rather than producing a bad heal.
|
|
279
|
+
function parseSnapshotBoxCandidates(snapshot) {
|
|
280
|
+
const candidates = [];
|
|
281
|
+
let pendingText = [];
|
|
282
|
+
for (const rawLine of snapshot.split('\n')) {
|
|
283
|
+
const line = rawLine.trim();
|
|
284
|
+
const boxMatch = line.match(SNAPSHOT_BOX_PATTERN);
|
|
285
|
+
if (!boxMatch) {
|
|
286
|
+
const textMatch = line.match(SNAPSHOT_TEXT_LINE_PATTERN);
|
|
287
|
+
if (textMatch && textMatch[1].trim()) {
|
|
288
|
+
pendingText.push(textMatch[1].trim());
|
|
289
|
+
}
|
|
290
|
+
continue;
|
|
291
|
+
}
|
|
292
|
+
const box = { x: Number(boxMatch[1]), y: Number(boxMatch[2]), width: Number(boxMatch[3]), height: Number(boxMatch[4]) };
|
|
293
|
+
const quoted = line.match(/"([^"]+)"/);
|
|
294
|
+
if (quoted && quoted[1].trim()) {
|
|
295
|
+
candidates.push({ text: quoted[1].trim(), box });
|
|
296
|
+
}
|
|
297
|
+
for (const text of pendingText) {
|
|
298
|
+
candidates.push({ text, box });
|
|
299
|
+
}
|
|
300
|
+
pendingText = [];
|
|
301
|
+
}
|
|
302
|
+
return candidates;
|
|
303
|
+
}
|
|
304
|
+
function distanceToBoxCenter(box, x, y) {
|
|
305
|
+
return Math.hypot(box.x + box.width / 2 - x, box.y + box.height / 2 - y);
|
|
306
|
+
}
|
|
307
|
+
const NEARBY_CANDIDATE_RADIUS_PX = 150;
|
|
308
|
+
const MAX_NEARBY_CANDIDATES = 3;
|
|
309
|
+
// After vision resolves a point to a real element but before settling for the throwaway tag-based
|
|
310
|
+
// locator below: check whether a nearby, already-identified element exists close enough to anchor
|
|
311
|
+
// a real `near` suggestion — the same proximity reasoning a sighted user applies ("the field next
|
|
312
|
+
// to that label"), applied to what vision found instead of what the AI read from text. Captures a
|
|
313
|
+
// FRESH boxes:true snapshot rather than reusing the earlier text attempt's — resolveElementAtVisionPoint
|
|
314
|
+
// just scrolled the page to settle the point, so only a snapshot taken right now is guaranteed to
|
|
315
|
+
// be in the same viewport-relative coordinate space as viewportX/viewportY (both are
|
|
316
|
+
// getBoundingClientRect()-relative). Tries the closest few candidates in order through the exact
|
|
317
|
+
// same resolveNearLocator used by the text path — same strict uniqueness rule, no new leniency —
|
|
318
|
+
// and returns undefined (not a guess) if nothing nearby resolves uniquely.
|
|
319
|
+
async function tryUpgradeVisionPointToNear(pageContext, action, viewportX, viewportY, timeoutMs) {
|
|
320
|
+
const inferredRole = inferRoleFromAction(action);
|
|
321
|
+
if (!inferredRole) {
|
|
322
|
+
return undefined;
|
|
323
|
+
}
|
|
324
|
+
const snapshot = await captureAriaSnapshot(pageContext, timeoutMs);
|
|
325
|
+
if (!snapshot) {
|
|
326
|
+
return undefined;
|
|
327
|
+
}
|
|
328
|
+
const candidates = parseSnapshotBoxCandidates(snapshot)
|
|
329
|
+
.map((candidate) => ({ candidate, distance: distanceToBoxCenter(candidate.box, viewportX, viewportY) }))
|
|
330
|
+
.filter((entry) => entry.distance <= NEARBY_CANDIDATE_RADIUS_PX)
|
|
331
|
+
.sort((a, b) => a.distance - b.distance)
|
|
332
|
+
.slice(0, MAX_NEARBY_CANDIDATES);
|
|
333
|
+
for (const { candidate } of candidates) {
|
|
334
|
+
const resolved = await resolveNearLocator(pageContext, { anchorText: candidate.text, role: inferredRole });
|
|
335
|
+
if (resolved) {
|
|
336
|
+
return {
|
|
337
|
+
locator: resolved.locator,
|
|
338
|
+
suggestion: { strategy: 'near', anchorText: candidate.text, role: inferredRole, parentLevels: resolved.parentLevels },
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
return undefined;
|
|
343
|
+
}
|
|
219
344
|
// Strictly a second try, called only after the ARIA/text-based attempt in healActionFailure has
|
|
220
345
|
// already run and failed to produce a working heal (including when there was no snapshot to
|
|
221
346
|
// search at all). Resolves the AI's screenshot-based point to a real DOM element by tagging it
|
|
222
|
-
// with a temporary attribute (see healer/vision.ts)
|
|
223
|
-
//
|
|
224
|
-
//
|
|
225
|
-
//
|
|
347
|
+
// with a temporary attribute (see healer/vision.ts). Before using that tag as the final answer,
|
|
348
|
+
// tries to upgrade it to a durable `near` suggestion (tryUpgradeVisionPointToNear) — only if that
|
|
349
|
+
// fails does it fall back to the tag itself, which is just another
|
|
350
|
+
// `{strategy:'css', css:'[data-tamash-heal-id="..."]'}` suggestion under the hood, so no separate
|
|
351
|
+
// replay logic is needed for it.
|
|
226
352
|
async function tryVisionRecovery(provider, pageContext, action, description, callArgs, timeoutMs) {
|
|
227
353
|
const effectiveTimeoutMs = timeoutMs ?? 2000;
|
|
228
354
|
const capture = await (0, vision_1.captureElementForVision)(pageContext, effectiveTimeoutMs);
|
|
@@ -237,29 +363,53 @@ async function tryVisionRecovery(provider, pageContext, action, description, cal
|
|
|
237
363
|
if (!point.found) {
|
|
238
364
|
return { healing: null, usage, stage: 'vision_declined' };
|
|
239
365
|
}
|
|
240
|
-
const
|
|
241
|
-
if (!
|
|
366
|
+
const resolved = await (0, vision_1.resolveElementAtVisionPoint)(pageContext, point, capture.box, capture.scroll, effectiveTimeoutMs);
|
|
367
|
+
if (!resolved) {
|
|
242
368
|
return { healing: null, usage, stage: 'vision_unresolvable' };
|
|
243
369
|
}
|
|
244
|
-
const
|
|
370
|
+
const { id, viewportX, viewportY } = resolved;
|
|
245
371
|
try {
|
|
246
|
-
const
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
372
|
+
const upgrade = await tryUpgradeVisionPointToNear(pageContext, action, viewportX, viewportY, effectiveTimeoutMs);
|
|
373
|
+
if (upgrade) {
|
|
374
|
+
try {
|
|
375
|
+
const replayResult = await (0, replay_action_1.replayAction)(upgrade.locator, action, callArgs);
|
|
376
|
+
return {
|
|
377
|
+
healing: {
|
|
378
|
+
provider: provider.name,
|
|
379
|
+
warning: `Recovered using ${provider.name} via visual match, upgraded to a durable locator.`,
|
|
380
|
+
suggestedSelector: describeSuggestion(upgrade.suggestion),
|
|
381
|
+
result: replayResult,
|
|
382
|
+
},
|
|
383
|
+
usage,
|
|
384
|
+
resolvedSuggestion: upgrade.suggestion,
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
catch {
|
|
388
|
+
// The near-derived locator resolved but didn't survive a real replay (e.g. covered by
|
|
389
|
+
// something else) — fall through to the tag-based attempt below rather than give up on
|
|
390
|
+
// the heal entirely.
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
const locator = pageContext.locator((0, vision_1.visionTagSelector)(id));
|
|
394
|
+
try {
|
|
395
|
+
const replayResult = await (0, replay_action_1.replayAction)(locator, action, callArgs);
|
|
396
|
+
return {
|
|
397
|
+
healing: {
|
|
398
|
+
provider: provider.name,
|
|
399
|
+
warning: `Recovered using ${provider.name} via visual match.`,
|
|
400
|
+
suggestedSelector: `visual match at (${point.x},${point.y})`,
|
|
401
|
+
result: replayResult,
|
|
402
|
+
},
|
|
403
|
+
usage,
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
catch (replayError) {
|
|
407
|
+
if (!isActionRecoveryEnabled()) {
|
|
408
|
+
return { healing: null, usage, stage: 'vision_replay_failed' };
|
|
409
|
+
}
|
|
410
|
+
const fallback = await attemptActionRecoveryFallback(provider, locator, action, callArgs, replayError, timeoutMs, `visual match at (${point.x},${point.y})`, usage);
|
|
411
|
+
return { ...fallback, usedActionRecovery: true };
|
|
260
412
|
}
|
|
261
|
-
const fallback = await attemptActionRecoveryFallback(provider, locator, action, callArgs, replayError, timeoutMs, `visual match at (${point.x},${point.y})`, usage);
|
|
262
|
-
return { ...fallback, usedActionRecovery: true };
|
|
263
413
|
}
|
|
264
414
|
finally {
|
|
265
415
|
await (0, vision_1.cleanupVisionTag)(pageContext, id);
|
|
@@ -490,7 +640,7 @@ async function healActionFailure(context) {
|
|
|
490
640
|
if (attemptHealing && pageContext && context.sourceLocation) {
|
|
491
641
|
const cached = (0, heal_log_1.findCachedSuggestion)(context.sourceLocation);
|
|
492
642
|
if (cached) {
|
|
493
|
-
const built = await buildLocatorFromSuggestion(pageContext, cached);
|
|
643
|
+
const built = await buildLocatorFromSuggestion(pageContext, cached, context.action);
|
|
494
644
|
if (built) {
|
|
495
645
|
try {
|
|
496
646
|
const replayResult = await (0, replay_action_1.replayAction)(built.locator, context.action, callArgs);
|
|
@@ -535,7 +685,7 @@ async function healActionFailure(context) {
|
|
|
535
685
|
failureStage = 'ai_declined';
|
|
536
686
|
}
|
|
537
687
|
else {
|
|
538
|
-
const built = await buildLocatorFromSuggestion(pageContext, suggestion);
|
|
688
|
+
const built = await buildLocatorFromSuggestion(pageContext, suggestion, context.action);
|
|
539
689
|
if (!built) {
|
|
540
690
|
failureStage = 'unbuildable_suggestion';
|
|
541
691
|
}
|
|
@@ -585,7 +735,15 @@ async function healActionFailure(context) {
|
|
|
585
735
|
}
|
|
586
736
|
if (visionOutcome.healing) {
|
|
587
737
|
healing = visionOutcome.healing;
|
|
588
|
-
|
|
738
|
+
if (visionOutcome.resolvedSuggestion) {
|
|
739
|
+
// Upgraded to a real `near` suggestion — this heal has a reusable source form, so it
|
|
740
|
+
// should be logged/apply-heals-eligible exactly like a text-based `near` heal, not
|
|
741
|
+
// marked usedVision (see logEligibleHeal's eligibility check).
|
|
742
|
+
capturedSuggestion = visionOutcome.resolvedSuggestion;
|
|
743
|
+
}
|
|
744
|
+
else {
|
|
745
|
+
usedVision = true;
|
|
746
|
+
}
|
|
589
747
|
failureStage = undefined;
|
|
590
748
|
}
|
|
591
749
|
else if (visionOutcome.stage) {
|
package/dist/healer/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/healer/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/healer/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ActionTactic, SelectorSuggestion, SuggestActionTacticInput, SuggestElementFromImageInput, SuggestSelectorInput, TokenUsage, VisionPoint } from './types';
|
|
2
|
-
export declare const SYSTEM_PROMPT = "You are a Playwright self-healing assistant.\nYou will be given an ARIA accessibility snapshot of a web page, an action that just failed, and a human description of the element the test intended to interact with. The snapshot includes
|
|
2
|
+
export declare const SYSTEM_PROMPT = "You are a Playwright self-healing assistant.\nYou will be given an ARIA accessibility snapshot of a web page, an action that just failed, and a human description of the element the test intended to interact with. The snapshot includes, where available, each element's on-screen position as [box=x,y,width,height] in CSS pixels.\nPick the single best-matching element that is LITERALLY present in the snapshot and respond with strict JSON only (no markdown, no prose) matching one of:\n{\"strategy\":\"role\",\"role\":\"<aria role>\",\"name\":\"<accessible name>\"}\n{\"strategy\":\"text\",\"text\":\"<visible text>\"}\n{\"strategy\":\"testId\",\"testId\":\"<test id>\"}\n{\"strategy\":\"label\",\"label\":\"<label text>\"}\n{\"strategy\":\"placeholder\",\"placeholder\":\"<placeholder text>\"}\n{\"strategy\":\"css\",\"css\":\"<css selector>\"}\n{\"strategy\":\"near\",\"anchorText\":\"<nearby visible text>\",\"role\":\"<aria role of the TARGET element itself>\"}\n{\"strategy\":\"scoped\",\"containerRole\":\"<aria role of an enclosing landmark>\",\"containerName\":\"<that landmark's accessible name>\",\"role\":\"<target's own role>\",\"name\":\"<target's own accessible name>\"}\n{\"strategy\":\"containing\",\"role\":\"<role of the TARGET, which is itself a container>\",\"anchorText\":\"<text found INSIDE that container>\"}\n{\"strategy\":\"none\"}\nUse \"role\"/\"text\"/\"testId\"/\"label\"/\"placeholder\" whenever the target element has one of those identities of its own AND that identity is unique in the snapshot \u2014 always prefer these first.\nUse \"near\" when the target has no accessible name, no label, and no placeholder of its own (e.g. a plain \"textbox\" or \"generic\" node with no quoted name before its [ref]), but sits close to some label-like text that is NOT inside it. \"anchorText\" is that nearby text, \"role\" is the target's own role \u2014 not the anchor text's role. Use each element's [box=...] position to judge \"nearby\" the way a human would look at the page, not just tree nesting.\nUse \"scoped\" when the target DOES have its own role and name, but that same role+name also appears elsewhere in the snapshot (so it alone wouldn't be unique) \u2014 and it sits inside a distinctly-named container (a dialog, a section, a landmark with its own accessible name). \"containerRole\"/\"containerName\" identify that enclosing container; \"role\"/\"name\" identify the target within it.\nUse \"containing\" when the target is itself a container (e.g. a table row) and the only way to identify WHICH one is by text found inside it (e.g. one specific cell's value) \u2014 \"role\" is the container's own role, \"anchorText\" is the distinguishing text found inside it.\nIf nothing in the snapshot plausibly matches the description, respond with {\"strategy\":\"none\"}. Never invent an element that isn't in the snapshot.";
|
|
3
3
|
export declare function buildUserPrompt(input: SuggestSelectorInput): string;
|
|
4
4
|
export declare function parseSuggestion(content: string): SelectorSuggestion | null;
|
|
5
5
|
export declare const VISION_SYSTEM_PROMPT = "You are a Playwright self-healing assistant.\nYou will be given a screenshot of a web page, an action that just failed, and a human description of the element the test intended to interact with.\nFind the single best-matching element that is LITERALLY visible in the screenshot and respond with strict JSON only (no markdown, no prose):\n{\"found\":true,\"x\":<0-1000>,\"y\":<0-1000>}\nWhere x and y are the CENTER of the matching element, expressed as its position within the image scaled to a 0-1000 range (0 = left/top edge, 1000 = right/bottom edge) \u2014 NOT raw pixel coordinates.\nIf nothing in the screenshot plausibly matches the description, respond with {\"found\":false}. Never invent an element that isn't visible in the image.";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../src/healer/providers/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAIvK,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../src/healer/providers/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAIvK,eAAO,MAAM,aAAa,kzFAiB0H,CAAC;AAErJ,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAWnE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAqD1E;AAKD,eAAO,MAAM,oBAAoB,0uBAKsH,CAAC;AAExJ,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,4BAA4B,GAAG,MAAM,CAMjF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAiCzE;AASD,eAAO,MAAM,6BAA6B,4/CAOoD,CAAC;AAE/F,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,wBAAwB,GAAG,MAAM,CAKrF;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAsBhF;AAID,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,UAAU,GAAG,SAAS,CAWvK"}
|
|
@@ -10,7 +10,7 @@ exports.parseActionTacticSuggestion = parseActionTacticSuggestion;
|
|
|
10
10
|
exports.extractOpenAICompatibleUsage = extractOpenAICompatibleUsage;
|
|
11
11
|
const MAX_SNAPSHOT_CHARS = 8000;
|
|
12
12
|
exports.SYSTEM_PROMPT = `You are a Playwright self-healing assistant.
|
|
13
|
-
You will be given an ARIA accessibility snapshot of a web page, an action that just failed, and a human description of the element the test intended to interact with. The snapshot includes
|
|
13
|
+
You will be given an ARIA accessibility snapshot of a web page, an action that just failed, and a human description of the element the test intended to interact with. The snapshot includes, where available, each element's on-screen position as [box=x,y,width,height] in CSS pixels.
|
|
14
14
|
Pick the single best-matching element that is LITERALLY present in the snapshot and respond with strict JSON only (no markdown, no prose) matching one of:
|
|
15
15
|
{"strategy":"role","role":"<aria role>","name":"<accessible name>"}
|
|
16
16
|
{"strategy":"text","text":"<visible text>"}
|
package/dist/healer/vision.d.ts
CHANGED
|
@@ -17,9 +17,14 @@ export type VisionCapture = {
|
|
|
17
17
|
scroll: ScrollOffset;
|
|
18
18
|
};
|
|
19
19
|
export declare function captureElementForVision(pageContext: PageContext, timeoutMs: number): Promise<VisionCapture | undefined>;
|
|
20
|
+
export type ResolvedVisionPoint = {
|
|
21
|
+
id: string;
|
|
22
|
+
viewportX: number;
|
|
23
|
+
viewportY: number;
|
|
24
|
+
};
|
|
20
25
|
export declare function resolveElementAtVisionPoint(pageContext: PageContext, point: Extract<VisionPoint, {
|
|
21
26
|
found: true;
|
|
22
|
-
}>, box: ViewportBox, scroll: ScrollOffset, timeoutMs: number): Promise<
|
|
27
|
+
}>, box: ViewportBox, scroll: ScrollOffset, timeoutMs: number): Promise<ResolvedVisionPoint | undefined>;
|
|
23
28
|
export declare function visionTagSelector(id: string): string;
|
|
24
29
|
export declare function cleanupVisionTag(pageContext: PageContext, id: string): Promise<void>;
|
|
25
30
|
//# sourceMappingURL=vision.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vision.d.ts","sourceRoot":"","sources":["../../src/healer/vision.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOrD,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,KAAK,GAAG,YAAY,CAAC;AAEtD,MAAM,MAAM,WAAW,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAClF,MAAM,MAAM,YAAY,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpD,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAOF,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAkB7H;AAUD,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,CAAC,EAC5C,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"vision.d.ts","sourceRoot":"","sources":["../../src/healer/vision.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOrD,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,KAAK,GAAG,YAAY,CAAC;AAEtD,MAAM,MAAM,WAAW,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAClF,MAAM,MAAM,YAAY,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpD,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAOF,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAkB7H;AAUD,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,MAAM,CAAC;IAKX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,CAAC,EAC5C,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CA0B1C;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEpD;AAID,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU1F"}
|
package/dist/healer/vision.js
CHANGED
|
@@ -27,17 +27,11 @@ async function captureElementForVision(pageContext, timeoutMs) {
|
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
const HEAL_ATTRIBUTE = 'data-tamash-heal-id';
|
|
30
|
-
// Verified empirically: boundingBox() on `:root` is viewport-relative (its `y` goes negative as
|
|
31
|
-
// the page scrolls down), so `box.{x,y} + scroll.{x,y}` recovers true document coordinates
|
|
32
|
-
// regardless of scroll state at capture time. elementFromPoint() itself only accepts
|
|
33
|
-
// viewport-relative coordinates and returns null for anything currently scrolled out of view, so
|
|
34
|
-
// resolution has to scroll first — done in a single evaluate() call so the scroll and the lookup
|
|
35
|
-
// happen atomically, with no round trip in between for the page to move again.
|
|
36
30
|
async function resolveElementAtVisionPoint(pageContext, point, box, scroll, timeoutMs) {
|
|
37
31
|
const docX = box.x + scroll.x + (point.x / 1000) * box.width;
|
|
38
32
|
const docY = box.y + scroll.y + (point.y / 1000) * box.height;
|
|
39
33
|
try {
|
|
40
|
-
const
|
|
34
|
+
const result = await pageContext.locator(':root').evaluate((_rootEl, [dx, dy]) => {
|
|
41
35
|
window.scrollTo({ left: Math.max(0, dx - window.innerWidth / 2), top: Math.max(0, dy - window.innerHeight / 2) });
|
|
42
36
|
const vx = dx - window.scrollX;
|
|
43
37
|
const vy = dy - window.scrollY;
|
|
@@ -47,9 +41,9 @@ async function resolveElementAtVisionPoint(pageContext, point, box, scroll, time
|
|
|
47
41
|
}
|
|
48
42
|
const generatedId = `tamash-heal-${Math.random().toString(36).slice(2)}`;
|
|
49
43
|
el.setAttribute('data-tamash-heal-id', generatedId);
|
|
50
|
-
return generatedId;
|
|
44
|
+
return { id: generatedId, viewportX: vx, viewportY: vy };
|
|
51
45
|
}, [docX, docY], { timeout: timeoutMs });
|
|
52
|
-
return
|
|
46
|
+
return result ?? undefined;
|
|
53
47
|
}
|
|
54
48
|
catch {
|
|
55
49
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vision.js","sourceRoot":"","sources":["../../src/healer/vision.ts"],"names":[],"mappings":";;;;;;AAmBA,gGAAgG;AAChG,iGAAiG;AACjG,yFAAyF;AACzF,kGAAkG;AAClG,iDAAiD;AAC1C,KAAK,kCAAkC,WAAwB,EAAE,SAAiB;IACvF,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC7C,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;YACvC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;SAChE,CAAC,CAAC;QAEH,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,cAAc,GAAG,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"vision.js","sourceRoot":"","sources":["../../src/healer/vision.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tamash-playwright",
|
|
3
|
-
"version": "0.7.0-beta.
|
|
3
|
+
"version": "0.7.0-beta.4",
|
|
4
4
|
"description": "Plug and Play Self-healing for Playwright and automatically recovers broken selectors using an AI model (Ollama, OpenAI, Anthropic, or Gemini).",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
],
|
|
16
16
|
"scripts": {
|
|
17
17
|
"build": "tsc -p tsconfig.json",
|
|
18
|
+
"pretest": "npm run build",
|
|
19
|
+
"test": "node --test \"unit-tests/*.test.js\"",
|
|
18
20
|
"prepublishOnly": "npm run build"
|
|
19
21
|
},
|
|
20
22
|
"keywords": [
|
package/usage.md
CHANGED
|
@@ -12,12 +12,15 @@ For a quicker, high-level overview see [README.md](README.md); this file is the
|
|
|
12
12
|
- [Required: set `actionTimeout`](#required-set-actiontimeout)
|
|
13
13
|
- [3. Check your setup](#3-check-your-setup)
|
|
14
14
|
- [4. Use it in your tests](#4-use-it-in-your-tests)
|
|
15
|
+
- [Local vs CI, at a glance](#local-vs-ci-at-a-glance)
|
|
15
16
|
- [What else it heals — no extra setup](#what-else-it-heals--no-extra-setup)
|
|
17
|
+
- [Position-based healing](#when-theres-no-name-to-match-position-based-healing)
|
|
16
18
|
- [Vision fallback](#when-text-alone-isnt-enough-vision-fallback)
|
|
17
19
|
- [Action recovery](#action-recovery-optional)
|
|
18
20
|
- [Not paying for the same heal twice](#not-paying-for-the-same-heal-twice)
|
|
19
21
|
- [Making a heal permanent: `apply-heals`](#making-a-heal-permanent-apply-heals)
|
|
20
22
|
- [Running `apply-heals` in CI](#running-apply-heals-in-ci)
|
|
23
|
+
- [Publishing a healing dashboard to GitHub Pages](#publishing-a-healing-dashboard-to-github-pages)
|
|
21
24
|
- [Reading reports](#reading-reports)
|
|
22
25
|
- [Environment variables](#environment-variables)
|
|
23
26
|
- [CLI commands](#cli-commands)
|
|
@@ -147,12 +150,49 @@ page.locator('input[name="username"]').describe('User Name Textbox')
|
|
|
147
150
|
|
|
148
151
|
Optional, but without it the healer has to guess purely from a broken CSS selector — a lot less to work with.
|
|
149
152
|
|
|
153
|
+
## Local vs CI, at a glance
|
|
154
|
+
|
|
155
|
+
Everything below applies identically in both places — same package, same behavior — but a few things are worth knowing up front:
|
|
156
|
+
|
|
157
|
+
| | Locally | In CI |
|
|
158
|
+
| --- | --- | --- |
|
|
159
|
+
| **Healing** | Runs automatically on every `npx playwright test`, using the `.env` file from "2. Connect an AI model". | Runs automatically the same way — set the same variables as CI secrets/environment variables on your test job instead of a `.env` file (real example in [Full GitHub Actions example](#full-github-actions-example)). |
|
|
160
|
+
| **Caching** ([below](#not-paying-for-the-same-heal-twice)) | Persists on disk across every run — a real, ongoing saving the longer you keep working. | Only helps *within* one run — most runners start from a fresh checkout each time, so it doesn't carry over between separate CI runs. `apply-heals` landing the real fix is what actually stops repeat AI calls in CI, not the cache. |
|
|
161
|
+
| **`apply-heals`** ([below](#making-a-heal-permanent-apply-heals)) | Run manually whenever you want, preview with `--dry-run`, review the diff, commit when ready. | Runs automatically after your test job and opens a PR for review — nothing ever auto-commits to your branch. |
|
|
162
|
+
|
|
150
163
|
## What else it heals — no extra setup
|
|
151
164
|
|
|
152
165
|
- **Popups and extra tabs.** A page opened via `context.newPage()`, `window.open`, or a `target="_blank"` link is just as healing-aware as your main `page`.
|
|
153
166
|
- **Elements inside `<iframe>`s.** `page.frameLocator('#my-iframe')` and anything chained off it heals the same way, correctly scoped to the iframe's own document.
|
|
154
167
|
- **Most of the Playwright API surface**, not just clicks and fills — `check`, `selectOption`, `dragTo`, `dispatchEvent`, read methods like `textContent`/`getAttribute`/`isChecked`, `screenshot`, and more. `dragTo` and `drop` are reported honestly on failure rather than guessed at.
|
|
155
168
|
|
|
169
|
+
## When there's no name to match: position-based healing
|
|
170
|
+
|
|
171
|
+
Sometimes the broken element has no useful identity of its own — a plain `<input>` with no name, no working placeholder, and a label that's visually right next to it but never actually linked (no `<label for>`, no `aria-labelledby`). A human finds it instantly by sight; matching purely on accessible name has nothing to grab onto.
|
|
172
|
+
|
|
173
|
+
For exactly these cases, `tamash-playwright` can also identify an element by its relationship to something nearby that *does* have an identity:
|
|
174
|
+
|
|
175
|
+
- **Near a label** — an unlabeled field sitting next to visible text (e.g. "Employee Id" as plain text beside an anonymous textbox).
|
|
176
|
+
- **Scoped to a container** — a name that exists but isn't unique page-wide (a "Yes" button that shows up in several dialogs), disambiguated by which named container it's actually inside.
|
|
177
|
+
- **Containing specific text** — the target is itself a container (a table row, say) identified by content inside it, not its own name.
|
|
178
|
+
|
|
179
|
+
You don't configure any of this — it's tried automatically, after normal name-based matching, only when nothing simpler applies. Same rules as everywhere else in this package: the AI only ever identifies *what* to look for and how it relates to nearby elements, never writes locator code directly, and a result only counts as found if it resolves to exactly one element — an ambiguous match is treated as "not found," never a guess.
|
|
180
|
+
|
|
181
|
+
### When the AI guesses the wrong strategy
|
|
182
|
+
|
|
183
|
+
The AI doesn't always pick correctly on the first try — a model can mistake "text sitting near an unlabeled field" for a real `<label>` association, especially smaller/cheaper models (observed in practice with a smaller OpenAI model; a larger Ollama model got it right immediately on the same page). If it suggests matching by label and `getByLabel(...)` resolves to zero matches, `tamash-playwright` automatically retries the *same text* as a "near" match before giving up on the text-based attempt entirely.
|
|
184
|
+
|
|
185
|
+
This costs nothing extra — no additional AI call, since it reuses the label text the AI already gave. The role to search for is inferred from the action itself, since a label suggestion doesn't carry one:
|
|
186
|
+
|
|
187
|
+
| Action | Inferred role |
|
|
188
|
+
| --- | --- |
|
|
189
|
+
| `fill`, `type`, `pressSequentially`, `clear` | `textbox` |
|
|
190
|
+
| `check`, `uncheck`, `setChecked` | `checkbox` |
|
|
191
|
+
| `selectOption` | `combobox` |
|
|
192
|
+
| anything else (`click`, `hover`, …) | not attempted — too ambiguous to guess safely |
|
|
193
|
+
|
|
194
|
+
If the retry doesn't resolve either, healing falls through to the vision fallback exactly as it would have without this step.
|
|
195
|
+
|
|
156
196
|
## When text alone isn't enough: vision fallback
|
|
157
197
|
|
|
158
198
|
Sometimes an element has nothing useful to match on by text — an icon-only button with no label, or several visually distinct elements that look identical in the accessibility tree. If your configured model supports image input (`gpt-4o`, `claude-haiku-4-5`, `gemini-2.0-flash`, …), `tamash-playwright` automatically falls back to a screenshot-based search after the normal text attempt fails — same provider, same key, no separate setup. Run `npx tamash-playwright doctor` to check whether your model is expected to support it.
|
|
@@ -167,7 +207,9 @@ Off by default — it's a second, more speculative layer beyond selector healing
|
|
|
167
207
|
|
|
168
208
|
Once a locator heals successfully, `tamash-playwright` remembers the fix in `.tamash-playwright/heals.jsonl`. The next time that exact locator breaks the same way, it tries the previously-confirmed selector *first* — no ARIA snapshot, no AI call. Only if that no longer works does it fall through to a fresh snapshot-and-AI-call, exactly as before.
|
|
169
209
|
|
|
170
|
-
|
|
210
|
+
**Locally**, this is a real, ongoing saving: `.tamash-playwright/heals.jsonl` lives on disk and persists across every run you do on that checkout — the same broken locator only ever costs one AI call, no matter how many times you re-run afterward.
|
|
211
|
+
|
|
212
|
+
**In CI, this only helps *within* one run**, not across separate ones — most runners start from a fresh checkout each time, so the gitignored, never-committed `.tamash-playwright/` doesn't carry over from one run to the next. What actually eliminates repeat AI calls in CI is `apply-heals` merging the real fix into source — once that lands, the locator isn't broken anymore and healing never runs for it again. The cache still helps within a single run, though: if the same broken locator shows up in several tests in that run (a shared Page Object method, say), only the first pays for a fresh AI call — every other occurrence reuses it for free.
|
|
171
213
|
|
|
172
214
|
```
|
|
173
215
|
[self-healer] tests/sampletest.spec.ts:13 — locator.fill "User Name Textbox" -> HEALED [provider=cache, vision=no, actionRecovery=no, suggested="role:textbox:Username"] — locator.fill: Timeout 8000ms exceeded.
|
|
@@ -224,7 +266,15 @@ npx tamash-playwright apply-heals --logs-dir shard-logs
|
|
|
224
266
|
```yaml
|
|
225
267
|
jobs:
|
|
226
268
|
test:
|
|
227
|
-
# ...your existing test job(s), sharded or not
|
|
269
|
+
# ...your existing test job(s), sharded or not — what matters here is that healing needs the
|
|
270
|
+
# same variables from "2. Connect an AI model", set as CI secrets/environment variables
|
|
271
|
+
# instead of a local .env file (which won't exist on the runner, and shouldn't be committed).
|
|
272
|
+
runs-on: ubuntu-latest
|
|
273
|
+
env:
|
|
274
|
+
HEALER_ENABLED: true
|
|
275
|
+
HEALER_PROVIDER: ollama
|
|
276
|
+
OLLAMA_MODEL: gpt-oss:120b
|
|
277
|
+
OLLAMA_API_KEY: ${{ secrets.OLLAMA_API_KEY }} # set via `gh secret set OLLAMA_API_KEY`
|
|
228
278
|
steps:
|
|
229
279
|
- run: npx playwright test
|
|
230
280
|
- uses: actions/upload-artifact@v4
|
|
@@ -238,6 +288,12 @@ jobs:
|
|
|
238
288
|
needs: test
|
|
239
289
|
if: ${{ !cancelled() && github.event_name == 'push' }} # not pull_request — see below
|
|
240
290
|
runs-on: ubuntu-latest
|
|
291
|
+
# Two pushes close together would otherwise race on the same heal branch/PR — whichever
|
|
292
|
+
# finished last could clobber the other mid-update. Queues instead (never cancels an
|
|
293
|
+
# in-progress run) so each one always starts from a clean, fully-finished state.
|
|
294
|
+
concurrency:
|
|
295
|
+
group: apply-heals-${{ github.ref }}
|
|
296
|
+
cancel-in-progress: false
|
|
241
297
|
permissions:
|
|
242
298
|
contents: write
|
|
243
299
|
pull-requests: write
|
|
@@ -262,10 +318,21 @@ jobs:
|
|
|
262
318
|
# HEALER_ENABLED=false is deliberate: proves the *written* fix works standalone —
|
|
263
319
|
# leaving healing on could let a still-broken selector get silently re-healed
|
|
264
320
|
# again, reporting green without ever proving the applied fix was correct.
|
|
321
|
+
#
|
|
322
|
+
# affectedTests (in the JSON report) lists exactly which tests exercised a fixed location
|
|
323
|
+
# this run, as `file:line` — scoping the re-run instead of the whole suite. Falls back to a
|
|
324
|
+
# full `npx playwright test` when it's empty (older heals.jsonl entries from before this
|
|
325
|
+
# field existed, or test.info() wasn't available) — safer to over-verify than under-check.
|
|
265
326
|
- name: Verify the healed selectors work on their own
|
|
266
327
|
id: verify
|
|
267
328
|
if: steps.check.outputs.changed == 'true'
|
|
268
|
-
run:
|
|
329
|
+
run: |
|
|
330
|
+
AFFECTED=$(jq -r '.affectedTests | join(" ")' .tamash-playwright/apply-heals-report.json)
|
|
331
|
+
if [ -n "$AFFECTED" ]; then
|
|
332
|
+
npx playwright test $AFFECTED
|
|
333
|
+
else
|
|
334
|
+
npx playwright test
|
|
335
|
+
fi
|
|
269
336
|
continue-on-error: true
|
|
270
337
|
env:
|
|
271
338
|
HEALER_ENABLED: false
|
|
@@ -294,14 +361,17 @@ jobs:
|
|
|
294
361
|
cat .tamash-playwright/apply-heals-report.md
|
|
295
362
|
} > .tamash-playwright/pr-body.md
|
|
296
363
|
|
|
364
|
+
# branch is suffixed with the ref so two different branches healing at the same time (if
|
|
365
|
+
# your trigger isn't restricted to a single branch) never fight over one physical heal
|
|
366
|
+
# branch — the concurrency group above only serializes runs on the *same* ref.
|
|
297
367
|
- name: Open PR with healed selectors
|
|
298
368
|
if: steps.check.outputs.changed == 'true'
|
|
299
369
|
uses: peter-evans/create-pull-request@v6
|
|
300
370
|
with:
|
|
301
371
|
commit-message: "fix: apply self-healed selectors from CI"
|
|
302
|
-
title: "Apply self-healed selectors (verification ${{ steps.verify.outcome == 'success' && 'passed' || 'FAILED' }})"
|
|
372
|
+
title: "Apply self-healed selectors on ${{ github.ref_name }} (verification ${{ steps.verify.outcome == 'success' && 'passed' || 'FAILED' }})"
|
|
303
373
|
body-path: .tamash-playwright/pr-body.md
|
|
304
|
-
branch: tamash-playwright/apply-heals
|
|
374
|
+
branch: tamash-playwright/apply-heals-${{ github.ref_name }}
|
|
305
375
|
delete-branch: true
|
|
306
376
|
|
|
307
377
|
- name: Fail the job if verification didn't pass
|
|
@@ -317,6 +387,88 @@ jobs:
|
|
|
317
387
|
- **The PR opens either way**, verification passed or failed. A failed verification is still worth a human's attention (maybe the fix is right and something else was flaky) — it gets an honest label instead of a silent false-positive. The job itself still fails on a bad verification, so CI status stays truthful even though the PR still exists for review.
|
|
318
388
|
- **[peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) is a no-op with nothing to commit**, so this job is safe to run on every push — it only opens a PR when there's an actual fix, reusing the same branch on later runs rather than piling up duplicates.
|
|
319
389
|
|
|
390
|
+
## Publishing a healing dashboard to GitHub Pages
|
|
391
|
+
|
|
392
|
+
A third job, run after `apply-heals`, can publish a single browsable page combining all three reports from a run — the initial execution (healing enabled), what got healed, and the post-fix verification (healing disabled) — no GitHub sign-in or artifact zip download required. Every past run stays browsable too, not just the latest.
|
|
393
|
+
|
|
394
|
+
The key idea: a second branch (`report-history` here) that's pure storage — never configured as your repo's actual Pages source, which stays "deploy via GitHub Actions workflow" — checked out fresh each run, given this run's new snapshot under `history/<run-id>/`, and pushed back before the accumulated tree is deployed:
|
|
395
|
+
|
|
396
|
+
```yaml
|
|
397
|
+
publish-report:
|
|
398
|
+
needs: [test, apply-heals]
|
|
399
|
+
if: ${{ !cancelled() && github.event_name == 'push' }}
|
|
400
|
+
runs-on: ubuntu-latest
|
|
401
|
+
# GitHub's own recommended group name for Pages deployments — only one deploy in flight at a
|
|
402
|
+
# time, so two close-together runs queue rather than racing to publish.
|
|
403
|
+
concurrency:
|
|
404
|
+
group: pages
|
|
405
|
+
cancel-in-progress: false
|
|
406
|
+
permissions:
|
|
407
|
+
contents: write # for pushing this run's snapshot to report-history — unrelated to below
|
|
408
|
+
pages: write
|
|
409
|
+
id-token: write
|
|
410
|
+
environment:
|
|
411
|
+
name: github-pages
|
|
412
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
413
|
+
steps:
|
|
414
|
+
- uses: actions/checkout@v4 # your repo's own scripts (see below) need to be present
|
|
415
|
+
|
|
416
|
+
# report-history is storage-only. Cloned via a token-authenticated URL rather than
|
|
417
|
+
# actions/checkout + ref: because checkout errors out if the branch doesn't exist yet —
|
|
418
|
+
# exactly the state on the very first run.
|
|
419
|
+
- name: Checkout report-history branch
|
|
420
|
+
run: |
|
|
421
|
+
if git clone --depth 1 --branch report-history \
|
|
422
|
+
"https://x-access-token:${{ github.token }}@github.com/${{ github.repository }}.git" _site 2>/dev/null; then
|
|
423
|
+
echo "Found existing report-history branch."
|
|
424
|
+
else
|
|
425
|
+
mkdir -p _site
|
|
426
|
+
git -C _site init -q -b report-history
|
|
427
|
+
git -C _site remote add origin "https://x-access-token:${{ github.token }}@github.com/${{ github.repository }}.git"
|
|
428
|
+
fi
|
|
429
|
+
git -C _site config user.name "github-actions[bot]"
|
|
430
|
+
git -C _site config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
431
|
+
|
|
432
|
+
- uses: actions/download-artifact@v4
|
|
433
|
+
with: { name: playwright-report, path: run-data/initial-run }
|
|
434
|
+
- uses: actions/download-artifact@v4
|
|
435
|
+
with: { name: healing-report, path: run-data/healing-report }
|
|
436
|
+
continue-on-error: true # doesn't exist when nothing needed healing this run
|
|
437
|
+
- uses: actions/download-artifact@v4
|
|
438
|
+
with: { name: apply-heals-verification-report, path: run-data/post-healing-run }
|
|
439
|
+
continue-on-error: true
|
|
440
|
+
|
|
441
|
+
# Your own script — reads run-data/, writes _site/history/<run-id>/index.html (this run's
|
|
442
|
+
# self-contained snapshot) plus a regenerated _site/index.html ("latest" mirror + a "Past
|
|
443
|
+
# runs" list linking into history/). Worth writing as a real file (e.g.
|
|
444
|
+
# .github/scripts/compose-report-page.sh) rather than inlining it in the workflow: a
|
|
445
|
+
# heredoc's closing delimiter must sit at column 0, which conflicts with YAML's indented
|
|
446
|
+
# block-scalar body.
|
|
447
|
+
- name: Compose report page
|
|
448
|
+
run: bash .github/scripts/compose-report-page.sh
|
|
449
|
+
|
|
450
|
+
- name: Commit report history
|
|
451
|
+
working-directory: _site
|
|
452
|
+
run: |
|
|
453
|
+
git add -A
|
|
454
|
+
if git diff --cached --quiet; then
|
|
455
|
+
echo "No history changes to commit."
|
|
456
|
+
else
|
|
457
|
+
git commit -q -m "Archive report for run #${{ github.run_number }} (${{ github.sha }})"
|
|
458
|
+
git push -q origin HEAD:report-history
|
|
459
|
+
fi
|
|
460
|
+
|
|
461
|
+
- uses: actions/configure-pages@v5
|
|
462
|
+
- uses: actions/upload-pages-artifact@v3
|
|
463
|
+
with: { path: _site }
|
|
464
|
+
- id: deployment
|
|
465
|
+
uses: actions/deploy-pages@v4
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
Your compose script decides the page's actual layout, but the two things it needs to produce are consistent: a per-run snapshot under `history/<run-id>/index.html` (self-contained — copy `run-data/initial-run` and `run-data/post-healing-run` alongside it, link to them relatively) and a root `_site/index.html` that mirrors the latest run's content plus a list linking into every entry under `history/`. Read `.tamash-playwright/apply-heals-report.json`'s `fixes` array for the before/after details to show in the "what got healed" section.
|
|
469
|
+
|
|
470
|
+
One-time setup in your repo's Settings → Pages: source = "GitHub Actions" (not "Deploy from a branch" — `report-history` is deliberately never selected there, it's just storage the workflow manages itself).
|
|
471
|
+
|
|
320
472
|
## Reading reports
|
|
321
473
|
|
|
322
474
|
Every healing attempt — succeeded or not — shows up in Playwright's own HTML report (`npx playwright show-report`):
|