All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m2s
- qa/function-audit: playwright 行为审计工具(audit.mjs/verify-modals.mjs/pages.json) + 18 页审计产出(*.audit.md/json、summary、运行日志) - qa/visual-parity: 调试/测量辅助脚本(_dbg*.mjs/_measure.mjs/_off.mjs) - core/还原度核对报告.md: 18 页 pixelmatch 核对结果(含 vite 代理陈旧坑记录) - core/还原与接口待办.md: 逐页还原度/真实数据/交互接入待办总表 - .claude/skills/pixel-perfect-react: 像素级还原 React 的 SKILL 文档 - frontend/public/_devlogin.html: 临时本地登录辅助页(可删) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
21 lines
1.2 KiB
JavaScript
21 lines
1.2 KiB
JavaScript
import { chromium } from "playwright";
|
|
const TOK = process.argv[2];
|
|
const b = await chromium.launch();
|
|
const ctx = await b.newContext({ viewport: { width: 1440, height: 900 } });
|
|
// check: does loading /exact/model-photo.html mutate the token?
|
|
const sp = await ctx.newPage();
|
|
await sp.goto("http://127.0.0.1:5173/", { waitUntil: "domcontentloaded" });
|
|
await sp.evaluate((t) => localStorage.setItem("airshelf_token", t), TOK);
|
|
const before = await sp.evaluate(() => localStorage.getItem("airshelf_token")?.length);
|
|
await sp.goto("http://127.0.0.1:5173/exact/model-photo.html", { waitUntil: "networkidle" });
|
|
await sp.waitForTimeout(1500);
|
|
const after = await sp.evaluate(() => localStorage.getItem("airshelf_token")?.length ?? "NULL");
|
|
console.log("token before source load:", before, "| after /exact/model-photo.html load:", after);
|
|
// compare with demo-a source
|
|
await sp.evaluate((t) => localStorage.setItem("airshelf_token", t), TOK);
|
|
await sp.goto("http://127.0.0.1:5173/exact/model-photo-demo-a.html", { waitUntil: "networkidle" });
|
|
await sp.waitForTimeout(1500);
|
|
const afterDemo = await sp.evaluate(() => localStorage.getItem("airshelf_token")?.length ?? "NULL");
|
|
console.log("after /exact/model-photo-demo-a.html load:", afterDemo);
|
|
await b.close();
|