// 真实浏览器测试 - 不跳过任何步骤 const { chromium } = require('playwright'); const fs = require('fs'); const out = (m) => fs.appendFileSync('real-test.log', m + '\n'); (async () => { fs.writeFileSync('real-test.log', ''); out('真实浏览器测试开始\n'); // 完全真实的 Chromium(不用 fake audio) const browser = await chromium.launch({ headless: false, // 可见模式,让用户能看到 }); const page = await browser.newPage({ viewport: { width: 800, height: 1200 } }); page.on('console', msg => { if (!msg.text().includes('KeyVault') && !msg.text().includes('favicon')) { out(`[CONSOLE ${msg.type()}] ${msg.text()}`); } }); page.on('pageerror', err => out(`[PAGE ERROR] ${err.message}`)); page.on('requestfailed', req => out(`[REQUEST FAILED] ${req.url()} - ${req.failure().errorText}`)); await page.goto('http://localhost:3000/test/'); await page.waitForTimeout(3000); out('页面加载\n'); // 不录音,模拟用户的"手动输入文字 + 点完整流程" out('\n【测试】手动输入文字 + 点完整流程\n'); await page.evaluate(() => { document.getElementById('at').textContent = '你好'; document.getElementById('at').classList.remove('e'); }); out('✅ 文字已填入 ASR 框'); await page.click('#bf'); out('✅ 已点击完整流程按钮'); await page.waitForTimeout(5000); const logContent = await page.locator('#log').textContent(); out(`\n📋 页面日志:\n${logContent}`); const ltContent = await page.locator('#lt').textContent(); out(`\n🤖 LLM 框: "${ltContent.substring(0, 200)}"`); await page.waitForTimeout(15000); const finalLog = await page.locator('#log').textContent(); out(`\n📋 最终日志:\n${finalLog}`); await page.screenshot({ path: 'real-test-result.png', fullPage: true }); out('\n📸 截图保存'); await browser.close(); out('\n✅ 测试结束'); })().catch(err => { out('❌ 错误: ' + err.message); });