83 lines
2.9 KiB
JavaScript
83 lines
2.9 KiB
JavaScript
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));
|
|
})();
|