用友开发管理平台 — 新增 UI 自动化工作任务
> 本 skill 由 yyrd-task-creator 复制而来,改造为「UI 自动化工作任务」版本:数据来源换成桌面 UI自动化本.xlsx,经办人/验证人使用固定默认账号,并新增「验证人」字段。
在用友开发管理平台 (pm.yyrd.com/TM#/workTask) 的「工作任务」模块自动创建 UI 自动化类任务。
已验证可填写:任务名称、主题类型、经办人、验证人、计划开始/完成时间、描述(从 Excel 提取步骤+断言生成表格)。
何时使用
- 用户要求「在 pm.yyrd.com 新建 UI 自动化类工作任务 / 用友平台建个 UI 自动化任务」。
- 用户给出 单元格(如
F46),希望脚本自动取标题 + 步骤/断言表格并填表提交。 - 经办人固定为
libbing、验证人固定为huangxwen(可用参数覆盖)。
触发前须知(默认配置,通常无需再问)
- 数据来源 Excel:桌面
C:/Users/Administrator/Desktop/UI自动化本.xlsx,默认 sheetUI自动化用例。 - 列布局:F 列=用例名称(任务标题)、H 列=步骤、I 列=断言(与旧版列布局一致)。
- 任务名称:
--title-cell <单元格>直接取该格(如F46);多个可重复/逗号批量。 - 经办人:默认
libbing(--handler可覆盖)。 - 验证人:默认
huangxwen(--verifier可覆盖)。 - 主题类型:默认「专项」(与旧版一致)。
- 计划开始 / 完成:开始=今天,完成=本周日(可用
--start/--end指定)。 - 描述:自动从 Excel 该用例所在行及后续行收集 步骤(H) + 断言(I) 生成表格,照原文不发挥。
环境准备(首次)
pip install playwright openpyxl
playwright install chromium
登录态(重要)
- 脚本默认从同目录/工作目录的
auth_state.json加载登录态,不重复登录。 - 若文件不存在或 cookie 过期:脚本会以有头模式打开浏览器,由用户手动登录一次,随后自动保存
auth_state.json。 - 因此首次执行建议用非无头模式,并留出手动登录时间。后续执行不再需要登录。
用法
脚本位于 scripts/create_task.py。两种典型调用:
方式 A:直接报单元格(推荐,UI 自动化本.xlsx 默认已配好)
# 单条:标题取 F46,经办人 libbing / 验证人 huangxwen 用默认值
python scripts/create_task.py --title-cell F46
# 覆盖经办人 / 验证人
python scripts/create_task.py --title-cell F46 --handler libbing --verifier huangxwen
--title-cell F46:读UI自动化本.xlsx(sheet=UI自动化用例) 的 F46 作为任务标题,并自动收集该用例(所在行及后续行)的步骤(H列)+断言(I列) 生成表格。- 任务名称可省略(
--name留空即取单元格值);若想自定义标题,仍可显式给--name覆盖。 - 经办人/验证人已有默认值,一般无需传参。
方式 B(批量,推荐):一次浏览器会话连续建多条
# 重复传参(推荐,最清晰)
python scripts/create_task.py --title-cell F44 --title-cell F45 --title-cell F46
# 也支持逗号分隔
python scripts/create_task.py --title-cell F44,F45,F46
- 脚本只打开一次浏览器,按列表顺序建完一条后,自动点击表单内的「返回」、等待列表就绪(系统返回可能有延迟),再点「新增」继续下一条——不再每条重开浏览器。
- 空单元格(如步骤行)会自动跳过,不会建出无标题的脏任务。
- 仅当所有单元格都为空时才会报错退出。
方式 C(旧用法,仍可用):关键词搜索 / 直接给描述文本
# 关键词搜索(--excel-key)
python scripts/create_task.py --name "【UI自动化】xxx" --excel-key "融资申请新增自定义利率"
# 直接文本
python scripts/create_task.py --name "【UI自动化】xxx" --desc "步骤1...断言..."
常用可选参数:--start/--end 指定日期、--url 改目标页、--no-cleanup 不删同名旧任务、--keep-open 30 全部完成后保持浏览器打开检查、--headless 无头模式。
执行流程(脚本内部)
- 加载
auth_state.json→ 打开目标 URL → 检测登录态(失效则等手动登录并保存)。整个批次只做一次。 - 组装任务清单:多个
--title-cell(重复传参或逗号分隔)各生成一条;空单元格自动跳过。 - 等待列表就绪(「新增」按钮可见且无打开的模态框)。
- 对每条任务循环(复用同一浏览器/页面):
a. 清理同名旧任务(按任务名前 12 字匹配「删除」按钮;找不到则跳过)。
b. 点击「新增」→ 轮询等待.add_entity_modal内.el-form-item渲染。
c. 依次填写:任务名称 → 主题类型(iView 下拉) → 经办人(Element UI 人员选择) → 验证人(同经办人,Element UI 人员选择) → 计划开始/完成时间 → 描述(TinyMCE)。
d. 日期校验:填完读取input_value()确认完成时间已落库,未落库则重试(防组件回退为今天)。
e. 点击「保存」(精确匹配,排除「保存并新增」)→ 轮询弹窗关闭。
f. 返回列表:延时 2s 后,若模态框内出现「返回」按钮则点击,再等待列表就绪(兼容系统返回延迟);若弹窗已自动关闭则直接进入下一步。
g. 截图filled_{序号}_*.png与result_{序号}_*.png供核对。 - 全部完成后按需
--keep-open保持浏览器打开,再关闭。
关键提醒(踩坑固化,详见 references/field_locators.md)
- 字段不乱填:用
.el-form-item.filter(has=label_locator)精确定位,绝不靠顺序索引。 - 日期防回退:文本填入后必须校验实际值,必要时重试;日历面板有时不出现,需回退文本兜底。
- TinyMCE 描述:优先
window.tinymceAPI;iframe 写入必须用Frame.evaluate传纯字符串(不能用Locator.evaluate,否则把元素当参数传入)。 - 主题类型是 iView 下拉(
.ivu-select-item);经办人 / 验证人都是 Element UI 人员选择(.el-select-dropdown__item),按账号关键字匹配下拉项。 - 提交按钮:精确匹配「保存」,点错「保存并新增」会导致弹窗不关闭、再开空表单。
- 描述内容:用 Excel 提取时,步骤/断言文案必须照原文,不要改写或翻译。
参考文件
references/field_locators.md— 字段选择器、控件类型、已知坑的完整清单。scripts/create_task.py— 完整可复用脚本(参数化,所有逻辑已验证)。