Some checks failed
Deploy / deploy (push) Has been cancelled
Full-stack web application for Telegram management - Frontend: Vue 3 + Vben Admin - Backend: NestJS - Features: User management, group broadcast, statistics 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
235 lines
9.1 KiB
JavaScript
235 lines
9.1 KiB
JavaScript
#!/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; |