Files
Yb-QaAutomationHub/output/reports/report_cn_20260729_101645.html
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

216 lines
15 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>自动化测试报告 - 2026-07-29 10:18:31</title>
<style>
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:'Microsoft YaHei','PingFang SC',sans-serif;background:#f5f7fa;color:#333;line-height:1.6}
.header{background:linear-gradient(135deg,#409eff,#337ecc);color:#fff;padding:24px 32px}
.header h1{font-size:22px;font-weight:500}
.header .sub{font-size:13px;opacity:.75;margin-top:6px}
.summary{display:flex;gap:20px;padding:24px 32px 12px;background:#fff}
.card{flex:1;text-align:center;padding:16px;border-radius:8px}
.card .num{font-size:36px;font-weight:600}
.card .label{font-size:14px;color:#909399;margin-top:4px}
.card.total{background:#f0f5ff}.card.total .num{color:#409eff}
.card.pass{background:#f0f9eb}.card.pass .num{color:#67c23a}
.card.fail{background:#fef0f0}.card.fail .num{color:#f56c6c}
.card.skip{background:#fdf6ec}.card.skip .num{color:#e6a23c}
.meta-row{display:flex;gap:24px;padding:8px 32px 20px;background:#fff;border-bottom:1px solid #e4e7ed;font-size:13px;color:#909399}
.section-title{font-size:16px;font-weight:500;padding:20px 32px 12px;background:#fff}
.tbl-wrap{margin:0 32px 20px;background:#fff;border-radius:8px;box-shadow:0 1px 4px rgba(0,0,0,.06);overflow-x:auto}
table{width:100%;border-collapse:collapse;min-width:600px}
th{background:#f5f7fa;text-align:left;padding:10px 14px;font-size:13px;color:#909399;font-weight:500;border-bottom:2px solid #e4e7ed;white-space:nowrap}
td{padding:0;border-bottom:1px solid #ebeef5;vertical-align:top}
/* ── 可折叠用例行 ── */
.case-detail{}
.case-detail[open] .case-summary{background:#f0f5ff}
.case-summary{display:flex;align-items:center;gap:12px;padding:10px 14px;cursor:pointer;list-style:none;user-select:none}
.case-summary::-webkit-details-marker{display:none}
.case-summary::before{content:'▶';font-size:10px;color:#909399;transition:transform .15s;width:14px;text-align:center}
details[open]>.case-summary::before{transform:rotate(90deg)}
.case-summary:hover{background:#f5f7fa}
.case-idx{font-size:12px;color:#909399;min-width:24px;text-align:center;font-variant-numeric:tabular-nums}
.case-title{flex:1;font-weight:500;font-size:13px}
.case-desc-inline{font-size:12px;color:#909399;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.case-time{font-size:12px;color:#909399;min-width:48px;text-align:right}
.s-pass{color:#67c23a;font-weight:600}
.s-fail{color:#f56c6c;font-weight:600}
.s-skip{color:#e6a23c;font-weight:600}
.case-row-s-pass .case-summary{border-left:3px solid #67c23a}
.case-row-s-fail .case-summary{border-left:3px solid #f56c6c}
.case-row-s-skip .case-summary{border-left:3px solid #e6a23c}
/* ── 展开后详情 ── */
.detail-grid{display:grid;grid-template-columns:200px 1fr;gap:0;padding:12px 20px 16px}
.detail-col{display:contents}
.detail-label{font-size:12px;color:#909399;padding:4px 8px;font-weight:500}
.detail-val{font-size:12px;color:#333;padding:4px 8px}
.case-err{margin-top:8px}
.err-label{font-size:12px;color:#f56c6c;font-weight:600;margin-bottom:4px}
.err-msg{font-size:11px;background:#fff7f7;color:#f56c6c;padding:8px;border-radius:4px;white-space:pre-wrap;word-break:break-all;max-height:200px;overflow-y:auto}
.case-shots{margin-top:10px}
.phases{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}
.phases span{font-size:11px;padding:2px 8px;border-radius:10px;white-space:nowrap}
.phase-phase{background:#e6f7ff;color:#1890ff}
.phase-done{background:#f6ffed;color:#52c41a}
/* ── 日志 ── */
.log-section{margin:0 32px 12px;background:#fff;border-radius:8px;box-shadow:0 1px 4px rgba(0,0,0,.06);padding:12px 20px}
.log-section summary{font-size:14px;font-weight:500;cursor:pointer;padding:4px 0}
.log-content{font-size:11px;background:#1e1e1e;color:#d4d4d4;padding:12px;border-radius:4px;white-space:pre-wrap;word-break:break-all;max-height:400px;overflow-y:auto;font-family:'Consolas','Courier New',monospace}
/* ── 截图 ── */
.shot-gallery{display:flex;flex-wrap:wrap;gap:12px;padding:4px 0}
.shot-card-sm{width:200px;border-radius:6px;overflow:hidden;box-shadow:0 1px 4px rgba(0,0,0,.08);background:#fff;transition:box-shadow .2s}
.shot-card-sm:hover{box-shadow:0 4px 16px rgba(0,0,0,.15)}
.shot-card-sm .shot-thumb{width:100%;height:140px;overflow:hidden;cursor:pointer;position:relative;background:#f5f7fa}
.shot-card-sm .shot-thumb img{width:100%;height:100%;object-fit:contain;display:block}
.shot-card-sm .shot-label{font-size:10px;color:#606266;padding:4px 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.shot-thumb.expanded{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:90vw;height:90vh;z-index:9999;background:rgba(0,0,0,.85);border-radius:0!important}
.shot-thumb.expanded img{width:auto;height:auto;max-width:100%;max-height:100%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}
.shot-thumb::after{content:'🔍';position:absolute;bottom:4px;right:6px;font-size:12px;opacity:0;transition:opacity .2s}
.shot-thumb:hover::after{opacity:.7}
.shot-group{margin:0 0 8px}
.shot-group summary{font-size:13px;font-weight:500;cursor:pointer;padding:4px 0;color:#606266}
.ft{text-align:center;padding:24px;font-size:12px;color:#c0c4cc}
</style>
</head>
<body>
<div class="header">
<h1>🚀 自动化测试报告</h1>
<div class="sub">运八网络货运平台 · QaAutomationHub · 2026-07-29 10:18:31</div>
</div>
<div class="summary">
<div class="card total"><div class="num">1</div><div class="label">总计</div></div>
<div class="card pass"><div class="num">0</div><div class="label">通过</div></div>
<div class="card fail"><div class="num">1</div><div class="label">失败</div></div>
<div class="card skip"><div class="num">0</div><div class="label">跳过</div></div>
</div>
<div class="meta-row">
<span>执行时间: 2026-07-29 10:18:31</span>
<span>套件耗时: 106.2s</span>
<span>通过率: 0.0%</span>
<span style="cursor:pointer;color:#409eff" onclick="document.querySelectorAll('.case-detail').forEach(d=>d.open=true)">📂 全部展开</span>
<span style="cursor:pointer;color:#909399" onclick="document.querySelectorAll('.case-detail').forEach(d=>d.open=false)">📁 全部折叠</span>
</div>
<div class="tbl-wrap">
<table>
<thead><tr>
<th style="width:36px">#</th><th>状态</th><th>用例名称 / 描述</th><th>耗时(s)</th>
</tr></thead>
<tbody>
<tr class="case-row case-row-s-fail">
<td colspan="8" style="padding:0">
<details class="case-detail">
<summary class="case-summary">
<span class="case-idx">1</span>
<span class="s-fail">❌ 失败</span>
<span class="case-title">司机APP接单到管理端核算打款完整流程</span>
<span class="case-desc-inline">用例ID: TC-D2S-001 用例名称: 司机APP接单到管理端核算打款完整流程 优先级: P0 标签: cross</span>
<span class="case-time">105.7s</span>
</summary>
<div class="detail-grid">
<div class="detail-col">
<div class="detail-label">用例ID</div><div class="detail-val">TC-D2S-001</div>
<div class="detail-label">优先级</div><div class="detail-val">P0</div>
<div class="detail-label">标签</div><div class="detail-val">cross_end, smoke</div>
<div class="detail-label">耗时</div><div class="detail-val">105.7s</div>
</div>
<div class="detail-col">
<div class="detail-label">阶段详情</div><div class="detail-val">无</div>
<div class="case-err">
<div class="err-label">错误信息</div>
<pre class="err-msg">playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 5000ms exceeded.
Call log:
- waiting for locator("table tbody tr") to be visible
14 × locator resolved to 5 elements. Proceeding with the first one: <tr>…</tr></pre>
</div>
</div>
</div>
</details>
</td>
</tr></tbody>
</table>
</div>
<div class="section-title">📋 测试日志</div>
<details class="log-section">
<summary>📄 test_run_20260729_101650.log</summary>
<pre class="log-content">2026-07-29 10:16:50 [INFO] tests.cross_end.test_driver_to_settlement — ============================================================
2026-07-29 10:16:50 [INFO] tests.cross_end.test_driver_to_settlement — 跨端 E2E: 司机APP → 管理端核算打款 完整流程开始
2026-07-29 10:16:50 [INFO] tests.cross_end.test_driver_to_settlement — ============================================================
2026-07-29 10:16:59 [INFO] tests.cross_end.test_driver_to_settlement — Phase 1: 司机 APP — 开始接单流程
2026-07-29 10:17:06 [INFO] tests.cross_end.test_driver_to_settlement — -&gt; 接单流程完成
2026-07-29 10:17:06 [INFO] tests.cross_end.test_driver_to_settlement — Phase 1: 司机 APP — 开始装货流程
2026-07-29 10:17:27 [INFO] tests.cross_end.test_driver_to_settlement — -&gt; 装货流程完成
2026-07-29 10:17:27 [INFO] tests.cross_end.test_driver_to_settlement — Phase 1: 司机 APP — 开始卸货流程
2026-07-29 10:17:44 [INFO] tests.cross_end.test_driver_to_settlement — -&gt; 卸货流程完成
2026-07-29 10:17:44 [INFO] tests.cross_end.test_driver_to_settlement — Phase 1: 司机 APP — 获取运输单号
2026-07-29 10:17:45 [INFO] tests.cross_end.test_driver_to_settlement — -&gt; 运输单号: RHJC040026072700011014350004
2026-07-29 10:17:45 [INFO] tests.cross_end.test_driver_to_settlement — Phase 2: Web管理端 — 运费核算(首次查询无数据时自动 SQL 重试)
2026-07-29 10:17:56 [INFO] tests.cross_end.test_driver_to_settlement — -&gt; 运费核算完成: RHJC040026072700011014350004
2026-07-29 10:17:56 [INFO] tests.cross_end.test_driver_to_settlement — Phase 2: Web管理端 — 运单审核
2026-07-29 10:18:02 [INFO] tests.cross_end.test_driver_to_settlement — -&gt; 运单审核完成: RHJC040026072700011014350004
2026-07-29 10:18:02 [INFO] tests.cross_end.test_driver_to_settlement — Phase 2: Web管理端 — 垫资-财务打款
2026-07-29 10:18:10 [INFO] tests.cross_end.test_driver_to_settlement — -&gt; 垫资-财务打款完成: RHJC040026072700011014350004
2026-07-29 10:18:10 [INFO] tests.cross_end.test_driver_to_settlement — Phase 2: Web管理端 — 垫资-货主打款
</pre>
</details>
<details class="log-section">
<summary>📄 test_run_20260729_100500.log</summary>
<pre class="log-content">2026-07-29 10:05:00 [INFO] tests.cross_end.test_driver_to_settlement — ============================================================
2026-07-29 10:05:00 [INFO] tests.cross_end.test_driver_to_settlement — 跨端 E2E: 司机APP → 管理端核算打款 完整流程开始
2026-07-29 10:05:00 [INFO] tests.cross_end.test_driver_to_settlement — ============================================================
2026-07-29 10:05:06 [INFO] tests.cross_end.test_driver_to_settlement — Phase 1: 司机 APP — 开始接单流程
2026-07-29 10:05:17 [INFO] tests.cross_end.test_driver_to_settlement — -&gt; 接单流程完成
2026-07-29 10:05:17 [INFO] tests.cross_end.test_driver_to_settlement — Phase 1: 司机 APP — 开始装货流程
2026-07-29 10:05:39 [INFO] tests.cross_end.test_driver_to_settlement — -&gt; 装货流程完成
2026-07-29 10:05:39 [INFO] tests.cross_end.test_driver_to_settlement — Phase 1: 司机 APP — 开始卸货流程
2026-07-29 10:05:55 [INFO] tests.cross_end.test_driver_to_settlement — -&gt; 卸货流程完成
2026-07-29 10:05:55 [INFO] tests.cross_end.test_driver_to_settlement — Phase 1: 司机 APP — 获取运输单号
2026-07-29 10:05:56 [INFO] tests.cross_end.test_driver_to_settlement — -&gt; 运输单号: RHJC040026072700011002460003
2026-07-29 10:05:56 [INFO] tests.cross_end.test_driver_to_settlement — Phase 2: Web管理端 — 运费核算(首次查询无数据时自动 SQL 重试)
2026-07-29 10:06:07 [INFO] tests.cross_end.test_driver_to_settlement — -&gt; 运费核算完成: RHJC040026072700011002460003
2026-07-29 10:06:07 [INFO] tests.cross_end.test_driver_to_settlement — Phase 2: Web管理端 — 运单审核
2026-07-29 10:06:14 [INFO] tests.cross_end.test_driver_to_settlement — -&gt; 运单审核完成: RHJC040026072700011002460003
2026-07-29 10:06:14 [INFO] tests.cross_end.test_driver_to_settlement — Phase 2: Web管理端 — 垫资-财务打款
2026-07-29 10:06:22 [INFO] tests.cross_end.test_driver_to_settlement — -&gt; 垫资-财务打款完成: RHJC040026072700011002460003
2026-07-29 10:06:22 [INFO] tests.cross_end.test_driver_to_settlement — Phase 2: Web管理端 — 垫资-货主打款
</pre>
</details>
<details class="log-section">
<summary>📄 test_run_20260729_095615.log</summary>
<pre class="log-content">2026-07-29 09:56:15 [INFO] tests.cross_end.test_driver_to_settlement — ============================================================
2026-07-29 09:56:15 [INFO] tests.cross_end.test_driver_to_settlement — 跨端 E2E: 司机APP → 管理端核算打款 完整流程开始
2026-07-29 09:56:15 [INFO] tests.cross_end.test_driver_to_settlement — ============================================================
2026-07-29 09:56:31 [INFO] tests.cross_end.test_driver_to_settlement — Phase 1: 司机 APP — 开始接单流程
2026-07-29 09:56:39 [INFO] tests.cross_end.test_driver_to_settlement — -&gt; 接单流程完成
2026-07-29 09:56:39 [INFO] tests.cross_end.test_driver_to_settlement — Phase 1: 司机 APP — 开始装货流程
2026-07-29 09:56:56 [INFO] tests.cross_end.test_driver_to_settlement — -&gt; 装货流程完成
2026-07-29 09:56:56 [INFO] tests.cross_end.test_driver_to_settlement — Phase 1: 司机 APP — 开始卸货流程
2026-07-29 09:57:11 [INFO] tests.cross_end.test_driver_to_settlement — -&gt; 卸货流程完成
2026-07-29 09:57:11 [INFO] tests.cross_end.test_driver_to_settlement — Phase 1: 司机 APP — 获取运输单号
2026-07-29 09:57:12 [INFO] tests.cross_end.test_driver_to_settlement — -&gt; 运输单号: RHJC040026072700010954080002
2026-07-29 09:57:12 [INFO] tests.cross_end.test_driver_to_settlement — Phase 2: Web管理端 — 运费核算(首次查询无数据时自动 SQL 重试)
2026-07-29 09:57:24 [INFO] tests.cross_end.test_driver_to_settlement — -&gt; 运费核算完成: RHJC040026072700010954080002
2026-07-29 09:57:24 [INFO] tests.cross_end.test_driver_to_settlement — Phase 2: Web管理端 — 运单审核
2026-07-29 09:57:31 [INFO] tests.cross_end.test_driver_to_settlement — -&gt; 运单审核完成: RHJC040026072700010954080002
2026-07-29 09:57:31 [INFO] tests.cross_end.test_driver_to_settlement — Phase 2: Web管理端 — 垫资-财务打款
2026-07-29 09:57:39 [INFO] tests.cross_end.test_driver_to_settlement — -&gt; 垫资-财务打款完成: RHJC040026072700010954080002
2026-07-29 09:57:39 [INFO] tests.cross_end.test_driver_to_settlement — Phase 2: Web管理端 — 垫资-货主打款
</pre>
</details>
<div class="section-title">📸 当次测试截图 </div>
<div class="log-section"><p style="color:#909399">暂无截图</p></div>
<div class="ft">报告自动生成于 2026-07-29 10:18:31 · QaAutomationHub 自动化测试框架</div>
</body></html>