#!/usr/bin/env node /** * 快速测试修复后的功能 */ const { chromium } = require('playwright'); async function quickTest() { console.log('🔧 快速测试修复后的功能...\n'); let browser; let page; try { browser = await chromium.launch({ headless: false, slowMo: 1000 }); const context = await browser.newContext({ viewport: { width: 1400, height: 900 } }); page = await context.newPage(); // 监听API调用 page.on('request', request => { const url = request.url(); if (url.includes('/nameTemplate/')) { console.log(`🔗 ${request.method()} ${url}`); } }); page.on('response', response => { const url = response.url(); if (url.includes('/nameTemplate/')) { console.log(`📡 ${response.status()} ${url}`); } }); page.on('console', msg => { if (msg.type() === 'error') { console.log(`❌ 前端错误: ${msg.text()}`); } }); // 登录 console.log('🚀 登录系统...'); await page.goto('http://localhost:8891'); await page.waitForLoadState('networkidle'); await page.fill('input[type="text"]', 'admin'); await page.fill('input[type="password"]', '111111'); await page.click('button:has-text("登录")'); await page.waitForLoadState('networkidle'); console.log('✅ 登录成功\n'); // 访问统一管理页面 console.log('🎯 访问统一姓名管理页面...'); await page.goto('http://localhost:8891/#/nameManage/unified'); await page.waitForLoadState('networkidle'); await page.waitForTimeout(5000); console.log('✅ 页面加载完成\n'); // 测试1:检查页面元素 console.log('📊 测试1:检查页面基本元素...'); const pageElements = await page.evaluate(() => { return { hasStatusPanel: !!document.querySelector('.status-panel'), hasGeneratePanel: !!document.querySelector('.generate-panel'), hasGenerateButton: !!document.querySelector('button'), buttonTexts: Array.from(document.querySelectorAll('button')).map(b => b.textContent?.trim()), hasTable: !!document.querySelector('table'), headerCount: document.querySelectorAll('thead th').length }; }); console.log('✅ 页面元素检查:'); console.log(` - 状态面板: ${pageElements.hasStatusPanel}`); console.log(` - 生成面板: ${pageElements.hasGeneratePanel}`); console.log(` - 按钮: ${pageElements.buttonTexts.join(', ')}`); console.log(` - 数据表格: ${pageElements.hasTable} (${pageElements.headerCount}列)`); await page.screenshot({ path: 'quick_test_01_page_loaded.png', fullPage: true }); // 测试2:测试智能生成 console.log('\n🎲 测试2:测试智能生成功能...'); // 先设置参数 try { // 选择平台 const platformSelect = page.locator('.generate-panel .ivu-select').first(); await platformSelect.click(); await page.waitForTimeout(500); const telegramOption = page.locator('.ivu-select-dropdown li').filter({ hasText: 'Telegram' }).first(); if (await telegramOption.isVisible()) { await telegramOption.click(); console.log('🔧 选择平台: Telegram'); } await page.waitForTimeout(1000); // 点击生成按钮 const generateButton = page.locator('button').filter({ hasText: '生成姓名' }); if (await generateButton.isVisible()) { await generateButton.click(); console.log('🎯 点击生成姓名按钮'); await page.waitForTimeout(3000); // 检查是否有生成结果 const hasResults = await page.evaluate(() => { return document.querySelectorAll('.name-result-item').length > 0; }); console.log(`${hasResults ? '✅' : '⚠️'} 生成结果: ${hasResults ? '有结果' : '无结果'}`); } } catch (error) { console.log(`⚠️ 生成测试遇到错误: ${error.message}`); } await page.screenshot({ path: 'quick_test_02_generate_test.png', fullPage: true }); // 测试3:测试添加功能 console.log('\n➕ 测试3:测试添加姓名模板...'); try { const addButton = page.locator('button').filter({ hasText: '添加姓名模板' }); if (await addButton.isVisible()) { await addButton.click(); console.log('🖱️ 点击添加按钮'); await page.waitForTimeout(2000); const hasModal = await page.evaluate(() => { return !!document.querySelector('.ivu-modal'); }); console.log(`${hasModal ? '✅' : '❌'} 添加弹窗: ${hasModal ? '已打开' : '未打开'}`); if (hasModal) { // 填写一些测试数据 const lastNameInput = page.locator('.ivu-modal input').first(); await lastNameInput.fill('测试'); console.log('✏️ 填写测试数据'); await page.waitForTimeout(1000); // 取消而不提交 const cancelButton = page.locator('.ivu-modal button').filter({ hasText: '取消' }); if (await cancelButton.isVisible()) { await cancelButton.click(); console.log('❌ 取消添加'); } } } } catch (error) { console.log(`⚠️ 添加测试遇到错误: ${error.message}`); } await page.screenshot({ path: 'quick_test_03_add_test.png', fullPage: true }); // 测试4:API直接测试 console.log('\n🌐 测试4:API端点直接测试...'); const apiTests = [ { name: 'supportedOptions', url: 'http://localhost:3000/nameTemplate/supportedOptions' }, { name: 'generatorStatus', url: 'http://localhost:3000/nameTemplate/generatorStatus' } ]; for (const test of apiTests) { try { const response = await fetch(test.url); console.log(`${response.ok ? '✅' : '❌'} ${test.name}: ${response.status}`); if (response.ok) { const data = await response.json(); if (test.name === 'supportedOptions') { console.log(` - 平台数量: ${data.data?.platforms?.length || 0}`); console.log(` - 文化数量: ${data.data?.cultures?.length || 0}`); } } } catch (error) { console.log(`❌ ${test.name}: ${error.message}`); } } // 测试生成API try { const generateResponse = await fetch('http://localhost:3000/nameTemplate/generate', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ platform: 'telegram', culture: 'cn', gender: 'neutral', batch: true, count: 3 }) }); console.log(`${generateResponse.ok ? '✅' : '❌'} generate API: ${generateResponse.status}`); if (generateResponse.ok) { const data = await generateResponse.json(); console.log(` - 生成成功: ${data.success}`); console.log(` - 结果数量: ${Array.isArray(data.data) ? data.data.length : 1}`); } } catch (error) { console.log(`❌ generate API: ${error.message}`); } console.log('\n🎉 快速测试完成!'); console.log('\n📂 测试截图:'); console.log(' - quick_test_01_page_loaded.png'); console.log(' - quick_test_02_generate_test.png'); console.log(' - quick_test_03_add_test.png'); console.log('\n⏰ 浏览器将保持打开10秒...'); await page.waitForTimeout(10000); } catch (error) { console.error('❌ 测试失败:', error.message); if (page) { await page.screenshot({ path: 'quick_test_error.png', fullPage: true }); } } finally { if (browser) { await browser.close(); } console.log('🏁 测试结束'); } } if (require.main === module) { quickTest().catch(console.error); } module.exports = quickTest;