10 changed files with 2739 additions and 5 deletions
@ -0,0 +1,99 @@ |
|||||
|
import { test, expect } from "@playwright/test"; |
||||
|
import { E2E_ADMIN, FIXED_CAPTCHA } from "../fixtures/test-users"; |
||||
|
|
||||
|
test("诊断: 发送消息流程", async ({ page }) => { |
||||
|
const consoleMessages: string[] = []; |
||||
|
const pageErrors: string[] = []; |
||||
|
const networkRequests: string[] = []; |
||||
|
|
||||
|
page.on("console", (msg) => { |
||||
|
consoleMessages.push(`[${msg.type()}] ${msg.text()}`); |
||||
|
}); |
||||
|
page.on("pageerror", (err) => { |
||||
|
pageErrors.push(err.message); |
||||
|
}); |
||||
|
page.on("request", (req) => { |
||||
|
if (req.url().includes("/api/")) { |
||||
|
networkRequests.push(`REQ ${req.method()} ${req.url()}`); |
||||
|
} |
||||
|
}); |
||||
|
page.on("response", (res) => { |
||||
|
if (res.url().includes("/api/agents") || res.url().includes("/api/llm")) { |
||||
|
networkRequests.push(`RES ${res.status()} ${res.url()}`); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
await page.goto("/auth/login"); |
||||
|
await page.fill("#login-username", E2E_ADMIN.username); |
||||
|
await page.fill("#login-password", E2E_ADMIN.password); |
||||
|
await page.fill("#login-captcha", FIXED_CAPTCHA); |
||||
|
await page.click('button[type="submit"]'); |
||||
|
await page.waitForURL("/chat/default", { timeout: 15000 }); |
||||
|
await expect(page.locator(".agent-textarea")).toBeVisible({ timeout: 10000 }); |
||||
|
await page.waitForTimeout(2000); |
||||
|
|
||||
|
const configRes = await page.evaluate(async () => { |
||||
|
const r = await fetch("/api/config/me"); |
||||
|
return { status: r.status, body: await r.json() }; |
||||
|
}); |
||||
|
console.log("=== /api/config/me ===", JSON.stringify(configRes)); |
||||
|
|
||||
|
const modelsRes = await page.evaluate(async () => { |
||||
|
const r = await fetch("/api/llm/models"); |
||||
|
return { status: r.status, body: await r.json() }; |
||||
|
}); |
||||
|
console.log("=== /api/llm/models ===", JSON.stringify(modelsRes)); |
||||
|
|
||||
|
const sessionsRes = await page.evaluate(async () => { |
||||
|
const r = await fetch("/api/agents/default/sessions"); |
||||
|
return { status: r.status, body: await r.json() }; |
||||
|
}); |
||||
|
console.log("=== /api/agents/default/sessions ===", JSON.stringify(sessionsRes)); |
||||
|
|
||||
|
const agentInfoRes = await page.evaluate(async () => { |
||||
|
const r = await fetch("/api/agents/default/info"); |
||||
|
return { status: r.status, body: await r.json() }; |
||||
|
}); |
||||
|
console.log("=== /api/agents/default/info ===", JSON.stringify(agentInfoRes)); |
||||
|
|
||||
|
const newChatBtn = page.locator(".new-chat-btn").first(); |
||||
|
if (await newChatBtn.isVisible()) { |
||||
|
await newChatBtn.click(); |
||||
|
await page.waitForTimeout(1000); |
||||
|
} |
||||
|
|
||||
|
console.log("=== Before send ==="); |
||||
|
console.log("Console messages:", consoleMessages.slice(-10)); |
||||
|
console.log("Page errors:", pageErrors); |
||||
|
console.log("Network requests:", networkRequests); |
||||
|
|
||||
|
const testMessage = "你好,这是一条测试消息"; |
||||
|
await page.fill(".agent-textarea", testMessage); |
||||
|
|
||||
|
const btnSend = page.locator(".btn-send"); |
||||
|
const isDisabled = await btnSend.isDisabled(); |
||||
|
console.log(`Send button disabled: ${isDisabled}`); |
||||
|
|
||||
|
await page.click(".btn-send"); |
||||
|
|
||||
|
await page.waitForTimeout(3000); |
||||
|
|
||||
|
console.log("=== After send (3s) ==="); |
||||
|
console.log("Console messages:", consoleMessages.slice(-20)); |
||||
|
console.log("Page errors:", pageErrors); |
||||
|
console.log("Network requests (last 10):", networkRequests.slice(-10)); |
||||
|
|
||||
|
const userMessages = await page.locator(".agent-message.is-user .user-bubble").count(); |
||||
|
const assistantMessages = await page.locator(".agent-message.is-assistant").count(); |
||||
|
const allMessages = await page.locator(".agent-message").count(); |
||||
|
console.log(`User messages: ${userMessages}, Assistant messages: ${assistantMessages}, All: ${allMessages}`); |
||||
|
|
||||
|
const textareaValue = await page.locator(".agent-textarea").inputValue(); |
||||
|
console.log(`Textarea value after send: "${textareaValue}"`); |
||||
|
|
||||
|
const toastText = await page.locator(".toast, [class*='toast'], [class*='Toast']").count(); |
||||
|
console.log(`Toast elements: ${toastText}`); |
||||
|
|
||||
|
const bodyText = await page.locator("body").innerText(); |
||||
|
console.log(`Body text (last 500 chars): ${bodyText.slice(-500)}`); |
||||
|
}); |
||||
Binary file not shown.
@ -0,0 +1 @@ |
|||||
|
ALTER TABLE `agent_sessions` ADD `system_prompt` text; |
||||
File diff suppressed because it is too large
Loading…
Reference in new issue