Files
Yb-QaAutomationHub/output/optimize_merge.py
T
xst 2aca405267 refactor(pages): PO 层框架化 — 细粒度操作 + 显式等待 + 消除静默吞异常
DriverFreightFlowPage (APP):
- 流程方法拆为单一职责的细粒度操作(open_freight_tab/fill_quantity/upload_photo_from_album/...),
  流程方法仅做编排,公共 API 不变,用例零改动
- 移除全部 implicitly_wait 全局副作用,每步显式等待目标元素
- 容错点击(已知晓/确定)改为 _tap_by_text_if_present,跳过时记录 warning

FreightAccountingPage (Web):
- _go/_click_search 改显式等待(搜索框出现/列表数据行或空态),替代固定 2s/1s sleep
- 表格等待升级为 td:visible,避开 vxe-table 固定列隐藏占位单元格
- 点击行操作按钮后显式等待弹窗出现,替代固定 800ms
- 车队长下拉选择改显式等待下拉项渲染
- 可选弹窗操作统一收敛到 _try_click,跳过时记录 warning;关键确认按钮保持严格

两条 E2E 用例在真实环境回归通过(TC-D2S-001 116s / TC-D2S-002 112s)。
2026-09-02 11:59:46 +08:00

161 lines
8.3 KiB
Python

# -*- coding: utf-8 -*-
"""优化司机-货主菜单功能描述:另存新文件 + 合并进运营端菜单清单"""
from openpyxl import load_workbook
from openpyxl.styles import Font, Alignment
SRC = r'E:\Desktop\xst_files\test\work\司机-货主菜单资源.xlsx'
NEW = r'E:\Desktop\xst_files\test\work\司机-货主菜单清单.xlsx'
OPS = r'E:\Desktop\xst_files\test\work\运营端菜单清单.xlsx'
# 按源文件行号(2-99)的优化后描述
D = {
2: '展示运营后台配置的首页轮播图,点击可跳转对应活动/货源页面',
3: '运单主列表:按状态Tab(待装货/待运输/待卸货等)分类展示全部运单,可执行装卸货确认、投诉、清分操作',
4: '按货主姓名、车牌号、装货地/卸货地简称、接单时间筛选运单',
5: '展示能源卡账户余额:电卡、汽卡、油卡',
6: '展示能源卡全部充值记录,可按充值时间筛选',
7: '展示能源卡全部消费记录,可按消费时间筛选',
8: '展示全部运单结算后的运费记录,可按时间、车牌号、手机号、运单筛选',
9: '站内消息列表:按消息类型点击跳转对应页面,可标记为已读',
10: '首页快捷入口:展示最新可接单货源,点击"更多"进入货源菜单',
11: '在线客服会话,与平台客服沟通',
12: '展示不同线路/货源的运价单价参考',
13: '按发货地、收货地、货物类型等条件搜索货源',
14: '调用手机摄像头扫描货源二维码直接接单',
15: '展示全部可接单货源,可按出发地、目的地筛选',
16: '查看货源完整信息,输入接单数量确认接单运输',
17: '展示已添加的全部常跑路线',
18: '选择起始地、目的地,点击新增保存常跑路线(原描述"新增长跑路线"为笔误)',
19: '点击某条常跑路线进入该线路的货源列表',
20: '展示手机号、姓名、头像等个人信息,可退出登录',
21: '输入两次新手机号及登录密码,提交更换手机号',
22: '输入旧密码和两次新密码,完成密码修改',
23: '展示账号注销需满足的条件,确认后提交注销申请',
24: '展示已开户的账户信息与余额',
25: '展示全部交易流水记录',
26: '展示全部收款记录,可按收款时间筛选',
27: '展示全部提现记录,可按状态、时间筛选',
28: '输入提现金额,确认后提交提现申请',
29: '展示已绑定的银行卡,可解绑、绑定账户、删除、设为默认卡',
30: '填写银行卡及持卡人信息,提交后完成绑卡',
31: '上传身份证照片完成实名认证',
32: '实名通过后进行视频活体认证',
33: '上传驾驶证、道路运输从业资格证等证件,完成司机认证',
34: '展示已添加的全部车辆,可按车牌号搜索、删除、设为默认车辆',
35: '填写车辆信息并上传行驶证等证件,匹配成功后提交审核',
36: '展示税务认证信息(代开发票税务登记)',
37: '展示全部车队,可按车队名称、手机号、联系人查询并申请加入',
38: '展示车队邀请记录,可按车队名称、手机号、联系人搜索',
39: '展示已加入的车队,可按车队名称、手机号、联系人搜索,可选择退出车队',
40: '展示已新增的车源(车辆运力)信息,可搜索、编辑、删除',
41: '填写车源信息,提交后新增车源',
42: '展示全部保单信息',
43: '展示全部维修申请记录,可按状态筛选',
44: '填写维修申请字段,提交维修申请',
45: '展示全部电子合同,可搜索查看',
46: '展示我发起的投诉记录',
47: '展示他人对我的投诉记录',
48: '展示平台车辆年检代办服务信息',
49: '展示我发出的评价记录',
50: '展示他人对我的评价记录',
51: '提交投诉与意见建议',
52: '展示运营后台配置的首页轮播图,点击可跳转对应活动页面',
53: '在线客服会话,与平台客服沟通',
54: '展示平台推荐的车源(车辆运力)信息',
55: '查看车源详细信息',
56: '货源发布类型选择:大厅货源、线路项目单',
57: '填写货源发布表单的全部字段并发布货源,支持管理常用路线',
58: '线路项目单列表:可修改、删除、停用、展示货源二维码',
59: '填写线路信息,新增线路项目单',
60: '查看线路详情,并可直接对该线路发布货源',
61: '展示全部账户余额数据',
62: '展示全部提现记录,可按状态、时间筛选',
63: '查看单个钱包的账户详细信息',
64: '输入提现金额,提交提现申请',
65: '发货记录统计,可筛选、查看详情',
66: '收货记录统计,可筛选、查看详情',
67: '运费记录统计,可筛选、查看详情',
68: '发票记录统计,可筛选、查看详情',
69: '站内消息列表:按消息类型点击跳转对应页面,可标记为已读',
70: '展示不同线路/货源的运价单价参考',
71: '展示全部货源,点击货源进入该货源对应的运单',
72: '展示全部运单,可筛选、评价、投诉、备注、核算、批量核算',
73: '同"首页>账户信息"入口:展示全部账户余额数据',
74: '同"首页>账户信息"入口:展示提现记录,可按状态、时间筛选',
75: '同"首页>账户信息"入口:查看单个钱包的账户详细信息',
76: '同"首页>账户信息"入口:输入提现金额提交提现申请',
77: '展示已绑定的银行卡,可解绑、绑定账户、删除、设为默认卡',
78: '填写银行卡及持卡人信息,提交后完成绑卡',
79: '上传货主证件,认证成为货主',
80: '展示全部公司成员,可筛选、添加、修改、删除',
81: '填写成员信息,提交后添加成员',
82: '展示全部保单记录',
83: '展示全部电子合同,可搜索查看',
84: '展示全部货主合同',
85: '展示可开票数据,可筛选并确认索取发票',
86: '展示全部承运分组,可新增、修改、删除分组',
87: '同"首页>车货统计"入口:发货记录统计,可筛选、查看详情',
88: '同"首页>车货统计"入口:收货记录统计,可筛选、查看详情',
89: '同"首页>车货统计"入口:运费记录统计,可筛选、查看详情',
90: '同"首页>车货统计"入口:发票记录统计,可筛选、查看详情',
91: '常用路线管理:可新增、修改、删除、查询路线',
92: '管理开票抬头信息,可新增、删除、修改',
93: '展示我发出的评价记录',
94: '展示他人对我的评价记录',
95: '展示我发起的投诉记录',
96: '展示他人对我的投诉记录',
97: '提交投诉与意见建议',
98: '展示常见问题与解决办法',
99: '展示平台车辆检测代办服务信息',
}
assert len(D) == 98 and set(D) == set(range(2, 100))
# ---- 1. 另存优化后的独立文件 ----
wb = load_workbook(SRC)
ws = wb['Sheet1']
FONT_SONG = Font(name='宋体', size=11)
WRAP = Alignment(wrap_text=True, vertical='center', horizontal='left')
for r, desc in D.items():
c = ws.cell(r, 6, desc)
c.font = FONT_SONG
c.alignment = WRAP
ws.column_dimensions['F'].width = 80
wb.save(NEW)
print('saved:', NEW)
# ---- 2. 合并进运营端菜单清单 Sheet1(追加行,沿用其列结构) ----
wb2 = load_workbook(OPS)
ws2 = wb2['Sheet1']
assert ws2.max_row == 300
FONT_AR = Font(name='Arial', size=10)
row = 301
for r in range(2, 100):
sys_name = ws.cell(r, 2).value # 系统(仅组首行有值)
l1 = ws.cell(r, 3).value # 一级菜单
l2 = ws.cell(r, 4).value # 二级菜单
l3 = ws.cell(r, 5).value # 三级菜单
if sys_name:
ws2.cell(row, 1, sys_name) # 客户端列,沿用"组首行有值"惯例
if l1: ws2.cell(row, 2, l1)
if l2: ws2.cell(row, 3, l2)
if l3: ws2.cell(row, 4, l3)
c = ws2.cell(row, 5, D[r])
c.font = FONT_AR
c.alignment = WRAP
row += 1
print('appended rows 301-%d' % (row - 1))
# ---- 3. 更新说明页 ----
ws3 = wb2['说明']
ws3['B12'] = '菜单条目数(运营端+司机端+货主端)'
ws3['C12'] = '=COUNTA(菜单清单!E:E)-1'
ws3['B16'] = '客户端来源'
ws3['C16'] = ('司机端/货主端菜单为人工整理(原《司机-货主菜单资源.xlsx》),'
'功能描述已优化;运营端菜单来自 sys_resource 表')
from openpyxl.styles import Font as F2
ws3['B16'].font = F2(name='Arial', size=10, bold=True)
ws3['C16'].font = F2(name='Arial', size=10)
wb2.save(OPS)
print('merged into:', OPS)