- Add tests/scripts/lib/gitea-client.js: Gitea API client with auth, comments,
attachments, and Markdown report formatters for visual and console reports
- Add tests/scripts/lib/browser-launcher.js: shared Playwright launch config with
--dns-resolution-order=hostname-first, realistic UA, and navigateTo() helper
using waitUntil:'commit' + waitForLoadState('domcontentloaded')
- Add tests/scripts/e2e-booking-flow-v2.js: full E2E scenario for irina-vik.ru
(register → book service → login → personal cabinet) with Gitea reporting
- Update visual-test-pipeline.js: GITEA_ISSUE env var, Gitea comment+attachment
posting, browser-launcher integration, waitUntil:'commit' navigation
- Update console-error-monitor-standalone.js: same Gitea + DNS fixes
- Update capture-screenshots.js: browser-launcher integration, DNS fix
- Update docker-compose.web-testing.yml: NETWORK_MODE env var (bridge),
DNS_RESOLUTION_ORDER, GITEA_USER/PASSWORD env passthrough, e2e-booking service
- Update tests/package.json: pin playwright to exact 1.52.0 (matches Docker image)
- Update .gitignore: add tests/visual/e2e/ for E2E screenshots
- Update .kilo/agents/visual-tester.md: Docker networking note, Gitea scripts,
e2e-booking service, updated script table
- Update .kilo/commands/web-test.md: Docker Networking section, --issue flag,
Gitea Integration section, e2e-booking service
- Update .kilo/commands/e2e-test.md: complete rewrite — Docker-based Playwright,
no more MCP dependency, proper service table, Gitea integration docs
- Update .kilo/capability-index.yaml: add gitea_integration, e2e_booking_flow,
docker_networking capabilities to visual-tester; add routing entries
4.4 KiB
4.4 KiB
description
| description |
|---|
| Run E2E tests with browser automation in Docker using Playwright |
E2E Testing Workflow
End-to-end tests using Playwright in Docker containers. Supports form filling, navigation, screenshots, and visual regression.
Parameters
| Parameter | Required | Default | Description |
|---|---|---|---|
url |
Yes | — | Target URL |
test |
No | all |
Test scenario: smoke, login, register, booking, visual, all |
issue |
No | — | Gitea Issue number for results |
viewport |
No | desktop |
mobile, tablet, desktop |
Docker Infrastructure
All tests run inside Docker using mcr.microsoft.com/playwright:v1.52.0-noble.
Local app testing (bridge network)
docker compose -f docker/docker-compose.web-testing.yml run --rm \
-e TARGET_URL=http://host.docker.internal:3000 -e GITEA_ISSUE=42 visual-tester
External site testing (host network for DNS)
NETWORK_MODE=host DNS_RESOLUTION_ORDER=hostname-first \
docker compose -f docker/docker-compose.web-testing.yml run --rm \
-e TARGET_URL=https://example.com -e GITEA_ISSUE=42 e2e-booking
Available Services
| Service | Image | Purpose |
|---|---|---|
visual-tester |
playwright:v1.52.0-noble | Full pipeline: screenshots + elements + compare + errors |
screenshot-baseline |
playwright:v1.52.0-noble | Capture baselines |
screenshot-current |
playwright:v1.52.0-noble | Capture current screenshots |
visual-compare |
node:20-alpine | Pixelmatch comparison only |
console-monitor |
playwright:v1.52.0-noble | Console/network errors |
e2e-booking |
playwright:v1.52.0-noble | Full booking flow (irina-vik.ru) |
DNS Note
External sites require NETWORK_MODE=host because Chromium inside Docker
cannot resolve external DNS by default. The --dns-resolution-order=hostname-first
flag is added automatically via lib/browser-launcher.js.
Test Scripts
| Script | Description |
|---|---|
tests/scripts/visual-test-pipeline.js |
Capture + elements + compare + errors + Gitea |
tests/scripts/capture-screenshots.js |
baseline/current screenshot capture |
tests/scripts/compare-screenshots.js |
Pixelmatch PNG comparison |
tests/scripts/console-error-monitor-standalone.js |
Console/network errors + Gitea |
tests/scripts/e2e-booking-flow-v2.js |
Register → Book → Login → Cabinet |
tests/scripts/lib/browser-launcher.js |
Shared Playwright launch (DNS fix, UA) |
tests/scripts/lib/gitea-client.js |
Gitea API client (comments, attachments) |
Test Scenarios
Smoke Test
docker compose -f docker/docker-compose.web-testing.yml run --rm \
-e TARGET_URL=https://example.com -e PAGES=/ visual-tester
Login Flow
Invoke @visual-tester or @browser-automation with:
- URL of login page
- Test credentials (from env vars, never hardcoded)
- Expected redirect after login
Use Task tool with subagent_type: "visual-tester"
prompt: "Test login flow at {url} with credentials from env, post results to Gitea Issue #{issue}"
E2E Booking Flow
NETWORK_MODE=host GITEA_ISSUE=42 \
docker compose -f docker/docker-compose.web-testing.yml run --rm e2e-booking
Gitea Integration
When GITEA_ISSUE is set, test results are automatically posted:
- Comment body: Markdown summary table with metrics
- Attachments: Diff screenshots uploaded as issue assets
- Auth:
GITEA_TOKENenv var or Basic Auth viaGITEA_USER/GITEA_PASSWORD
Required env vars for Gitea
| Variable | Description |
|---|---|
GITEA_ISSUE |
Issue number to post results |
GITEA_TOKEN |
Pre-existing API token (preferred) |
GITEA_USER |
Username for Basic Auth (if no token) |
GITEA_PASSWORD |
Password for Basic Auth (if no token) |
Agent Flow
/e2e-test <url>
↓
@visual-tester — runs pipeline in Docker
↓
[issues found?]
↓ yes
@the-fixer — fixes bugs
↓
@visual-tester — re-runs to verify
Before Starting (MANDATORY)
- Check git history for similar E2E tests
- Verify target URL is accessible from Docker (
curlinside container) - Use
NETWORK_MODE=hostfor external sites - Create baseline screenshots if visual regression needed
Gitea Commenting (MANDATORY)
Post a comment after test completion with:
- Test name and URL
- Step results table
- Screenshot attachments
- Pass/fail status