const { chromium } = require("playwright-core"); (async () => { const browser = await chromium.launch({ executablePath: "C:/Program Files/Google/Chrome/Application/chrome.exe", args: ["--disable-blink-features=AutomationControlled"], }); const page = await browser.newPage({ viewport: { width: 1440, height: 900 } }); const errors = []; page.on("console", msg => { if (msg.type() === "error") errors.push(msg.text()); }); page.on("pageerror", err => errors.push(err.message)); const BASE = "http://127.0.0.1:5175"; const loginResp = await page.request.post("http://127.0.0.1:8010/api/auth/login", { data: { phone: "13943441149", password: "Test1234" }, }); const token = (await loginResp.json()).access_token; await page.goto(BASE + "/login", { waitUntil: "networkidle" }); await page.evaluate(t => { localStorage.setItem("token", t); localStorage.setItem("access_token", t); localStorage.setItem("zj_token", t); }, token); // === TEST 1: Animation template gallery === console.log("=== ANIMATION TEMPLATES ==="); await page.goto(BASE + "/animation", { waitUntil: "networkidle" }); await page.waitForTimeout(2000); const tplButtons = await page.$$(".tpl-btn"); console.log("template buttons found:", tplButtons.length); // Click first template if (tplButtons.length > 0) { await tplButtons[0].click(); await page.waitForTimeout(2000); const previewIframe = await page.$(".tg-preview-wrap iframe, .preview-wrap iframe, iframe"); if (previewIframe) { console.log("preview iframe: FOUND"); } else { console.log("preview iframe: NOT FOUND"); const allIframes = await page.$$("iframe"); console.log("total iframes:", allIframes.length); } const cards = await page.$$(".tg-card, .result-card"); console.log("result cards:", cards.length); } // === TEST 2: Exercise template gallery === console.log("\n=== EXERCISE TEMPLATES ==="); await page.goto(BASE + "/exercise", { waitUntil: "networkidle" }); await page.waitForTimeout(2000); const exTplBtns = await page.$$(".tpl-btn"); console.log("exercise template buttons:", exTplBtns.length); // === TEST 3: Courseware create page === console.log("\n=== COURSEWARE CREATE ==="); await page.goto(BASE + "/courseware/create", { waitUntil: "networkidle" }); await page.waitForTimeout(1500); const textareas = await page.$$("textarea, input[type=text], .el-input__inner"); console.log("input fields:", textareas.length); const genButtons = await page.$$("button:has-text('生成'), button:has-text('创建'), .gen-btn"); console.log("generate buttons:", genButtons.length); // === TEST 4: Classroom === console.log("\n=== CLASSROOM ==="); await page.goto(BASE + "/classroom", { waitUntil: "networkidle" }); await page.waitForTimeout(1500); const classroomText = await page.evaluate(() => document.body.innerText.substring(0, 500)); console.log("classroom has content:", classroomText.length > 50); const realErrors = errors.filter(e => !e.includes("401") && !e.includes("403") && !e.includes("Failed to fetch")); console.log("\n=== TOTAL ERRORS (filtered):", realErrors.length, "==="); realErrors.slice(0, 5).forEach(e => console.log(" ", e.substring(0, 120))); await browser.close(); })();