优化分批执行点击菜单

This commit is contained in:
dengqichen 2025-03-07 14:21:05 +08:00
parent 82fb7ebe96
commit c08b274fbd
3 changed files with 8 additions and 49 deletions

View File

@ -10,7 +10,7 @@ TEST_MAX_RETRY_DELAY=5000
# 超时配置 # 超时配置
MENU_TIME_OUT=30000 MENU_TIME_OUT=30000
EXPECT_TIMEOUT=30000 EXPECT_TIMEOUT=3600000
# 浏览器配置 # 浏览器配置
BROWSER_HEADLESS=false BROWSER_HEADLESS=false

View File

@ -102,58 +102,18 @@ class LongiMainPage extends BasePage {
} }
/** /**
* 检查菜单数据文件是否存在并加载数据 * 获取菜单项数据
*/ */
async checkAndLoadMenuItems() { async getMenuItems() {
try { try {
// 加载JSON文件 await this.expandSideMenu();
const menuItems = FileUtils.loadFromJsonFile(process.env.MENU_DATA_FILE_PATH); return await this.findMenuItems();
// 检查是否成功加载数据
if (menuItems && Array.isArray(menuItems) && menuItems.length > 0) {
console.log(`从文件 ${process.env.BASE_URL} 成功加载了 ${menuItems.length} 个菜单项`);
return menuItems;
} else {
await this.expandSideMenu();
return await this.findAndSaveMenuItems();
}
} catch (error) { } catch (error) {
// 文件操作错误需要被捕获并处理 console.error(`获取菜单项时出错: ${error}`);
console.error(`检查并加载菜单项时出错: ${error}`);
return null; return null;
} }
} }
/**
* 查找菜单项并保存到文件
*/
async findAndSaveMenuItems() {
// 查找菜单项
const menuItems = await this.findMenuItems();
// 如果没有找到菜单项,则返回空数组
if (!menuItems || menuItems.length === 0) {
console.warn('未找到任何菜单项,无法保存到文件');
return [];
}
try {
// 过滤掉不能序列化的element属性
const menuItemsForSave = menuItems.map(({element, ...rest}) => rest);
// 保存到文件
FileUtils.saveToJsonFile(menuItemsForSave, process.env.MENU_DATA_FILE_PATH);
console.log(`已找到并保存 ${menuItems.length} 个菜单项到文件: ${process.env.MENU_DATA_FILE_PATH}`);
return menuItems;
} catch (error) {
// 文件操作错误需要被捕获
console.error('保存菜单项到文件时出错:', error);
return menuItems; // 即使保存失败也返回找到的菜单项
}
}
/** /**
* 查找所有菜单项 * 查找所有菜单项
* @returns {Promise<Array>} 菜单项数组 * @returns {Promise<Array>} 菜单项数组
@ -194,7 +154,6 @@ class LongiMainPage extends BasePage {
// 检查是否有三级菜单指示器 // 检查是否有三级菜单指示器
const hasThirdLevelIndicator = await item.evaluate(el => { const hasThirdLevelIndicator = await item.evaluate(el => {
// 检查是否有特定的三级菜单指示器
return el.classList.contains('is-opened') || return el.classList.contains('is-opened') ||
el.querySelector('.third-level-menu') !== null || el.querySelector('.third-level-menu') !== null ||
el.querySelector('.el-menu--inline') !== null; el.querySelector('.el-menu--inline') !== null;

View File

@ -4,14 +4,14 @@ require('../../config/env');
const { test } = require('@playwright/test'); const { test } = require('@playwright/test');
const TestController = require('../../src/controllers/LongiTestController'); const TestController = require('../../src/controllers/LongiTestController');
test.describe('菜单可访问性测试', () => { test.describe('测试所有隆基需求计划是否可用', () => {
let controller; let controller;
test.beforeAll(async () => { test.beforeAll(async () => {
controller = new TestController(); controller = new TestController();
}); });
test('应该能成功收集所有菜单数据', async () => { test('获取最新菜单数据', async () => {
const menuData = await controller.collectMenuData(); const menuData = await controller.collectMenuData();
test.expect(menuData.length).toBeGreaterThan(0); test.expect(menuData.length).toBeGreaterThan(0);
console.log(`✓ 成功收集 ${menuData.length} 个菜单项`); console.log(`✓ 成功收集 ${menuData.length} 个菜单项`);