Files
telegram-management-system/backend/playwright_name_test.js
你的用户名 237c7802e5
Some checks failed
Deploy / deploy (push) Has been cancelled
Initial commit: Telegram Management System
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>
2025-11-04 15:37:50 +08:00

249 lines
12 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env node
/**
* Playwright 姓名管理专项测试 - 重点检查姓名管理功能
*/
const { chromium } = require('playwright');
async function runNameManagementTest() {
console.log('🎭 启动姓名管理专项测试...\n');
let browser;
let page;
try {
// 启动浏览器
browser = await chromium.launch({
headless: false, // 设置为false以便观察
slowMo: 1000 // 减慢操作速度以便观察
});
const context = await browser.newContext({
viewport: { width: 1280, height: 800 }
});
page = await context.newPage();
// 设置请求监听捕获API调用
page.on('request', request => {
const url = request.url();
if (url.includes('/nameTemplate/') || url.includes('/firstname/') || url.includes('/lastname/')) {
console.log(`📤 姓名API请求: ${request.method()} ${url}`);
}
});
page.on('response', response => {
const url = response.url();
if (url.includes('/nameTemplate/') || url.includes('/firstname/') || url.includes('/lastname/')) {
console.log(`📥 姓名API响应: ${response.status()} ${url}`);
}
});
// 访问前端登录页面
console.log('🌐 正在访问前端登录页面...');
await page.goto('http://localhost:8891', {
waitUntil: 'networkidle',
timeout: 15000
});
console.log('✅ 前端页面加载成功');
// 等待页面稳定
await page.waitForTimeout(3000);
// 查找登录表单
console.log('🔍 查找登录表单...');
const hasLoginForm = await page.$('form') !== null;
const hasUsernameInput = await page.$('input[type="text"], input[placeholder*="用户"], input[placeholder*="账号"]') !== null;
const hasPasswordInput = await page.$('input[type="password"], input[placeholder*="密码"]') !== null;
console.log(`📝 登录表单检查:`);
console.log(` - 包含表单: ${hasLoginForm}`);
console.log(` - 包含用户名输入: ${hasUsernameInput}`);
console.log(` - 包含密码输入: ${hasPasswordInput}`);
if (hasUsernameInput && hasPasswordInput) {
try {
console.log('🔐 尝试登录...');
// 填写登录信息使用系统默认admin账户
const usernameInput = await page.$('input[type="text"], input[placeholder*="用户"], input[placeholder*="账号"]');
const passwordInput = await page.$('input[type="password"], input[placeholder*="密码"]');
if (usernameInput && passwordInput) {
await usernameInput.fill('admin');
await passwordInput.fill('111111'); // 根据CLAUDE.md中的系统账号信息
// 查找并点击登录按钮
const loginButton = await page.$('button[type="submit"], button:has-text("登录"), .login-btn, [class*="login"]');
if (loginButton) {
await loginButton.click();
console.log('✅ 点击登录按钮');
// 等待登录完成
await page.waitForTimeout(5000);
// 检查是否登录成功通过URL变化或页面内容变化
const currentUrl = page.url();
const isLoggedIn = !currentUrl.includes('login') && !currentUrl.includes('Login');
if (isLoggedIn) {
console.log('✅ 登录成功!');
console.log(`📍 当前页面: ${currentUrl}`);
// 截取登录后的页面
await page.screenshot({
path: 'after_login.png',
fullPage: true
});
console.log('📸 登录后页面截图已保存: after_login.png');
// 查找姓名管理相关的菜单项
console.log('\n🔍 查找姓名管理菜单...');
// 等待菜单加载
await page.waitForTimeout(3000);
// 查找包含"姓名"、"名字"、"firstname"、"lastname"的菜单项
const menuSelectors = [
'text=姓名管理',
'text=名字管理',
'text=姓名',
'text=名字',
'[href*="firstname"]',
'[href*="lastname"]',
'[href*="name"]'
];
let menuFound = false;
for (const selector of menuSelectors) {
try {
const menuItem = await page.$(selector);
if (menuItem) {
console.log(`✅ 找到姓名相关菜单: ${selector}`);
// 点击菜单项
await menuItem.click();
console.log('🖱️ 点击姓名管理菜单');
// 等待页面加载
await page.waitForTimeout(5000);
// 检查页面内容
const namePageUrl = page.url();
console.log(`📍 姓名管理页面: ${namePageUrl}`);
// 截取姓名管理页面
await page.screenshot({
path: 'name_management_page.png',
fullPage: true
});
console.log('📸 姓名管理页面截图已保存: name_management_page.png');
// 检查页面数据
const hasTable = await page.$('table') !== null;
const hasAddButton = await page.$('button:has-text("添加"), .add-btn, [class*="add"]') !== null;
const hasSearchInput = await page.$('input[type="text"], input[placeholder*="搜索"], input[placeholder*="姓"]') !== null;
console.log(`📊 姓名管理页面内容:`);
console.log(` - 包含表格: ${hasTable}`);
console.log(` - 包含添加按钮: ${hasAddButton}`);
console.log(` - 包含搜索框: ${hasSearchInput}`);
// 尝试测试添加功能
if (hasAddButton) {
console.log('\n🧪 测试添加姓名功能...');
const addButton = await page.$('button:has-text("添加"), .add-btn, [class*="add"]');
await addButton.click();
// 等待弹窗或新页面
await page.waitForTimeout(2000);
// 检查是否有弹窗或表单
const hasModal = await page.$('.modal, .dialog, .popup') !== null;
const hasForm = await page.$('form') !== null;
console.log(` - 弹出添加窗口: ${hasModal || hasForm}`);
if (hasModal || hasForm) {
// 截取添加窗口
await page.screenshot({
path: 'add_name_modal.png',
fullPage: true
});
console.log('📸 添加姓名窗口截图已保存: add_name_modal.png');
}
}
menuFound = true;
break;
}
} catch (error) {
// 继续尝试下一个选择器
}
}
if (!menuFound) {
console.log('❌ 未找到姓名管理菜单项');
// 尝试查找所有菜单项
console.log('🔍 查找所有可用菜单项...');
const allMenus = await page.$$eval('a, .menu-item, [class*="menu"], li', elements => {
return elements
.filter(el => el.textContent && el.textContent.trim().length > 0)
.map(el => ({
text: el.textContent?.trim(),
href: el.href || null,
className: el.className
}))
.slice(0, 20); // 限制结果数量
});
console.log('📋 可用菜单项:');
allMenus.forEach((menu, index) => {
console.log(` ${index + 1}. "${menu.text}" (href: ${menu.href})`);
});
}
} else {
console.log('❌ 登录可能失败,检查页面状态...');
const pageContent = await page.$eval('body', el => el.textContent?.substring(0, 200));
console.log(`📄 页面内容: ${pageContent}...`);
}
} else {
console.log('❌ 未找到登录按钮');
}
} else {
console.log('❌ 未找到用户名或密码输入框');
}
} catch (loginError) {
console.log(`❌ 登录过程失败: ${loginError.message}`);
}
} else {
console.log('❌ 未找到完整的登录表单');
}
// 等待观察
await page.waitForTimeout(3000);
} catch (error) {
console.error('❌ 测试失败:', error.message);
} finally {
if (browser) {
await browser.close();
}
console.log('\n🎭 姓名管理测试完成');
}
}
// 运行测试
if (require.main === module) {
runNameManagementTest()
.catch(error => {
console.error('❌ 测试运行失败:', error.message);
process.exit(1);
});
}
module.exports = runNameManagementTest;