بنقرة واحدة
webapp-testing
Use when you need to interact with or test a local web application using Playwright.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Use when you need to interact with or test a local web application using Playwright.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Use when you need to compare a project .bib against a Paperpile project/topic folder to find uncited papers or unfiled entries.
Use when you need to extract citations from a PDF and generate a validated .bib file. Reads the PDF, identifies all referenced works, constructs BibTeX entries with metadata verification, then runs bib-validate.
Use when you need to check a LaTeX submission against a PDF assessment brief.
Use when you need to replicate a quantitative analysis in a second language (R↔Python↔Stata↔Julia) to verify correctness. Level 1 of the verification hierarchy.
Use when you need to challenge research assumptions or stress-test arguments.
Review user-facing documentation for accuracy, consistency, and completeness across private, public, nested repos, and the user manual. Use when docs feel stale, after major changes, or before sharing. (Replaces `repo-doc-audit`)
| name | webapp-testing |
| description | Use when you need to interact with or test a local web application using Playwright. |
| license | Complete terms in LICENSE.txt |
| allowed-tools | Bash(uv*, mkdir*, ls*, kill*), Read, Write |
| skill-dependencies | ["playwright-cli"] |
To test local web applications, write native Python Playwright scripts.
Use this skill when the task needs local server lifecycle management, custom
Python assertions, or a repeatable test script. For ad-hoc browser navigation
and interaction that does not need custom Python, use $playwright-cli.
Helper Scripts Available:
scripts/with_server.py - Manages server lifecycle (supports multiple servers)Always run helper scripts with --help first to see usage. DO NOT read the source until you try running the helper and find that a customized solution is absolutely necessary. These scripts can be very large and thus pollute your context window. They exist to be called directly as black-box scripts rather than ingested into your context window.
Before writing a native Playwright script, verify the selected project environment:
uv run python -c "from importlib.metadata import version; print(version('playwright'))"
If the import fails:
For a one-off page inspection without custom assertions, use the declared
$playwright-cli fallback.
For repeatable assertions or managed server testing, ask before installing dependencies. After approval, install into the project's development environment rather than adding a browser runtime to production dependencies:
uv pip install --python <project>/.venv/bin/python playwright
uv run python -m playwright install chromium
Re-run the import preflight, then continue with native Python Playwright.
If the project already declares a Playwright dev extra, prefer syncing that
extra over an ad-hoc environment install. Never use bare pip or a
machine-global Python environment.
User task → Is it static HTML?
├─ Yes → Read HTML file directly to identify selectors
│ ├─ Success → Write Playwright script using selectors
│ └─ Fails/Incomplete → Treat as dynamic (below)
│
└─ No (dynamic webapp) → Is the server already running?
├─ No → Run: uv run python scripts/with_server.py --help
│ Then use the helper + write simplified Playwright script
│
└─ Yes → Reconnaissance-then-action:
1. Navigate and wait for networkidle
2. Take screenshot or inspect DOM
3. Identify selectors from rendered state
4. Execute actions with discovered selectors
To start a server, run --help first, then use the helper:
Single server:
uv run python scripts/with_server.py --server "npm run dev" --port 5173 -- uv run python your_automation.py
Multiple servers (e.g., backend + frontend):
uv run python scripts/with_server.py \
--server "cd backend && uv run python server.py" --port 3000 \
--server "cd frontend && npm run dev" --port 5173 \
-- uv run python your_automation.py
To create an automation script, include only Playwright logic (servers are managed automatically):
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True) # Always launch chromium in headless mode
page = browser.new_page()
page.goto('http://localhost:5173') # Server already running and ready
page.wait_for_load_state('networkidle') # CRITICAL: Wait for JS to execute
# ... your automation logic
browser.close()
Inspect rendered DOM:
page.screenshot(path='/tmp/inspect.png', full_page=True)
content = page.content()
page.locator('button').all()
Identify selectors from inspection results
Execute actions using discovered selectors
❌ Don't inspect the DOM before waiting for networkidle on dynamic apps
✅ Do wait for page.wait_for_load_state('networkidle') before inspection
scripts/ can help. These scripts handle common, complex workflows reliably without cluttering the context window. Use --help to see usage, then invoke directly.sync_playwright() for synchronous scriptstext=, role=, CSS selectors, or IDspage.wait_for_selector() or page.wait_for_timeout()element_discovery.py - Discovering buttons, links, and inputs on a pagestatic_html_automation.py - Using file:// URLs for local HTMLconsole_logging.py - Capturing console logs during automation