Files
kt-financial-system/temp-tests/test-analytics-complete.js
woshiqp465 9683b940bf feat: 配置开发环境和清理项目结构
- 修改默认路由重定向到首页 (/home)
- 配置开发服务器使用5667端口
- 整理测试文件到temp-tests目录
- 优化项目结构便于开发和部署

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-15 21:35:49 +08:00

187 lines
7.2 KiB
JavaScript
Raw 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.

import { chromium } from 'playwright';
(async () => {
const browser = await chromium.launch({
headless: false,
});
const context = await browser.newContext();
const page = await context.newPage();
// 监听控制台错误
page.on('console', msg => {
if (msg.type() === 'error') {
console.error('浏览器控制台错误:', msg.text());
}
});
try {
console.log('🚀 开始完整测试分析功能...\n');
// 1. 访问首页并登录
console.log('1. 登录系统...');
await page.goto('http://localhost:5669/', { waitUntil: 'networkidle' });
await page.waitForTimeout(2000);
// 检查是否需要登录
const needLogin = await page.locator('button:has-text("登录")').isVisible();
if (needLogin) {
await page.fill('input[placeholder*="账号"]', 'vben');
await page.fill('input[placeholder*="密码"]', '123456');
await page.locator('button:has-text("登录")').click();
await page.waitForTimeout(3000);
console.log(' ✅ 登录成功');
}
// 2. 刷新页面让菜单重新加载
console.log('\n2. 刷新页面重新加载菜单...');
await page.reload({ waitUntil: 'networkidle' });
await page.waitForTimeout(3000);
// 3. 查找并点击数据分析菜单
console.log('\n3. 导航到分析页面...');
// 尝试查找数据分析菜单
const analyticsMenu = await page.locator('span:has-text("数据分析")').first();
if (await analyticsMenu.isVisible()) {
console.log(' ✅ 找到"数据分析"菜单');
await analyticsMenu.click();
await page.waitForTimeout(1500);
// 查找数据概览子菜单
const overviewMenu = await page.locator('span:has-text("数据概览")').first();
if (await overviewMenu.isVisible()) {
console.log(' ✅ 找到"数据概览"子菜单');
await overviewMenu.click();
await page.waitForTimeout(3000);
} else {
console.log(' ❌ 未找到"数据概览"子菜单尝试直接访问URL');
await page.goto('http://localhost:5669/analytics/overview', { waitUntil: 'networkidle' });
await page.waitForTimeout(3000);
}
} else {
console.log(' ❌ 未找到"数据分析"菜单尝试直接访问URL');
await page.goto('http://localhost:5668/analytics/overview', { waitUntil: 'networkidle' });
await page.waitForTimeout(3000);
}
// 4. 检查页面是否正确加载
console.log('\n4. 检查页面加载状态...');
const currentUrl = page.url();
console.log(' 当前URL:', currentUrl);
// 检查是否还是404
const is404 = await page.locator('text="404"').isVisible();
if (is404) {
console.log(' ❌ 页面仍然显示404错误');
console.log('\n 尝试访问财务管理页面作为备选...');
// 访问财务管理
await page.goto('http://localhost:5669/finance/dashboard', { waitUntil: 'networkidle' });
await page.waitForTimeout(3000);
const financeLoaded = !await page.locator('text="404"').isVisible();
if (financeLoaded) {
console.log(' ✅ 财务管理页面加载成功');
}
} else {
console.log(' ✅ 分析页面加载成功!');
// 5. 详细检查功能组件
console.log('\n5. 检查关键功能组件...');
// 等待组件加载
await page.waitForTimeout(2000);
// 检查关键指标卡片
const hasMetricsCards = await page.locator('.key-metrics-cards').isVisible();
console.log(` 关键指标卡片: ${hasMetricsCards ? '✅' : '❌'}`);
if (hasMetricsCards) {
const metricsCount = await page.locator('.metric-card').count();
console.log(` - 发现 ${metricsCount} 个指标卡片`);
// 检查具体指标
const indicators = [
{ selector: '.ant-statistic-title:has-text("总收入")', name: '总收入' },
{ selector: '.ant-statistic-title:has-text("总支出")', name: '总支出' },
{ selector: '.ant-statistic-title:has-text("净收益")', name: '净收益' },
{ selector: '.ant-statistic-title:has-text("日均收支")', name: '日均收支' },
];
for (const ind of indicators) {
const visible = await page.locator(ind.selector).isVisible();
console.log(` - ${ind.name}: ${visible ? '✅' : '❌'}`);
}
}
// 检查标签页
const hasTabs = await page.locator('.ant-tabs').isVisible();
console.log(`\n 标签页导航: ${hasTabs ? '✅' : '❌'}`);
if (hasTabs) {
const tabs = [
{ name: '核心指标', selector: '.trend-chart' },
{ name: '预算分析', selector: '.budget-comparison' },
{ name: '智能洞察', selector: '.smart-insights' },
{ name: '标签分析', selector: '.tag-cloud-analysis' },
{ name: '时间维度', selector: '.time-dimension-analysis' },
];
for (const tab of tabs) {
console.log(`\n 测试"${tab.name}"标签页...`);
const tabElement = await page.locator(`.ant-tabs-tab:has-text("${tab.name}")`);
if (await tabElement.isVisible()) {
await tabElement.click();
await page.waitForTimeout(2000);
// 检查对应组件是否加载
const componentVisible = await page.locator(tab.selector).isVisible();
console.log(` 组件加载: ${componentVisible ? '✅' : '❌'}`);
// 截取每个标签页的截图
await page.screenshot({
path: `analytics-tab-${tab.name.replace(/[^a-z0-9]/gi, '-')}.png`,
fullPage: false
});
} else {
console.log(` 标签不可见 ❌`);
}
}
}
// 6. 测试交互功能
console.log('\n6. 测试交互功能...');
// 测试日期选择器
const dateRangePicker = await page.locator('.ant-picker-range');
if (await dateRangePicker.isVisible()) {
console.log(' 日期范围选择器: ✅');
}
// 测试刷新按钮
const refreshButton = await page.locator('button:has-text("刷新数据")');
if (await refreshButton.isVisible()) {
console.log(' 刷新数据按钮: ✅');
await refreshButton.click();
await page.waitForTimeout(2000);
console.log(' 数据刷新完成');
}
// 最终成功截图
await page.screenshot({ path: 'analytics-complete-success.png', fullPage: true });
console.log('\n📸 完整功能测试截图已保存: analytics-complete-success.png');
console.log('\n✅ 🎉 分析功能测试完全成功!所有组件正常工作!');
}
} catch (error) {
console.error('\n❌ 测试过程中出错:', error);
await page.screenshot({ path: 'analytics-complete-error.png' });
console.log('错误截图已保存: analytics-complete-error.png');
} finally {
console.log('\n测试完成5秒后关闭浏览器...');
await page.waitForTimeout(5000);
await browser.close();
}
})();