- Create user/ - User guides and configuration documentation - Create features/ - Feature specifications and business flows - Create debugging/ - Debug guides and quick references - Create testing/ - Test infrastructure, reports, and plans - Create internal/ - Internal plans, analyses, and templates - Move cleaner/*.md to cleaner/ directory - Move LOGGING_*.md to developer/guides/ Add docs/README.md as documentation index with category navigation and quick lookup guide. The reorganized structure makes it easier for users and developers to quickly locate relevant documentation.
237 lines
6.0 KiB
Markdown
237 lines
6.0 KiB
Markdown
# ERP 登录调试工具使用说明
|
||
|
||
## 目的
|
||
|
||
用于人工调试 ERP 登录流程,定位主界面特征元素,以便优化登录成功的判定逻辑。
|
||
|
||
## 前置准备
|
||
|
||
### 1. 配置 ERP 登录信息
|
||
|
||
编辑 `src/main/tools/erp-login-debug.ts` 文件,修改以下配置:
|
||
|
||
```typescript
|
||
const ERP_CONFIG = {
|
||
url: 'https://your-erp-server.com', // ← 修改为你的 ERP 地址
|
||
username: 'your_username', // ← 修改为你的用户名
|
||
password: 'your_password' // ← 修改为你的密码
|
||
}
|
||
```
|
||
|
||
### 2. 确保 tsx 已安装
|
||
|
||
如果运行时报错提示找不到 `tsx`,请安装:
|
||
|
||
```bash
|
||
npm install -g tsx
|
||
# 或作为项目依赖
|
||
npm install --save-dev tsx
|
||
```
|
||
|
||
## 使用方法
|
||
|
||
### 方式一:使用 npm 脚本(推荐)
|
||
|
||
```bash
|
||
npm run debug:erp-login
|
||
```
|
||
|
||
### 方式二:直接运行
|
||
|
||
```bash
|
||
npx tsx src/main/tools/erp-login-debug.ts
|
||
```
|
||
|
||
## 调试流程
|
||
|
||
### 步骤 1:启动脚本
|
||
|
||
运行命令后,脚本会显示配置信息并等待你确认:
|
||
|
||
```
|
||
============================================================
|
||
ERP 登录调试工具
|
||
============================================================
|
||
目标 URL: https://your-erp-server.com
|
||
用户名:your_username
|
||
密码: ***
|
||
============================================================
|
||
|
||
操作步骤:
|
||
1. 浏览器将自动打开并尝试登录
|
||
2. 如果登录失败,请检查配置或手动重试
|
||
3. 登录成功后,会自动暂停并打开开发者工具
|
||
4. 使用元素选择器定位主界面特征元素
|
||
5. 记录元素选择器,按 Ctrl+C 退出脚本
|
||
|
||
按 Enter 键开始...
|
||
```
|
||
|
||
### 步骤 2:自动登录
|
||
|
||
脚本会自动执行:
|
||
|
||
- 打开浏览器
|
||
- 导航到登录页面
|
||
- 输入用户名和密码
|
||
- 点击登录按钮
|
||
- 处理强制登录确认对话框(如果有)
|
||
|
||
### 步骤 3:人工元素定位
|
||
|
||
登录成功后,脚本会暂停并显示:
|
||
|
||
```
|
||
============================================================
|
||
✓ 登录成功!
|
||
============================================================
|
||
|
||
现在进入调试模式,请进行以下操作:
|
||
|
||
1. 按 F12 打开浏览器开发者工具
|
||
2. 使用元素选择器 (Ctrl+Shift+C) 点击主界面特征元素
|
||
3. 在 Elements 面板中右键元素 → Copy → Copy selector
|
||
4. 或者使用 Playwright Inspector:
|
||
- 在控制台输入:await page.pause()
|
||
- 使用 Inspector 的元素选择工具
|
||
|
||
建议定位的特征元素:
|
||
- 主界面顶部导航栏
|
||
- 侧边菜单栏
|
||
- 主内容区域的唯一标识
|
||
- 用户信息显示区域
|
||
- 任何登录后独有的界面元素
|
||
|
||
============================================================
|
||
```
|
||
|
||
### 步骤 4:记录元素选择器
|
||
|
||
在开发者工具中:
|
||
|
||
1. **使用元素选择器** (Ctrl+Shift+C) 点击界面元素
|
||
2. **在 Elements 面板** 查看元素 HTML
|
||
3. **右键元素** → Copy → 选择以下之一:
|
||
- `Copy selector` - CSS 选择器
|
||
- `Copy XPath` - XPath 路径
|
||
- `Copy JS path` - JavaScript 路径
|
||
|
||
### 步骤 5:更新 locators.ts
|
||
|
||
将找到的元素选择器添加到 `src/main/services/erp/locators.ts`:
|
||
|
||
```typescript
|
||
export const ERP_LOCATORS = {
|
||
// ... 现有配置 ...
|
||
|
||
// 新增:主界面特征元素(用于登录成功判定)
|
||
mainPage: {
|
||
topNavigationBar: '#top-nav', // 顶部导航栏
|
||
sideMenu: '.side-menu', // 侧边菜单
|
||
userProfile: '.user-profile', // 用户信息
|
||
welcomeMessage: 'internal:has-text="欢迎"' // 欢迎消息
|
||
}
|
||
}
|
||
```
|
||
|
||
### 步骤 6:退出脚本
|
||
|
||
按 `Ctrl+C` 终止脚本,浏览器会在 5 秒后自动关闭。
|
||
|
||
## Playwright Inspector 使用技巧
|
||
|
||
### 开启 Inspector
|
||
|
||
在脚本暂停时,在浏览器控制台输入:
|
||
|
||
```javascript
|
||
await page.pause()
|
||
```
|
||
|
||
会打开 Playwright Inspector,提供:
|
||
|
||
- 元素选择器
|
||
- 实时 locator 测试
|
||
- 代码生成
|
||
|
||
### 测试 Locator
|
||
|
||
在 Inspector 控制台测试 locator 是否有效:
|
||
|
||
```javascript
|
||
// 测试 CSS 选择器
|
||
await page.locator('#top-nav').count()
|
||
|
||
// 测试 role-based 选择器
|
||
await page.getByRole('navigation').count()
|
||
|
||
// 测试文本选择器
|
||
await page.getByText('欢迎').count()
|
||
```
|
||
|
||
如果返回数量 > 0,说明选择器有效。
|
||
|
||
## 推荐的特征元素
|
||
|
||
选择登录成功判定元素时,优先选择:
|
||
|
||
1. **唯一性** - 只在登录后出现
|
||
2. **稳定性** - 不易随版本变更
|
||
3. **易定位** - 有明确的 id、class 或文本
|
||
|
||
### 推荐元素示例
|
||
|
||
| 元素类型 | 选择器示例 | 说明 |
|
||
| ------------ | ----------------------- | ---------------------- |
|
||
| 顶部导航栏 | `#top-nav` | 登录后才会显示的主导航 |
|
||
| 用户菜单 | `.user-menu` | 显示当前用户名的菜单 |
|
||
| 欢迎消息 | `text=欢迎` | 包含用户名的欢迎语 |
|
||
| 工作台标题 | `h1:has-text("工作台")` | 主界面标题 |
|
||
| 功能模块网格 | `.module-grid` | 功能模块入口区域 |
|
||
|
||
## 常见问题
|
||
|
||
### Q: 登录失败,提示找不到元素
|
||
|
||
**A**: 检查以下几点:
|
||
|
||
1. ERP URL 是否正确
|
||
2. 用户名密码是否正确
|
||
3. 网络连接是否正常
|
||
4. ERP 系统是否可访问
|
||
5. 是否需要验证码(如果 ERP 有验证码,需要手动输入)
|
||
|
||
### Q: 登录后没有暂停
|
||
|
||
**A**: 检查控制台输出,可能登录流程中抛出了异常。查看错误信息并修复。
|
||
|
||
### Q: 如何调试特定页面?
|
||
|
||
**A**: 修改脚本中的登录后逻辑,导航到特定页面:
|
||
|
||
```typescript
|
||
// 登录后导航到特定页面
|
||
await page.goto(`${ERP_CONFIG.url}/yonbip/sc`)
|
||
await page.waitForTimeout(3000)
|
||
```
|
||
|
||
### Q: 如何保存调试会话?
|
||
|
||
**A**: Playwright 支持录制 trace:
|
||
|
||
```typescript
|
||
await context.tracing.start({ screenshots: true, snapshots: true })
|
||
// ... 操作 ...
|
||
await context.tracing.stop({ path: 'trace.zip' })
|
||
```
|
||
|
||
然后使用 `npx playwright show-trace trace.zip` 查看。
|
||
|
||
## 下一步
|
||
|
||
找到稳定的主界面元素后,修改以下文件优化登录判定:
|
||
|
||
1. **更新 locators.ts** - 添加主界面元素定位器
|
||
2. **修改 erp-auth.ts** - 在登录成功后等待主界面元素
|
||
3. **更新测试** - 验证新的登录判定逻辑
|