SPB Git

spb/autoscholar

Public
2.1 KB · 58 lines javascript
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
Files · main
Menu

Theme