diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b62e4e8..4a48ca3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -453,7 +453,6 @@ jobs: path: | reports/a11y_report.html reports/accessibility.json - reports/accessibility_report.json reports/accessibility_login_report.json retention-days: 30 diff --git a/README.md b/README.md index 27967f5..514daa1 100644 --- a/README.md +++ b/README.md @@ -278,7 +278,6 @@ After each run, reports are written to `reports/`: | `reports/e2e_combined.json` | Merged shard JSON (CI test-summary job) | | `reports/e2e_summary.md` | Merged Markdown posted to GitHub Step Summary | | `reports/a11y_report.html` | Accessibility HTML report | -| `reports/accessibility_report.json` | Structured axe violations JSON | | `reports/accessibility_*_report.json` | Authenticated-route axe results | | `reports/performance_metrics.json` | Public-page timing metrics | | `reports/performance_metrics_auth.json` | Authenticated-route timing metrics | diff --git a/tests/accessibility/test_accessibility.py b/tests/accessibility/test_accessibility.py index 5e6b43d..9e3da95 100644 --- a/tests/accessibility/test_accessibility.py +++ b/tests/accessibility/test_accessibility.py @@ -2,11 +2,9 @@ Accessibility tests for the Parakh platform using axe-playwright-python. Targets WCAG 2.1 AA compliance. -Reports are saved to reports/accessibility_report.json. +The login page report is saved to reports/accessibility_login_report.json. """ -import json - import pytest from playwright.sync_api import Page @@ -48,27 +46,6 @@ def _critical_violations(axe_results: dict) -> list[dict]: class TestAxeScans: - def test_homepage_has_no_critical_axe_violations(self, page: Page): - """Homepage must pass axe WCAG 2.1 AA scan with no critical/serious issues.""" - _require_axe() - home = HomePage(page) - home.go_to_home() - - results = _run_axe(page) - critical = _critical_violations(results) - - # Save full report - report = build_axe_report(results.get("violations", []), page.url) - save_json_report(report, "accessibility_report.json") - - assert len(critical) == 0, ( - f"Found {len(critical)} critical/serious axe violations on homepage:\n" - + json.dumps( - [{"id": v["id"], "impact": v["impact"], "description": v["description"]} for v in critical], - indent=2, - ) - ) - def test_login_page_has_no_critical_axe_violations(self, page: Page): """Login page must pass axe WCAG 2.1 AA scan with no critical/serious issues. @@ -108,30 +85,6 @@ def test_login_page_has_no_critical_axe_violations(self, page: Page): class TestImagesAndLinks: - def test_images_have_alt_text(self, page: Page): - """Every element must have a non-empty alt attribute.""" - home = HomePage(page) - home.go_to_home() - - images = page.locator("img") - count = images.count() - if count == 0: - pytest.skip("No elements found on the page") - - missing_alt = [] - for i in range(count): - img = images.nth(i) - alt = img.get_attribute("alt") - src = img.get_attribute("src") or f"img[{i}]" - if alt is None: - missing_alt.append(f"Missing alt: {src}") - # Note: alt="" is acceptable for decorative images - - assert len(missing_alt) == 0, ( - f"{len(missing_alt)} image(s) missing alt attribute:\n" - + "\n".join(missing_alt) - ) - @pytest.mark.xfail(reason="App bug #9 — see docs/app_bugs.md", strict=False) def test_social_links_have_accessible_names(self, page: Page): """Footer icon-only links must have aria-label or visible text.""" @@ -214,58 +167,6 @@ def test_lang_attribute_set(self, page: Page): f" element must have a non-empty lang attribute, got: '{lang}'" ) - def test_buttons_have_accessible_names(self, page: Page): - """Every button must have either visible text or an aria-label.""" - home = HomePage(page) - home.go_to_home() - - buttons = page.locator("button") - count = buttons.count() - if count == 0: - pytest.skip("No