GlowHalo Skills

Browser Automation Silent-Failure Triage

When a Playwright/Puppeteer/Selenium script says it worked but nothing changed, get ranked causes, probe snippets and a read-back check. Browser Automation Silent-Failure Triage helps when a Playwright, Puppeteer or Selenium script says it worked but nothing changed: the upload did not upload, the save did not save, the click did nothing.

Gumroad · $2Groble · 2,900원SkillHQ · €2

Example input

Use the Browser Automation Silent-Failure Triage on this problem (a sample I wrote).

My Playwright script (Node, headless, Playwright 1.4x) edits a profile on our own staging site:

  await page.setInputFiles('input[type=file]', 'avatar.png');
  await page.getByRole('button', { name: 'Save' }).click();
  console.log('saved');

The log prints "saved" and there is no error. Right after setInputFiles the avatar preview shows my image. After Save, the page shows a red line "Please upload an avatar photo." Reloading the page shows the old default avatar. I only watch network requests whose URL matches /api/ and I see none after Save. I already tried waitForTimeout(5000) before clicking Save (same result) and headed mode (same result). The Save button looks enabled and nothing covers it.

Example output

## Symptom

1. **Action**: upload a file (`setInputFiles('input[type=file]', 'avatar.png')`), then click Save.
2. **What the script reported**: both calls resolved, no error, `console.log('saved')` printed. (Inference: "saved" is just your own log line and proves nothing.)
3. **What the page/server actually shows**: the preview shows the image right after setInputFiles; after Save the page shows the red line "Please upload an avatar photo."; after reload the old default avatar is back. Nothing was saved.
4. **Framework and runner**: Playwright (Node), headless, version "1.4x" (exact version unknown); a headed run gives the same result. Proxy: unknown.
5. **Already tried**: `waitForTimeout(5000)` before Save (same result); headed mode (same result). Observation: the network watcher only matches URLs containing `/api/`, and it saw nothing after Save. Not tried: logging all non-GET requests, checking file-input count, dispatching `change`.

Note: the two tries were each a single change, so they are attributable. They rule out a plain timing race and a headless-only problem.

## Likely causes

1. **#7 `setInputFiles` ignored (the app never registered the file)** — LIKELY — evidence: "Right after setInputFiles the avatar preview shows my image. After Save, the page shows a red line 'Please upload an avatar photo.'" The preview and the app's form state disagree, so the app's own validator says there is no file.
2. **#6 Upload preview without upload (multi-step upload)** — LIKELY — evidence: "the avatar preview shows my image" followed by "Please upload an avatar photo." The preview may be a local client-side render, and a separate upload request may be needed before Save.
3. **#10 Hard limit or validation with no UI message / hidden validator stops the click handler** — POSSIBLE — evidence: "red line ... 'Please upload an avatar photo.'" and "none [requests] after Save". Here the validator does show a message, but the effect is the one in the catalog: the save request is never sent.
4. **#9 Save went to a page URL, not an API URL** — POSSIBLE — evidence: "I only watch network requests whose URL matches /api/ and I see none after Save." Your filter could be hiding a request to a page URL. The validation message argues against this, but it is not ruled out until you log every non-GET request.
…

Real output from running the skill on a sample problem, shortened. The skill file itself is not published here.

Also in a bundle

← All skills