spb/autoscholar
Public
1// Usage: node tests/e2e/shots.mjs <before|after> [baseURL]23import { mkdirSync } from "node:fs";4import { chromium, devices } from "@playwright/test";56const phase = process.argv[2] ?? "after";7const base = process.argv[3] ?? "http://localhost:8471";8const out = `tests/e2e/screenshots/redesign/${phase}`;9mkdirSync(out, { recursive: true });10const widths = [375, 390, 430, 768, 1024, 1440];11const pages = [12 ["home", "/"],13 ["research", "/research"],14 ["methodology", "/methodology"],15 ["about", "/about"],16 ["paper", "/research/as-wp-2026-0000-staging-sample"],17 ["infrastructure", "/infrastructure"],18];19const browser = await chromium.launch();20const pw = process.env.ADMIN_PASSWORD;21for (const w of widths) {22 const mobile = w <= 430;23 const ctx = await browser.newContext({24 ...(mobile ? devices["iPhone 14"] : {}),25 viewport: { width: w, height: mobile ? 844 : 900 },26 deviceScaleFactor: 2,27 });28 const page = await ctx.newPage();29 for (const [name, path] of pages) {30 await page.goto(base + path, { waitUntil: "networkidle" });31 await page.screenshot({ path: `${out}/${name}-${w}.png`, fullPage: true });32 await page.screenshot({ path: `${out}/${name}-${w}-fold.png`, fullPage: false });33 const overflow = await page.evaluate(34 () => document.documentElement.scrollWidth - document.documentElement.clientWidth,35 );36 if (overflow > 0) console.log(`OVERFLOW ${name}@${w}: +${overflow}px`);37 }38 if (pw) {39 const r = await page.request.post(base + "/api/admin/auth/login", {40 data: { username: "admin", password: pw },41 });42 if (r.ok()) {43 for (const [name, path] of [44 ["admin-overview", "/admin"],45 ["admin-runs", "/admin/runs"],46 ["admin-new", "/admin/new"],47 ["admin-maclustr", "/admin/maclustr"],48 ]) {49 await page.goto(base + path, { waitUntil: "networkidle" });50 await page.screenshot({ path: `${out}/${name}-${w}.png`, fullPage: true });51 }52 } else console.log("admin login failed", r.status());53 }54 await ctx.close();55}56await browser.close();57console.log("done", phase);58