智教助手平台:完整初始化
- 前端:Vue3 + TS + Element Plus,24 个页面路由(课件/组题/教案/动画/思维导图/作文批改/命题/课堂/资源/社区等) - 后端:FastAPI + SQLAlchemy + SQLite,17 个路由模块,AI 服务层含降级模板 - AI:glm-5.x 推理模型已禁用思维链,确保输出真实内容 - 修复:ai_service 两处请求体注入 enable_thinking/thinking disabled - 测试账号:13900999999 / test1234
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
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(`CONSOLE: ${msg.text()}`);
|
||||
});
|
||||
page.on("pageerror", err => errors.push(`PAGEERROR: ${err.message}`));
|
||||
|
||||
const BASE = "http://127.0.0.1:5175";
|
||||
|
||||
// Login first via API
|
||||
const loginResp = await page.request.post("http://127.0.0.1:8010/api/auth/login", {
|
||||
data: { phone: "13943441149", password: "Test1234" },
|
||||
headers: { "Content-Type": "application/json" },
|
||||
});
|
||||
const loginData = await loginResp.json();
|
||||
const token = loginData.access_token;
|
||||
|
||||
// Inject token into localStorage
|
||||
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);
|
||||
|
||||
const routes = [
|
||||
"/", "/courseware", "/courseware/create", "/animation", "/exercise",
|
||||
"/lesson-plan", "/exam", "/essay-grade", "/mindmap", "/materials",
|
||||
"/resources", "/community", "/classroom", "/assistant", "/profile",
|
||||
"/admin", "/search",
|
||||
];
|
||||
|
||||
for (const route of routes) {
|
||||
const routeErrors = [];
|
||||
page.removeAllListeners("console");
|
||||
page.removeAllListeners("pageerror");
|
||||
page.on("console", msg => { if (msg.type() === "error") routeErrors.push(msg.text()); });
|
||||
page.on("pageerror", err => routeErrors.push(err.message));
|
||||
|
||||
try {
|
||||
await page.goto(BASE + route, { waitUntil: "networkidle", timeout: 15000 });
|
||||
await page.waitForTimeout(1500);
|
||||
|
||||
// Check for empty/blank pages
|
||||
const bodyText = await page.evaluate(() => document.body.innerText.trim());
|
||||
const isEmpty = bodyText.length < 10;
|
||||
const hasRouterView = await page.evaluate(() => {
|
||||
const app = document.querySelector("#app");
|
||||
return app && app.children.length > 0;
|
||||
});
|
||||
|
||||
// Filter expected errors (401/403 for admin views)
|
||||
const realErrors = routeErrors.filter(e =>
|
||||
!e.includes("401") && !e.includes("403") &&
|
||||
!e.includes("Failed to fetch") &&
|
||||
!e.includes("NetworkError")
|
||||
);
|
||||
|
||||
const status = realErrors.length === 0 && !isEmpty && hasRouterView ? "OK" : "CHECK";
|
||||
const errSummary = realErrors.length > 0 ? ` ERR:[${realErrors.slice(0,2).join(" | ").substring(0,100)}]` : "";
|
||||
const emptyFlag = isEmpty ? " BLANK" : "";
|
||||
console.log(`${status} ${route.padEnd(20)} ${bodyText.length}chars${emptyFlag}${errSummary}`);
|
||||
} catch (e) {
|
||||
console.log(`FAIL ${route.padEnd(20)} ${e.message.substring(0, 80)}`);
|
||||
}
|
||||
}
|
||||
|
||||
await browser.close();
|
||||
})();
|
||||
Reference in New Issue
Block a user