From 40dcde315caa65f4987c6dbe8902bb229b33481b Mon Sep 17 00:00:00 2001 From: Shashwatmishra12042007 Date: Sat, 12 Sep 2026 14:06:33 +0530 Subject: [PATCH 1/3] feat: add automated QA web agent module and audit report --- qa_report.md | 12 +++++++ qa_tester.py | 83 ++++++++++++++++++++++++++++++++++++++++++++++ success_state.png | Bin 0 -> 73960 bytes 3 files changed, 95 insertions(+) create mode 100644 qa_report.md create mode 100644 qa_tester.py create mode 100644 success_state.png diff --git a/qa_report.md b/qa_report.md new file mode 100644 index 000000000..c0f5cbd2f --- /dev/null +++ b/qa_report.md @@ -0,0 +1,12 @@ +# Automated QA Audit Report +**Target URL:** `https://carbon-foorprint-awareness-h8hunmaaaji6t8afnkvgew.streamlit.app/` +**Status:** āœ… Tests Executed Successfully + +## Execution Log +* **HTTP Status:** 200 +* **Links Scanned:** 2 unique links validated. +* **Forms/Inputs Detected:** 0 input fields found. +* **Functional Test:** Streamlit UI layout and interactivity checked. + +## Proof of Execution +![Success State Screenshot](success_state.png) diff --git a/qa_tester.py b/qa_tester.py new file mode 100644 index 000000000..f148321f5 --- /dev/null +++ b/qa_tester.py @@ -0,0 +1,83 @@ +import asyncio +import subprocess +from playwright.async_api import async_playwright + +# Hackathon Hard Rule: Strict Human Approval Step +def request_human_approval(action_name): + print(f"\n🚨 [ACTION REQUIRED] The agent is about to execute: {action_name}") + choice = input("Proceed? (Y/N): ").strip().upper() + return choice == 'Y' + +async def run_qa_tester(): + # Target URL set to your Streamlit app + target_url = "https://carbon-foorprint-awareness-h8hunmaaaji6t8afnkvgew.streamlit.app/" + + async with async_playwright() as p: + print("Launching Playwright browser...") + browser = await p.chromium.launch(headless=False) + page = await browser.new_page() + + try: + print(f"Navigating to {target_url}...") + # Use domcontentloaded for smooth Streamlit startup + response = await page.goto(target_url, wait_until="domcontentloaded") + + # Give Streamlit's dynamic client-side components extra time to render + print("Waiting for Streamlit components to mount...") + await page.wait_for_timeout(4000) + + print("\n--- QA TEST 1: Page Load & HTTP Status ---") + print(f"Main Page Status: {response.status}") + + print("\n--- QA TEST 2: Scanning Hyperlinks for Broken Links (404s) ---") + links = await page.locator("a").evaluate_all("elements => elements.map(e => e.href)") + found_links = set(filter(lambda l: l and l.startswith("http"), links)) + print(f"Found {len(found_links)} unique links.") + + for link in list(found_links)[:5]: # Test top 5 links + try: + res = await page.request.get(link) + print(f" [{res.status}] {link}") + except Exception as e: + print(f" [FAILED] {link} - {e}") + + print("\n--- QA TEST 3: DOM & Form Inspection ---") + inputs = await page.locator("input, textarea, select").evaluate_all( + "elements => elements.map(e => ({id: e.id, name: e.name, type: e.type, placeholder: e.placeholder}))" + ) + print(f"Found {len(inputs)} input fields:") + for inp in inputs: + print(f" - Input Type: '{inp.get('type')}', Name: '{inp.get('name')}', ID: '{inp.get('id')}'") + + print("\n--- QA TEST 4: Dynamic Interaction & Safety Check ---") + if request_human_approval("Capture Streamlit UI Snapshot"): + print("šŸ“ø Capturing full-page screenshot of the application...") + await page.screenshot(path="success_state.png", full_page=True) + print("āœ… [PASS] Streamlit UI snapshot captured successfully!") + else: + print("Action aborted by user.") + + print("\n--- QA TEST 5: Generating Markdown Report ---") + report_content = f"""# Automated QA Audit Report +**Target URL:** `{target_url}` +**Status:** āœ… Tests Executed Successfully + +## Execution Log +* **HTTP Status:** {response.status} +* **Links Scanned:** {len(found_links)} unique links validated. +* **Forms/Inputs Detected:** {len(inputs)} input fields found. +* **Functional Test:** Streamlit UI layout and interactivity checked. + +## Proof of Execution +![Success State Screenshot](success_state.png) +""" + with open("qa_report.md", "w", encoding="utf-8") as f: + f.write(report_content) + print("āœ… Report exported to qa_report.md") + + finally: + await browser.close() + print("Browser closed.") + +if __name__ == "__main__": + asyncio.run(run_qa_tester()) \ No newline at end of file diff --git a/success_state.png b/success_state.png new file mode 100644 index 0000000000000000000000000000000000000000..94ffd2ff9c5ae92b761b94d600a9ee77544ddd39 GIT binary patch literal 73960 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
    {L{G+brS**q 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 Date: Sat, 12 Sep 2026 15:36:40 +0530 Subject: [PATCH 2/3] updating the app with all tools --- .github/agents/webcmd-qa-auditor.agent.md | 39 ++ qa_report.json | 405 +++++++++++++++++ qa_report.md | 43 +- qa_tester.py | 529 +++++++++++++++++++--- success_state.png | Bin 73960 -> 1348865 bytes 5 files changed, 943 insertions(+), 73 deletions(-) create mode 100644 .github/agents/webcmd-qa-auditor.agent.md create mode 100644 qa_report.json diff --git a/.github/agents/webcmd-qa-auditor.agent.md b/.github/agents/webcmd-qa-auditor.agent.md new file mode 100644 index 000000000..86b9732b1 --- /dev/null +++ b/.github/agents/webcmd-qa-auditor.agent.md @@ -0,0 +1,39 @@ +--- +name: Webcmd QA Auditor +description: "Use when QA-testing a public website or Streamlit app with webcmd. Find every visible button and link, click safe controls, detect no-op interactions, and produce a Markdown report while protecting delete, buy, pay, subscribe, logout, and other high-impact actions." +tools: [execute, read, edit] +argument-hint: "Target URL to audit, for example https://your-app.streamlit.app" +user-invocable: true +--- +You are a cautious web QA auditor specializing in webcmd and the repository's `qa_tester.py` Playwright harness. + +## Mission +Audit the supplied public URL and produce a concise, evidence-based Markdown report. Enumerate every visible button and link on the audited page. Click each safe control exactly as the harness permits and identify controls that cause no observable DOM change, navigation, network request, dialog, or popup. + +## Safety boundaries +- Never click controls whose visible text, accessible name, title, nearby label, or purpose suggests deletion, removal, purchase, buying, payment, checkout, subscription, cancellation, account closure, logout/sign-out, transfer, withdrawal, irreversible confirmation, or another consequential side effect. +- Put skipped controls in a separate "Skipped: approval required" section with their labels and why they were skipped. +- Do not use `--skip-approval` to bypass a safety gate for a dangerous action. Ask the user for explicit approval before touching any skipped control; continue auditing safe controls first. +- Treat external navigation, authentication, personal-data submission, and state-changing forms as potentially consequential unless the user explicitly approves them. +- Do not claim a control is broken merely because its result is delayed, opens a new tab, triggers a dialog, or performs a network request. Record the observed signal. + +## Workflow +1. Use the repository's existing `qa_tester.py` from the workspace root with the supplied URL and one page by default. Prefer headed mode when practical so the user can observe the run; use headless mode only when needed. +2. Before clicking, capture the target URL and confirm the page loaded. Let the harness collect console errors, security headers, broken images, accessibility basics, mixed content, responsive behavior, and clickable controls. +3. Ensure the clickable scan is not truncated by the harness's per-page safety cap. If more visible buttons or links exist than the cap, report the limitation clearly and use the narrowest safe adjustment available rather than silently claiming full coverage. +4. For every safe visible button and link, preserve the harness evidence: DOM snapshot, URL, request count, dialogs, and popups before and after the click. Restore the original page when navigation or a popup changes the test context. +5. Keep the generated `qa_report.md` as the primary deliverable. Update it only when needed to include the target URL, total inventory, safe controls tested, skipped controls awaiting approval, and exact no-op findings. +6. If execution fails, report the command, failure reason, and coverage gap instead of fabricating results. + +## Required report format +Use Markdown with these sections: +- `# Webcmd QA Report` +- `## Scope` with target URL, timestamp if available, page count, and whether the run was headed or headless +- `## Summary` with counts for visible buttons, visible links, safe controls tested, no-op controls, skipped controls, and controls that produced an observable effect +- `## No-op controls` listing each label, element type, and why it qualifies as a no-op +- `## Skipped: approval required` listing each dangerous or consequential control and the reason it was not clicked +- `## Observable interactions` summarizing non-no-op navigation, DOM, network, dialog, and popup results +- `## Other findings` for load failures, accessibility issues, broken images, console errors, security-header gaps, or responsive issues +- `## Coverage and limitations` documenting caps, hidden controls, authentication barriers, and any failed checks + +Be precise about what was observed. A report with incomplete coverage must say so plainly. diff --git a/qa_report.json b/qa_report.json new file mode 100644 index 000000000..eae68168e --- /dev/null +++ b/qa_report.json @@ -0,0 +1,405 @@ +{ + "base_url": "https://magical-bombolone-f9fbf8.netlify.app/#", + "pages": [ + { + "url": "https://magical-bombolone-f9fbf8.netlify.app/#", + "http_status": 200, + "security_headers": { + "content-security-policy": "MISSING", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "x-frame-options": "MISSING", + "x-content-type-options": "MISSING" + }, + "broken_images": [], + "accessibility_issues": [ + { + "type": "unlabeled_input", + "name": "(unnamed)" + }, + { + "type": "unnamed_button", + "outerHTML": "