75 lines
2.4 KiB
JavaScript
75 lines
2.4 KiB
JavaScript
// 无头验收脚本:控制台零报错 + 标题→Day1 流程 + Debug 面板侵蚀矩阵 + 四结局
|
|
// 运行:node tools/e2e.mjs [--full]
|
|
import { chromium } from "playwright";
|
|
import { createServer } from "vite";
|
|
import { mkdirSync } from "fs";
|
|
|
|
const SHOT_DIR = process.env.SHOT_DIR || "/tmp/mtc-shots";
|
|
mkdirSync(SHOT_DIR, { recursive: true });
|
|
|
|
const server = await createServer({ server: { port: 5199 } });
|
|
await server.listen();
|
|
|
|
const browser = await chromium.launch();
|
|
const page = await browser.newPage({ viewport: { width: 1280, height: 720 } });
|
|
const errors = [];
|
|
page.on("console", (msg) => { if (msg.type() === "error") errors.push(msg.text()); });
|
|
page.on("pageerror", (err) => errors.push("PAGEERROR: " + err.message));
|
|
|
|
const shot = (name) => page.screenshot({ path: `${SHOT_DIR}/${name}.png` });
|
|
const sleep = (ms) => page.waitForTimeout(ms);
|
|
|
|
await page.goto("http://localhost:5199/");
|
|
await sleep(2500);
|
|
await shot("01_title");
|
|
|
|
// 输入名字并开始
|
|
await page.fill("#name-input", "测试员");
|
|
await page.press("#name-input", "Enter");
|
|
await sleep(2000);
|
|
await shot("02_day1_house");
|
|
|
|
// 走出小屋:向下走
|
|
await page.keyboard.down("s"); await sleep(1400); await page.keyboard.up("s");
|
|
await sleep(1200);
|
|
await shot("03_plaza");
|
|
|
|
// Debug 面板:侵蚀矩阵五档
|
|
await page.keyboard.press("`");
|
|
await sleep(300);
|
|
await shot("04_debug_open");
|
|
for (const h of [10, 40, 70, 90, 100]) {
|
|
await page.fill("#dbg-h", String(h));
|
|
await page.click("#dbg-h-set");
|
|
await sleep(700);
|
|
await shot(`05_stage_h${h}`);
|
|
}
|
|
// 传送遍历全部场景
|
|
for (const s of ["bakery", "store", "clinic", "lake", "field", "well", "fogwall", "white_corridor", "white_ward", "plaza", "house"]) {
|
|
await page.click(`[data-tp="${s}"]`);
|
|
await sleep(900);
|
|
await shot(`06_scene_${s}`);
|
|
}
|
|
// 四结局强制触发
|
|
for (const e of ["E1", "E4", "E2", "E3"]) {
|
|
await page.click(`[data-end="${e}"]`);
|
|
await sleep(e === "E3" ? 14000 : 6000);
|
|
await shot(`07_ending_${e}`);
|
|
// 回到游戏继续测试(reload 后需重进)
|
|
if (e !== "E3") {
|
|
await page.reload();
|
|
await sleep(2200);
|
|
await page.fill("#name-input", "测试员");
|
|
await page.press("#name-input", "Enter");
|
|
await sleep(1800);
|
|
await page.keyboard.press("`");
|
|
await sleep(300);
|
|
}
|
|
}
|
|
|
|
console.log("CONSOLE ERRORS:", errors.length);
|
|
errors.slice(0, 20).forEach(e => console.log(" -", e));
|
|
await browser.close();
|
|
await server.close();
|
|
process.exit(errors.length ? 1 : 0);
|