import { chromium } from "playwright"; import path from "path"; import { fileURLToPath } from "url"; const BASE = "http://127.0.0.1:8000"; const OUT = path.dirname(fileURLToPath(import.meta.url)); const pagesAfterLogin = [ { file: "dashboard.png", url: "/home" }, { file: "pos.png", url: "/pos/create" }, { file: "products.png", url: "/products" }, { file: "contacts.png", url: "/contacts?type=customer" }, { file: "purchases.png", url: "/purchases" }, { file: "reports.png", url: "/reports/stock-report", fallbacks: ["/reports", "/reports/stock-adjustment-report"] }, { file: "accounts.png", url: "/account/account" }, { file: "users.png", url: "/users" }, { file: "settings.png", url: "/business/settings" }, ]; const results = { success: [], failures: [] }; async function waitReady(page) { await page.waitForLoadState("domcontentloaded"); await page.waitForLoadState("networkidle", { timeout: 30000 }).catch(() => {}); await page.waitForTimeout(1500); } (async () => { const browser = await chromium.launch({ headless: true }); const page = await browser.newPage({ viewport: { width: 1440, height: 900 } }); try { await page.goto(`${BASE}/login`, { waitUntil: "domcontentloaded", timeout: 60000 }); await waitReady(page); await page.screenshot({ path: path.join(OUT, "login.png"), fullPage: true }); results.success.push("login.png"); await page.fill("#username", "admin"); await page.fill("#password", "123456"); const submit = page.locator("#login-form button[type=submit], #login-form input[type=submit]").first(); await submit.click(); await page.waitForURL((url) => !url.pathname.endsWith("/login"), { timeout: 60000 }).catch(() => {}); await waitReady(page); if (page.url().includes("/login")) { throw new Error("Login failed - still on login page"); } for (const item of pagesAfterLogin) { const { file, url, fallbacks = [] } = item; const urls = [url, ...fallbacks]; let captured = false; let lastErr = ""; for (const u of urls) { try { const resp = await page.goto(`${BASE}${u}`, { waitUntil: "domcontentloaded", timeout: 60000 }); await waitReady(page); if (page.url().includes("/login")) { lastErr = "Redirected to login"; continue; } if (resp && resp.status() >= 400) { lastErr = `HTTP ${resp.status()}`; continue; } await page.screenshot({ path: path.join(OUT, file), fullPage: true }); results.success.push(file); captured = true; break; } catch (e) { lastErr = e.message; } } if (!captured) results.failures.push({ file, error: lastErr || "Unknown error" }); } } catch (e) { results.failures.push({ file: "setup", error: e.message }); } finally { await browser.close(); } console.log(JSON.stringify(results, null, 2)); })();