# autoBrowser **Repository Path**: avicks/auto-browser ## Basic Information - **Project Name**: autoBrowser - **Description**: No description available - **Primary Language**: Python - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-04-04 - **Last Updated**: 2026-06-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # autoBrowser — ERP 自动化测试项目 基于 [Playwright](https://playwright.dev/python/) + pytest 的 ERP 系统自动化测试框架,采用 Page Object Model 设计,通过 Claude Code + `prompts/` 自然语言描述驱动测试用例生成与执行。 --- ## 目录结构 ``` autoBrowser/ ├── CLAUDE.md # Claude Code 规则文件(启动时自动读取) ├── .env # 账号密码等本地配置(不提交 git) ├── requirements.txt # Python 依赖 ├── agents/ │ └── intent/ │ └── tasks/ # Intent Agent 任务资产(匹配、参数、产物定义) ├── src/ │ └── erpilot/ # 工程化 Python 包 │ ├── app/ # 桌面启动入口 │ ├── web/ # Flask 控制中心 │ ├── agent_runtime/ # Agent 索引与规则意图解析 │ └── automation/ │ └── pages/ # Page Object 封装 ├── prompts/ # 自然语言任务描述(驱动 Claude Code 生成/执行用例) │ ├── login.md │ ├── sales_order.md │ └── import_stock_submit.md ├── tests/ # pytest 测试用例 │ ├── test_sales_order.py │ └── test_import_stock_submit.py └── results/ # 截图输出(不提交 git) ``` --- ## 环境准备 ### 1. Python 版本 要求 Python 3.9+。 ### 2. 安装依赖 ```bash pip install -r requirements.txt playwright install chromium ``` ### 3. 配置 `.env` 在项目根目录创建 `.env` 文件: ```ini LOGIN_URL=https://test.zhubaoe.cn/erp.php/login/index.html?code=ab190735 USERNAME=your_username PASSWORD=your_password CLICK_DELAY=2 # 每次点击后等待秒数(建议生产环境设为 2,调试可设为 1) ROW_COUNT=1 # 快捷入库填写行数(默认 1) ``` --- ## 运行测试 ### 运行所有测试 ```bash python3 -m pytest tests/ -v -s ``` ### 运行指定测试 ```bash # 快捷入库完整流程 python3 -m pytest tests/test_import_stock_submit.py -v -s # 销售单据查询 python3 -m pytest tests/test_sales_order.py -v -s ``` ### 有头模式(可视化调试) ```bash python3 -m pytest tests/test_import_stock_submit.py -v -s --headed ``` ### 查看截图结果 测试完成后截图保存在 `results/` 目录: ``` results/import_stock_submit.png ``` --- ## Intent Agent Intent Agent 当前是规则版,不调用大模型、不执行任务,只负责: - 从 `agents/intent/tasks/*.yaml` 读取任务资产 - 用轻量索引按别名和关键词权重召回候选任务 - 命中后按需加载完整 YAML - 为 `sales_order` 和 `import_stock_submit` 抽取基础参数 只读接口: ```http GET /api/agent/tasks GET /api/agent/search?q=我想查今年买了多少销售单&top_k=3 GET /api/agent/tasks/sales_order POST /api/agent/intent ``` `POST /api/agent/intent` 示例: ```json {"message": "我想查今年买了多少销售单"} ``` 更多说明见 `agents/intent/README.md`。 --- ## 使用 Claude Code 驱动 本项目的核心用法是通过 Claude Code 读取 `prompts/` 目录下的自然语言描述,自动生成或执行测试用例。 ### 执行已有流程 在 Claude Code 中输入: ``` 基于 @claude.md 运行 @prompts/import_stock_submit.md ``` Claude Code 会: 1. 读取 `CLAUDE.md` 中的规则 2. 读取对应 prompt 文件理解任务 3. 检查 `src/erpilot/automation/pages/` 中是否已有对应 Page Object(有则直接复用) 4. 运行 `tests/` 中对应的 pytest 测试 ### 新增自动化流程 1. 在 `prompts/` 下新建 `your_task.md`,用自然语言描述操作步骤 2. 在 Claude Code 中输入: ``` 基于 @claude.md 运行 @prompts/your_task.md ``` Claude Code 会自动: - 若 `src/erpilot/automation/pages/` 无对应文件 → 启动 Playwright MCP 探索页面 → 生成 `src/erpilot/automation/pages/your_task_page.py` - 生成 `tests/test_your_task.py` - 执行测试并返回结果 --- ## 现有测试说明 ### `test_import_stock_submit.py` — 商品快捷入库完整流程 **流程**:登录 → 入库管理 → 商品入库 → 快捷入库 → 填写 SpreadJS 表单 → 保存草稿 → 提交审核 → 审核通过 → 填写备注 → 截图 **关键特性**: - 支持多行填写(由 `.env ROW_COUNT` 控制) - 自动处理销售金价类型联动(调用 Vue `refreshGoldSalePriceTypeCell`) - 提交审核失败(金价类型不存在)时自动重试并重选 - 自动识别多门店「合并入库」弹窗 ### `test_sales_order.py` — 销售单据查询 **流程**:登录 → 销售管理 → 销售单据 → 清除日期筛选 → 查询 → 截图 --- ## Page Object 说明 | 文件 | 类名 | 职责 | |------|------|------| | `base_page.py` | `BasePage` | 公共 `click()`(含延迟)、`wait_for_url()` | | `login_page.py` | `LoginPage` | 登录流程 | | `sales_order_page.py` | `SalesOrderPage` | 销售单据查询 | | `import_stock_page.py` | `ImportStockPage` | 入库列表页,`open_quick_import()` 打开新标签页 | | `import_stock_page.py` | `ImportStockEditPage` | 快捷入库编辑页(SpreadJS 表格操作、提交审核) | --- ## 注意事项 - `.env` 文件包含敏感信息,已加入 `.gitignore`,**禁止提交** - `results/` 目录仅存截图,**禁止提交** - 所有点击操作通过 `BasePage.click()` 执行,自动读取 `CLICK_DELAY` 延迟 - SpreadJS 单元格写入后必须二次校验回显值(`getValue` 无校验地回显任意值) - 新增页面时,先检查 `src/erpilot/automation/pages/` 是否已有对应文件,禁止重复生成