chore: sync local latest state and repository cleanup
This commit is contained in:
@@ -3,29 +3,64 @@ import { test, expect } from '@playwright/test';
|
||||
/**
|
||||
* 🖱️ 蚊子项目H5前端 - 用户操作测试
|
||||
* 模拟真实用户在H5界面的查看和操作
|
||||
*
|
||||
* 注意:H5_BASE_URL必须通过环境变量配置,默认值仅供参考
|
||||
* 使用方式: H5_BASE_URL=http://localhost:5173 npx playwright test
|
||||
*
|
||||
* 注意:H5与Admin共享同一前端服务(5173),H5路由(/share等)由Admin前端提供
|
||||
*/
|
||||
|
||||
test.describe('👤 用户H5前端操作测试', () => {
|
||||
|
||||
const FRONTEND_URL = 'http://localhost:5175';
|
||||
const API_BASE_URL = 'http://localhost:8080';
|
||||
|
||||
|
||||
const FRONTEND_URL = process.env.H5_BASE_URL || 'http://localhost:5173';
|
||||
const API_BASE_URL = process.env.API_BASE_URL || 'http://localhost:8080';
|
||||
|
||||
/**
|
||||
* 验证当前页面是否为H5应用(而非管理后台)
|
||||
* 通过检查页面特征来识别
|
||||
*/
|
||||
const verifyH5Page = async (page: any, expectedPath?: string) => {
|
||||
const currentUrl = page.url();
|
||||
|
||||
// 如果指定了期望路径,验证路径
|
||||
if (expectedPath && !currentUrl.includes(expectedPath)) {
|
||||
throw new Error(`页面路径不正确: ${currentUrl},期望包含: ${expectedPath}`);
|
||||
}
|
||||
|
||||
// H5页面特征:路径是 / 或 /share 或 /rank 或 /profile
|
||||
const isH5Path = currentUrl === '/' ||
|
||||
currentUrl.includes('/share') ||
|
||||
currentUrl.includes('/rank') ||
|
||||
currentUrl.includes('/profile');
|
||||
|
||||
// 如果不是H5路径,抛出错误
|
||||
if (!isH5Path && !currentUrl.includes('localhost')) {
|
||||
throw new Error(`E2E目标偏离:当前页面 ${currentUrl} 不是H5应用,可能跑到了管理前端或其他应用`);
|
||||
}
|
||||
|
||||
console.log(` ✅ H5页面验证通过: ${currentUrl}`);
|
||||
return true;
|
||||
};
|
||||
|
||||
test('📱 查看首页和底部导航', async ({ page }) => {
|
||||
await test.step('访问H5首页', async () => {
|
||||
// 访问首页
|
||||
const response = await page.goto(FRONTEND_URL);
|
||||
|
||||
|
||||
// 验证页面可访问
|
||||
expect(response).not.toBeNull();
|
||||
console.log(' ✅ 首页响应状态:', response?.status());
|
||||
|
||||
|
||||
// 等待页面加载完成
|
||||
await page.waitForLoadState('networkidle');
|
||||
|
||||
|
||||
// 验证是H5页面而非管理后台
|
||||
await verifyH5Page(page, '/');
|
||||
|
||||
// 截图记录首页
|
||||
await page.screenshot({
|
||||
await page.screenshot({
|
||||
path: 'test-results/h5-user-homepage.png',
|
||||
fullPage: true
|
||||
fullPage: true
|
||||
});
|
||||
console.log(' 📸 首页截图已保存');
|
||||
});
|
||||
@@ -59,7 +94,10 @@ test.describe('👤 用户H5前端操作测试', () => {
|
||||
await test.step('点击推广页面', async () => {
|
||||
await page.goto(FRONTEND_URL);
|
||||
await page.waitForLoadState('networkidle');
|
||||
|
||||
|
||||
// 验证是H5页面
|
||||
await verifyH5Page(page);
|
||||
|
||||
// 查找并点击推广链接
|
||||
const shareLink = page.locator('text=推广').first();
|
||||
|
||||
@@ -146,7 +184,10 @@ test.describe('👤 用户H5前端操作测试', () => {
|
||||
|
||||
await page.goto(FRONTEND_URL);
|
||||
await page.waitForLoadState('networkidle');
|
||||
|
||||
|
||||
// 验证是H5页面
|
||||
await verifyH5Page(page);
|
||||
|
||||
// 截图记录不同设备效果
|
||||
await page.screenshot({
|
||||
path: `test-results/h5-responsive-${viewport.name}.png`,
|
||||
@@ -167,7 +208,10 @@ test.describe('👤 用户H5前端操作测试', () => {
|
||||
await test.step('检查页面元素', async () => {
|
||||
await page.goto(FRONTEND_URL);
|
||||
await page.waitForLoadState('networkidle');
|
||||
|
||||
|
||||
// 验证是H5页面
|
||||
await verifyH5Page(page);
|
||||
|
||||
// 统计页面元素
|
||||
const buttons = page.locator('button');
|
||||
const links = page.locator('a');
|
||||
@@ -204,10 +248,13 @@ test.describe('👤 用户H5前端操作测试', () => {
|
||||
test('⏱️ 页面性能测试', async ({ page }) => {
|
||||
await test.step('测量页面加载性能', async () => {
|
||||
const startTime = Date.now();
|
||||
|
||||
|
||||
await page.goto(FRONTEND_URL);
|
||||
await page.waitForLoadState('networkidle');
|
||||
|
||||
|
||||
// 验证是H5页面
|
||||
await verifyH5Page(page);
|
||||
|
||||
const loadTime = Date.now() - startTime;
|
||||
console.log(` ⏱️ 页面加载时间: ${loadTime}ms`);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user