Files
gym-manage/docs/superpowers/plans/2026-04-15-user-role-menu-test-fix-plan.md

7.0 KiB
Raw Permalink Blame History

用户管理和角色管理测试修复实现计划

面向 AI 代理的工作者: 必需子技能:使用 superpowers:subagent-driven-development(推荐)或 superpowers:executing-plans 逐任务实现此计划。步骤使用复选框(- [ ])语法来跟踪进度。

目标: 修复用户管理和角色管理测试,使其能够正确展开系统管理菜单后再点击子菜单项,将测试通过率从80%提升到100%

架构: 采用与系统配置测试相同的策略:先展开父菜单,再点击子菜单项。修改测试脚本中的用户管理和角色管理测试代码,增加展开系统管理菜单的步骤。

技术栈: Playwright, JavaScript, Element Plus


文件结构

测试脚本文件

  • 修改: novalon-manage-web/user-journey-test.js
    • 职责: 修复用户管理和角色管理测试,增加展开菜单的步骤

任务 1:修改用户管理测试

文件:

  • 修改:novalon-manage-web/user-journey-test.js:140-180

  • 步骤 1:修改用户管理测试代码

将以下代码:

try {
  const userMenuSelectors = [
    'text=用户管理',
    'text=用户',
    '[data-menu="user"]',
    'a[href*="user"]'
  ];
  
  let navigated = false;
  for (const selector of userMenuSelectors) {
    const element = page.locator(selector).first();
    if (await element.count() > 0) {
      await element.click();
      navigated = true;
      break;
    }
  }
  
  if (navigated) {
    await page.waitForTimeout(1000);
    await captureStep(page, '04-user-management');
    logTest('导航到用户管理页面', true);
  } else {
    throw new Error('未找到用户管理菜单');
  }
} catch (error) {
  logTest('导航到用户管理页面', false, error.message);
}

替换为:

try {
  // 首先展开系统管理菜单(如果是折叠状态)
  const systemMenuSelector = '.el-sub-menu:has-text("系统管理")';
  const systemMenuElement = page.locator(systemMenuSelector).first();
  
  if (await systemMenuElement.count() > 0) {
    // 点击展开系统管理菜单
    await systemMenuElement.click();
    await page.waitForTimeout(500);
    
    // 然后点击用户管理菜单项
    const userMenuSelectors = [
      '.el-menu-item:has-text("用户管理")',
      'text=用户管理',
      'text=用户',
      '[data-menu="user"]',
      'a[href*="user"]'
    ];
    
    let navigated = false;
    for (const selector of userMenuSelectors) {
      const element = page.locator(selector).first();
      if (await element.count() > 0) {
        await element.click();
        navigated = true;
        break;
      }
    }
    
    if (navigated) {
      await page.waitForTimeout(1000);
      await captureStep(page, '04-user-management');
      logTest('导航到用户管理页面', true);
    } else {
      throw new Error('未找到用户管理菜单');
    }
  } else {
    throw new Error('未找到系统管理菜单');
  }
} catch (error) {
  logTest('导航到用户管理页面', false, error.message);
}
  • 步骤 2:验证修改

运行:cat novalon-manage-web/user-journey-test.js | grep -A 30 "阶段2: 用户管理测试" 预期:显示修改后的代码,包含展开系统管理菜单的逻辑


任务 2:修改角色管理测试

文件:

  • 修改:novalon-manage-web/user-journey-test.js:210-240

  • 步骤 1:修改角色管理测试代码

将以下代码:

try {
  const roleMenuSelectors = [
    'text=角色管理',
    'text=角色',
    '[data-menu="role"]',
    'a[href*="role"]'
  ];
  
  let navigated = false;
  for (const selector of roleMenuSelectors) {
    const element = page.locator(selector).first();
    if (await element.count() > 0) {
      await element.click();
      navigated = true;
      break;
    }
  }
  
  if (navigated) {
    await page.waitForTimeout(1000);
    await captureStep(page, '05-role-management');
    logTest('导航到角色管理页面', true);
  } else {
    throw new Error('未找到角色管理菜单');
  }
} catch (error) {
  logTest('导航到角色管理页面', false, error.message);
}

替换为:

try {
  // 首先展开系统管理菜单(如果是折叠状态)
  const systemMenuSelector = '.el-sub-menu:has-text("系统管理")';
  const systemMenuElement = page.locator(systemMenuSelector).first();
  
  if (await systemMenuElement.count() > 0) {
    // 点击展开系统管理菜单
    await systemMenuElement.click();
    await page.waitForTimeout(500);
    
    // 然后点击角色管理菜单项
    const roleMenuSelectors = [
      '.el-menu-item:has-text("角色管理")',
      'text=角色管理',
      'text=角色',
      '[data-menu="role"]',
      'a[href*="role"]'
    ];
    
    let navigated = false;
    for (const selector of roleMenuSelectors) {
      const element = page.locator(selector).first();
      if (await element.count() > 0) {
        await element.click();
        navigated = true;
        break;
      }
    }
    
    if (navigated) {
      await page.waitForTimeout(1000);
      await captureStep(page, '05-role-management');
      logTest('导航到角色管理页面', true);
    } else {
      throw new Error('未找到角色管理菜单');
    }
  } else {
    throw new Error('未找到系统管理菜单');
  }
} catch (error) {
  logTest('导航到角色管理页面', false, error.message);
}
  • 步骤 2:验证修改

运行:cat novalon-manage-web/user-journey-test.js | grep -A 30 "阶段3: 角色管理测试" 预期:显示修改后的代码,包含展开系统管理菜单的逻辑


任务 3:运行测试验证

文件:

  • 无文件修改

  • 步骤 1:运行User Journey测试

运行:cd novalon-manage-web && node user-journey-test.js 预期:

  • 总测试数: 10

  • 通过: 10

  • 失败: 0

  • 通过率: 100%

  • 步骤 2:检查测试报告

运行:cat /tmp/user-journey-report.json 预期:JSON格式的测试报告,所有测试状态为"passed"


任务 4:提交代码

文件:

  • 无文件修改

  • 步骤 1:查看修改

运行:git diff novalon-manage-web/user-journey-test.js 预期:显示用户管理和角色管理测试的修改内容

  • 步骤 2:提交修改
git add novalon-manage-web/user-journey-test.js
git commit -m "test: 修复用户管理和角色管理测试

- 增加展开系统管理菜单的步骤
- 修复菜单元素不可见导致的测试失败
- 测试通过率从80%提升到100%"

预期:提交成功,显示commit hash

  • 步骤 3:验证提交

运行:git log --oneline -1 预期:显示最新的commit信息


验收标准

功能验收

  • 用户管理测试能够成功导航到用户管理页面
  • 角色管理测试能够成功导航到角色管理页面
  • 测试通过率达到100%10/10

质量验收

  • 测试代码与系统配置测试保持一致的风格
  • 测试代码包含清晰的注释
  • 测试代码包含错误处理

提交验收

  • Git提交信息清晰
  • 代码变更符合预期