279304e9eb
- 详细定义4个任务 - 包含完整的代码示例和验证步骤 - 定义清晰的验收标准
278 lines
7.0 KiB
Markdown
278 lines
7.0 KiB
Markdown
# 用户管理和角色管理测试修复实现计划
|
|
|
|
> **面向 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:修改用户管理测试代码**
|
|
|
|
将以下代码:
|
|
|
|
```javascript
|
|
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);
|
|
}
|
|
```
|
|
|
|
替换为:
|
|
|
|
```javascript
|
|
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:修改角色管理测试代码**
|
|
|
|
将以下代码:
|
|
|
|
```javascript
|
|
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);
|
|
}
|
|
```
|
|
|
|
替换为:
|
|
|
|
```javascript
|
|
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:提交修改**
|
|
|
|
```bash
|
|
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提交信息清晰
|
|
- ✅ 代码变更符合预期
|