/** * 拍两张文档用的截图:登录页(两种账号名 + 密码)、账号页(邮箱)、系统设置页。 * 需要前端 5180、后端 8100 起着;账号用 dev 的平台管理员。 */ import { chromium } from "playwright-core"; import { mkdirSync, readFileSync } from "node:fs"; const WEB = process.env.WEB ?? "http://127.0.0.1:5180"; const API = process.env.API ?? "http://127.0.0.1:8100/api/v1"; const PHONE = process.env.PHONE ?? "13900000001"; const OUT = "e2e/artifacts"; const PWD_FILE = new URL("../../.local/e2e-account-password.txt", import.meta.url); function savedPassword() { try { return readFileSync(PWD_FILE, "utf8").trim(); } catch { return ""; } } const browser = await chromium.launch({ executablePath: process.env.CHROME ?? `${process.env.LOCALAPPDATA}/ms-playwright/chromium-1223/chrome-win64/chrome.exe`, }); const page = await browser.newPage({ viewport: { width: 1440, height: 960 } }); mkdirSync(OUT, { recursive: true }); await page.goto(`${WEB}/login`); await page.waitForSelector("#account"); await page.screenshot({ path: `${OUT}/login-password.png` }); const r = await fetch(`${API}/auth/login/password`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ phone: PHONE, password: savedPassword() }), }); const data = await r.json(); await page.addInitScript( ([a, rf]) => { localStorage.setItem("dadao.access", a); localStorage.setItem("dadao.refresh", rf); }, [data.data.tokens.access_token, data.data.tokens.refresh_token], ); await page.goto(`${WEB}/account`); await page.waitForSelector('input[aria-label="邮箱"]'); await page.waitForTimeout(600); await page.screenshot({ path: `${OUT}/account-page.png` }); await page.goto(`${WEB}/settings`); await page.waitForSelector('input[aria-label="服务器地址"]'); await page.waitForTimeout(800); await page.screenshot({ path: `${OUT}/settings-page.png` }); await browser.close(); console.log("screenshots written to", OUT);