标签:云机环境验收 · 非生产环境证据
ljg_admin)成功登录 https://test.tongban.love/login(上一版报告卡在旧密码,本轮已用新密码走通)。playwright-core + @sparticuz/chromium,本机已装,脚本 /home/dev2/render-env/p48a-verify.js)全流程单浏览器会话跑通:登录 → 机构列表 → 挑一家未开码机构点开 → 二次确认弹窗 → 整页 → 导出 xlsx 并用 openpyxl 读回真实内容 → 停用 → 重新启用 → 落地页 curl。/tmp/p48a-shots/(本机临时目录,未落 ~/reports/,仅供本次留证);导出文件在 /tmp/p48a-shots/export.xlsx。["机构名称","联系人","机构创建时间","API Key","硬件推送","品牌码开通","状态","操作"],「品牌码开通」在硬件推送与状态之间。getComputedStyle 实测:表头 text-align: center;某机构开码后显示"0"的单元格 text-align: center(span 同)——数字确实居中,未开启的机构显示浅灰「未开启」。["品牌码状态:全部","品牌码状态:已开启","品牌码状态:未开启"],存在。["访问链接","门店物料","编辑","席位","品牌码","更多"]——原有的访问链接/门店物料/编辑/席位都还在,「品牌码」插在席位之后、「更多」之前,没有挤掉任何原按钮;「更多」下拉里还有头图/重新生成凭证/停用启用/删除机构(9-10 那次收进下拉的设计维持不变)。/tmp/p48a-shots/01-orgs-list-top.png(1600 宽默认视口)、/tmp/p48a-shots/06-orgs-list-wide.png(1900 宽,操作列不截断,可见全部 6 个按钮)。/admin/orgs/94/brand-code 整页(真实 URL 跳转,非弹窗内换内容)。/tmp/p48a-shots/02-confirm-modal.png<img alt="品牌码"> 真实渲染出图(非占位符),下方「机构专属码·长期有效」+ 下载品牌码图片/复制链接两个按钮。启用中 + 开通时间 2026-09-17 + 码链接 https://test.tongban.love/h5/brand-scan?bt=h0QjsH-5ZnEWQC4IhsIGfdtoJ6x37EUk9ADXSg1fxlQ(code 标签展示,非弹窗内)。/tmp/p48a-shots/03b-brandcode-page-full.png(全页)["用户","openid","开通时间","到期日","孩子档案","当前绑定机构","绑定时间","状态"],与要求完全一致。role="status"),不是空白一片,也不是报错。<input type="date">,中间用 ~ 分隔)、分页区「共 0 人 · 每页 20 条」+ 上一页/页码/下一页,均在页面上,截图可见。03b-brandcode-page-full.pngpage.waitForEvent('download') 真实捕获下载事件,download.saveAs() 落盘到 /tmp/p48a-shots/export.xlsx(建议文件名 测试示范档案机构_品牌码开通对账表_2026-09.xlsx),用 openpyxl.load_workbook() 读回,逐行真实内容:1 ('品牌码开通对账表',)
2 ('机构名称:测试示范档案机构 | 统计周期:2026-09-17 ~ 2026-09-17 | 导出时间:2026-09-17 05:52',)
3 (空行)
4 ('本期新增', '累计开通', '当前有效', '已过期')
5 (0, 0, 0, 0)
6 (空行)
7 ('本期计费人数:0 人(结算依据 · 系统不记录单价与金额)',)
8 (空行)
9 ('序号', '微信昵称', 'openid', '开通时间', '到期日', '当前绑定机构', '状态', '是否计费')
10 (空行·无明细数据行)
11 ('合计 0 条 | 计费 0 条 | 不计费 0 条',)
机构名称:... | 统计周期:... | 导出时间:...,确认不含品牌码链接(URL/bt=字样均未出现)。window.confirm()(不是自定义弹窗),弹窗文案真实抓取:「确认停用「测试示范档案机构」的品牌码?停用后该码不再能开通新家长(已开通的家长不受影响)。」——Playwright 的 dialog 事件真实捕获到这条文案后 accept。已停用(灰点),右上角按钮文案从「停用品牌码」变为「启用品牌码」。启用中,按钮文案恢复「停用品牌码」。/tmp/p48a-shots/04-after-disable.png(已停用态)、/tmp/p48a-shots/05-after-enable.png(恢复启用态)curl -sS -o /dev/null -w "%{http_code}" 打「测试示范档案机构」的品牌码落地页 https://test.tongban.love/h5/brand-scan?bt=h0QjsH-5ZnEWQC4IhsIGfdtoJ6x37EUk9ADXSg1fxlQ:HTTP 200,返回体 6604 字节,是 Next.js SSR 出的真实 HTML(含 _next/static 资源引用),不是 404/500。brand_code 表新增 1 条记录,brand_code_activation_count 仍为 0——没有真实家长扫码开通,只是开了码本身)。这条状态留在了 test 上,因为「开启品牌码」这个动作本身就是本次要验的功能,且是幂等的一次性开码,不影响其他机构,判断不需要回滚;如需清理请告知。is_enabled 做了 停用→启用 一次往返测试,最终状态确认为「启用中」,与开启后的初始状态一致,没有留下"停用"残留。已关闭(browser.close() 在脚本 finally 块执行,脚本正常退出打印 DONE)。
本轮验收全部通过 Playwright 自动化脚本 + 真实网络请求(登录用真账号密码、导出走真实 page.waitForEvent('download')、xlsx 用 openpyxl 真实解析、微信扫码落地页用真实 curl)完成,不是凭代码读或截图猜测;唯一没有验的是微信 OAuth 授权那一步(如实标注为"需人工手机验")。