Teach agents to use AI browser agents for exploratory and smoke QA with step budgets, evidence-based assertions, guardrails, and Playwright conversion.
npx skills add https://github.com/PramodDutta/qaskills --skill Browser Agent QA Testing
You are an AI QA engineer who uses browser agents for bounded exploratory and smoke testing, gathers evidence for every claim, and converts stable findings into maintainable Playwright tests.
Create a small harness for browser-agent QA runs.
python -m venv .venv
. .venv/bin/activate
pip install browser-use playwright pydantic python-dotenv
playwright install chromium
npm install --save-dev @playwright/test
Store run configuration outside prompts.
qa-agent/
charters/
checkout-smoke.md
account-settings.md
evidence/
screenshots/
notes/
scripts/
run_browser_agent.py
tests/
e2e/
frozen-smoke.spec.ts
Every agent run needs a charter.
# Charter: Checkout Smoke
Goal: Verify a signed-in user can add one item to the cart and reach the payment step.
Environment: Staging
Account: Synthetic buyer
Step budget: 35
Allowed actions: Browse catalog, add item, open cart, start checkout
Forbidden actions: Submit real payment, change account email, delete saved addresses
Evidence required: Final URL, visible checkout heading, screenshot, console errors
Stop condition: Payment form is visible or a blocking bug is found
Keep the browser-agent task explicit and bounded.
# qa-agent/scripts/run_browser_agent.py
import asyncio
from browser_use import Agent
from dotenv import load_dotenv
load_dotenv()
TASK = """
You are testing the checkout smoke charter.
Use the staging site only.
Do not submit payment.
Stop after 35 browser actions.
For every assertion, mention the exact visible text, URL, or screenshot evidence.
If blocked, report the blocker and stop.
"""
async def main() -> None:
agent = Agent(task=TASK)
result = await agent.run(max_steps=35)
print(result)
if __name__ == "__main__":
asyncio.run(main())
Convert a stable exploratory path into deterministic automation.
// tests/e2e/checkout-smoke.spec.ts
import { expect, test } from '@playwright/test';
test('signed-in buyer can reach payment step', async ({ page }) => {
await page.goto('/login');
await page.getByLabel('Email').fill(process.env.SMOKE_USER || '[email protected]');
await page.getByLabel('Password').fill(process.env.SMOKE_PASSWORD || 'change-me');
await page.getByRole('button', { name: 'Sign in' }).click();
await page.getByRole('link', { name: 'Catalog' }).click();
await page.getByRole('button', { name: /add to cart/i }).first().click();
await page.getByRole('link', { name: 'Cart' }).click();
await page.getByRole('button', { name: 'Checkout' }).click();
await expect(page).toHaveURL(/checkout/);
await expect(page.getByRole('heading', { name: /payment/i })).toBeVisible();
});
The browser agent report must include these fields.
10. Paths not covered.
11. Recommendation to automate or not automate.
Use guardrails to keep agent runs safe.
| Guardrail | Reason | Example |
|---|---|---|
| Step budget | Prevent wandering | Stop at 35 actions |
| Test account | Avoid customer data | Synthetic buyer |
| Forbidden actions | Prevent damage | Do not submit payment |
| Evidence rule | Reduce hallucination | Cite visible text |
| Freeze criteria | Create durable tests | Convert stable smoke path |
| Human review | Catch weak claims | Review notes before filing bugs |
10. Running without a stop condition.
Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
Run Playwright tests at scale with cloud-hosted browsers and integrated Azure portal reporting.
Browser debugging, performance profiling, and automation via Chrome DevTools MCP. Use when user says "debug this page", "take a screenshot", "check network requests", "profile performance", "inspect console errors", or "analyze page load". Do NOT use for full E2E test suites (use playwright-skill) or non-browser debugging.
QA-test a website or web app and return a 1-5 quality score (5 = flawless, 1 = broken) with evidence. Use when the user wants to test, QA, evaluate, score, or "check how good" a site, page, flow, or app — including a local dev server (e.g. "qa test localhost:5173", "does the checkout work?", "rate this landing page"). Drives a real Browser Use cloud browser, tunneling localhost automatically.
Set up component testing with Playwright using a story gallery — scaffold stories and a gallery dev page driven by the built-in mount fixture, no dedicated component-testing runtime. Use when asked to test React or Vue components in isolation with Playwright, or to migrate off @playwright/experimental-ct-react / -vue.
Tests in real browsers via Chrome DevTools MCP. Use when building or debugging anything that runs in a browser. Use when you need to inspect the DOM, capture console errors, analyze network requests, profile performance, or verify visual output with real runtime data. Requires the chrome-devtools MCP server to be configured.
Always use browser-harness for any web interaction: automation, scraping, testing, or site/app work.
Run a browser-based UI review of the WordPress.com Help Center across multiple surfaces, looking for visual and behavioral issues. Use when asked to test the Help Center UI.
Take pramoddutta/browser agent qa testing from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference pip, npm.
Without those the skill loads but fails at the first command.