Introduce a reusable browser-test harness under tests/operator_gui/: - conftest.py: shared fixtures (operator_server, browser with graceful skip, operator_page with screenshot-on-failure artifacts) - pages/: OperatorWorkbench Page Object encapsulating selectors and actions - refactor test_browser_smoke.py onto the fixtures + POM (drops duplicated server/browser plumbing) - test_decision_flow.py: approve/hold/reject E2E against the real server, covering the reject-requires-memo guard and decision persistence Pin playwright in requirements-dev.txt (Chromium bundled offline for the air-gapped target) and ignore the artifacts/ screenshot dir.
10 lines
472 B
Text
10 lines
472 B
Text
# Development / test dependencies (Python 3.13). Includes runtime deps.
|
|
-r requirements.txt
|
|
pytest==8.4.2
|
|
pytest-cov==6.0.0
|
|
pytest-timeout==2.4.0
|
|
# Operator-GUI browser (E2E) tests. The Chromium binary is NOT pip-installed:
|
|
# on the build/staging host run `playwright install chromium`, then bundle the
|
|
# browser cache (PLAYWRIGHT_BROWSERS_PATH) into the offline artifact for the
|
|
# air-gapped target. Browser tests skip cleanly when Chromium is absent.
|
|
playwright==1.49.1
|