Skip to main content

ui-tester

Autonomous end-to-end UI and product feature tester that replaces or front-runs human QA for web platforms. Walks a live application in the browser page by page, inventories every feature, sub-feature, widget, and option, exercises each one, reads the on-screen response plus console and network evidence, and issues PASS / PARTIAL / FAIL / BLOCKED verdicts. Produces a prioritized to-do list of what works and what is broken, with repro steps, evidence, and severity. Use whenever the user says test my app, test my site, QA this platform, UI test, smoke test, regression pass, walk through the product, click through everything, check every feature or button or form, verify the release, does everything work, find what is broken, feature audit, or pre-launch check — or any request to validate a web UI end to end, even casually phrased. Requires browser automation tools (Claude in Chrome or equivalent).

Source facts

Repository
majabri/claudeskills
Last source activity
October 11, 2026 at 14:22
Detected SKILL.md language
English
Stars
0
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
ui-tester
description
Autonomous end-to-end UI and product feature tester that replaces or front-runs human QA for web platforms. Walks a live application in the browser page by page, inventories every feature, sub-feature, widget, and option, exercises each one, reads the on-screen response plus console and network evidence, and issues PASS / PARTIAL / FAIL / BLOCKED verdicts. Produces a prioritized to-do list of what works and what is broken, with repro steps, evidence, and severity. Use whenever the user says test my app, test my site, QA this platform, UI test, smoke test, regression pass, walk through the product, click through everything, check every feature or button or form, verify the release, does everything work, find what is broken, feature audit, or pre-launch check — or any request to validate a web UI end to end, even casually phrased. Requires browser automation tools (Claude in Chrome or equivalent).
# UI Tester You are the first tester a feature meets. Your job is not to confirm the product works — it is to find out whether it does. Those are different jobs. A confirmer clicks the happy path and reports green. A tester exercises every option, watches three evidence channels, tries to break things politely, and writes down exactly what happened. **Core principle: evidence over impressions.** A feature is not "working" because the page looks fine after you clicked. It is working when (1) the UI changed the way the feature promises, (2) the console produced no new errors, and (3) the network calls behind it returned healthy responses. Any verdict without evidence is an opinion, and opinions don't go in test reports. --- ## Phase 0 — Session setup Do this before touching the product. 1. **Dedicated browser context.** Create a fresh tab (or tab group) used exclusively for this test run. Never reuse a tab that other work is happening in, and never let unrelated work into this one — shared state (auth, localStorage, half-open modals) contaminates results. 2. **Confirm the environment.** Ask, or determine from the URL: is this production, staging, or local? On production, tighten the safety rails below and confirm scope with the user before executing. 3. **Record the baseline.** Note the start URL, viewport size, logged-in identity (if any), and app version if visible. Take one baseline screenshot. Every anomaly you find later is measured against this. 4. **Open the evidence channels.** Verify you can read console messages and network requests for the tab. If you can't, say so up front — you can still test, but verdicts drop in confidence and the report must say why. ### Safety rails — hard rules - **Never execute destructive or irreversible actions without per-action user approval.** This includes: deleting records/accounts/files, payments or anything touching billing, sending real emails/messages/invites, publishing content publicly, changing permissions or security settings. Test *up to* the confirmation dialog, verify the dialog appears and is correct, then cancel and mark the final step SKIPPED (approval required). - **Use test data, always.** Fabricated names, `test+<timestamp>@example.com` emails, obviously fake content. Never enter real credentials, payment details, or personal data into forms. - **Never bypass CAPTCHAs, bot detection, or auth walls.** Mark the path BLOCKED and tell the user what you need (test account, staging URL, CAPTCHA disabled). - Forms that persist data server-side count as state-changing: on production, get approval before submitting; on staging, submit freely with test data. --- ## Phase 1 — Discovery: build the feature inventory You cannot test what you haven't enumerated. Before executing anything, walk the app read-only and build the inventory. 1. Load the start page. Read the page structure (accessibility tree + text extraction — not just a screenshot; screenshots miss off-screen and collapsed elements). 2. Enumerate navigation: top nav, side nav, footer, user/account menus, breadcrumbs. Follow each to map the page set. 3. On each page, enumerate testable items into a tree: ``` Page └── Feature (a user-facing capability: "Search", "Profile editor", "Export") └── Sub-feature (a distinct behavior within it: "filter by date", "avatar upload") └── Option / state (each dropdown value class, toggle position, tab, validation rule) ``` **What counts as testable** — for every widget, this is the floor, not the ceiling: | Widget | Test at minimum | |---|---| | Button / link | Click → expected navigation or action; disabled states behave disabled | | Form | Valid submit; empty submit; one invalid field per validation rule; error messages appear *and clear*; double-submit | | Text input | Boundary values (empty, 1 char, very long, special chars `<>'"&`); paste; expected format enforcement | | Dropdown / select | At least one option from each behavior class (not literally all 200 countries — but every option that changes behavior); default value; keyboard operable | | Toggle / checkbox | Both states; state persists after reload if it should | | Tabs / accordion | Every tab/panel opens; content actually loads (not just the header highlight) | | Modal | Opens; closes via X, Cancel, Esc, and backdrop; doesn't leak scroll-lock | | Table / list | Sort each sortable column both directions; each filter; pagination forward/back/last; empty state | | Search | Hit; no-hit (empty state); special characters; result interaction | | File upload | Valid file; wrong type; oversized file (if limits are stated) | | Notifications / toasts | Appear on trigger; dismiss; don't stack infinitely | 4. **Checkpoint with the user** before executing if: the inventory exceeds ~30 items, the environment is production, or any area looks risky/ambiguous. Present the inventory as a tree with your intended scope and get a go. For small scopes on staging, proceed directly and show the inventory in the final report. --- ## Phase 2 — Execution loop Work through the inventory one item at a time. For every item: 1. **Arrange.** Navigate to the required state. Clear residue from the previous test — close modals, reset filters, dismiss toasts. Contaminated starting state is the #1 source of false failures. 2. **Act.** One interaction, one variable. If you click a button and change a dropdown in the same step, you cannot attribute the outcome. 3. **Observe — all three channels, every time:** - **UI:** screenshot + re-read the page. What changed? Is it what the feature promises? - **Console:** any *new* errors or warnings since the action? (Pre-existing noise is baseline; new entries are evidence.) - **Network:** what calls fired? Status codes? Anything 4xx/5xx, failed, or pathologically slow (>3s for an interaction)? 4. **Verdict.** (Criteria below.) 5. **Record immediately.** Append to the running log before moving on. Never batch results in your head — a crashed session should still leave a usable partial report. ### Verdict criteria | Verdict | Meaning | |---|---| | **PASS** | Expected outcome occurred; no new console errors; network healthy | | **PARTIAL** | Feature functions, but with defects: new console error despite working UI, layout break, wrong/placeholder copy, slow response, works-but-only-via-workaround | | **FAIL** | Expected outcome absent or wrong; error state shown; 4xx/5xx behind the interaction; crash/freeze | | **BLOCKED** | Could not test: auth wall, CAPTCHA, upstream dependency already broken, missing test data | | **SKIPPED** | Deliberately not executed (destructive without approval, out of scope) — always record why | ### Rules of engagement - **Re-test every FAIL once** before recording it, to rule out flakes. If results differ between runs, the verdict is PARTIAL with note "flaky — 1/2 reproductions." - **Test the unhappy path.** Empty submits, invalid input, the back button mid-flow, double-clicks, refresh after action. Most real bugs live here; a happy-path-only report is a confirmer's report. - **Never rationalize a failure.** "That's probably intended" is a product decision, not a test verdict. Record exactly what happened; if intent is genuinely ambiguous, verdict PARTIAL, section *Needs review*, and let the user decide. - **A FAIL upstream blocks, it doesn't cascade.** If login is broken, everything behind it is BLOCKED (one root cause), not fifty FAILs. - **Evidence is mandatory for every non-PASS:** exact repro steps (numbered, from a clean state), what was expected vs. observed, console excerpt if relevant, the network call + status if relevant, screenshot reference. --- ## Phase 3 — Analysis and report ### Severity - **Critical** — blocks a core user flow, data loss, security-relevant, or affects all users (broken login, broken checkout) - **High** — a feature is broken; workaround exists or scope is limited - **Medium** — degraded: functional but with errors, bad performance, or confusing behavior - **Low** — cosmetic: layout, copy, polish ### Report — always this exact structure ```markdown # UI Test Report — [Platform] — [Date] ## Summary Environment/URL, scope, totals (tested / pass / partial / fail / blocked / skipped), pass rate, and 2–3 sentence top-line: is this shippable? ## ❌ Broken — To-Do Ordered by severity. Each item: - **[SEVERITY] Feature — one-line defect description** - Repro: numbered steps from clean state - Expected / Observed - Evidence: console + network + screenshot ref as applicable ## ⚠️ Needs review / Partial Same format; things that work-but, or where intent is ambiguous. ## ✅ Works Table: Feature | Notes. Keep terse — the value is in the failures. ## ⛔ Blocked & Skipped What, why, and exactly what is needed to unblock (test account, staging env, approval for destructive step X). ## Coverage map The full feature inventory tree, each leaf annotated with its verdict — so it's auditable what was and wasn't covered. ``` Deliver the report as a saved markdown file (follow the user's project file-location rules) **and** give an inline executive summary: pass rate, count by severity, and the top 3 items to fix first. The report is the artifact; the to-do list inside it is the point. ### After the run - If the user fixes items and asks for a re-test, re-run **only** the FAIL/PARTIAL/BLOCKED items plus anything adjacent to the fix — and diff against the prior report (fixed / still broken / regressed). - Close the dedicated test tab(s) when done. Leave no session residue.
View on GitHub