fix(台架脚本): 导航器加两条硬闸——执行类页面默认不进、未知屏 ENTER 最多一次
bench-runner 在给 UI 窗口做准备时报出一条**三段叠加就会真执行破坏性动作**的路径, 而我就是其中一段的作者:496b4dc5 把 e 放进 UNKNOWN 屏的回退键序(当时的动机是真的 ——本机待机态按 s/l 无效,冷启动落在待机态时闭环导航直接开不了工)。叠加面在这里: · 导航器每进一个叶子就发一次 ENTER,且会替「查看密码」自动确认; · 装置维护的 强制复归 / 清除记录 已进菜单树; · 这两页是**两段式确认**——第一次 ENTER 只把该行标成「确认?」,第二次 ENTER 就真的 执行(复归全部保护动作位并写 SOE / 清 SOE·运行·操作记录)。 单个 ENTER 安全,但**同一屏上第二次 ENTER 不安全**;而退避键序是循环消费的,第一次 按 e、第四次又按 e。更要命的是:新字库缺字、白框、状态行变化恰恰最容易让页面被判成 UNKNOWN——那正是我们最想在 UI 窗口里抓的东西。**越是显示异常,越容易被脚本按执行**。 两条硬闸(不改任何固件、只动这一只台架脚本): ① to_root() 内 ENTER **最多按 BACKOFF_MAX_E 次**(默认 1);还需要第二次就当场报错 停机、并把 dump 的帧留在盘上,而不是把第二个 ENTER 投出去。报错文案直接点名执行类 风险与放行方式(改用无 ENTER 的键序 --backoff-keys sl)。 ② 执行类页面 EXEC_PAGE_IDS = clear / reset **默认拒绝下钻**;确有真机需要才显式加 --allow-exec-pages,且运行时打印警告。要看这两页的显示正确性,正路是模拟器黄金参考—— 同一份 UI 源码、零真机副作用。 通用口径一并写进文件头:**导航类自动化脚本默认零 ENTER**,ENTER 只允许出现在明确 指定的、非执行类的用例步骤里。「靠按 ENTER 从未知状态脱身」这个前提本身就与执行类 页面冲突,不该由脚本替你承担后果。 行为验证(假设备,绝不连真机、绝不注键):clear / reset 均被拒且理由含「真执行」; clock 不受该闸影响(走到设备层才失败);持续 UNKNOWN 的循环实际按键序列是 e-s-l 后 在第 2 次 ENTER 前停机,实测 ENTER 计数 = 1 = BACKOFF_MAX_E,报错理由点名执行类风险。 5/5 通过;py_compile 通过;--help 可跑。临时脚本没留在仓库里,__pycache__ 已清。 另两处纯计数更正(与文档道 task-39 同批真值:黄金参考 40 页):本文件 selftest_refs 的 docstring 27 → 40;.pre-commit-config.yaml 里 ui-golden 的显示名 27 → 40(这是 「声明 / 文档 / 实跑」三数同源的最后一处不同码)。
This commit is contained in:
@@ -641,7 +641,7 @@ repos:
|
||||
# 疑似 MSBuild 节点争用;此后 3 次干净树连跑均绿。判据:单次失败先复跑一次再看,
|
||||
# 连续两次失败才当真(不许直接 --no-verify 绕过)。
|
||||
- id: ui-golden
|
||||
name: UI 像素回归(菜单 8 状态 + 内容页 27 页 黄金参考)
|
||||
name: UI 像素回归(菜单 8 状态 + 内容页 40 页 黄金参考)
|
||||
entry: python scripts/check_ui_golden.py
|
||||
language: system
|
||||
files: ^(Drivers/BSP/UI/|App/task/ui_task\.(c|h)$|simulator/(tests|sim|src)/|simulator/main\.c$|simulator/CMakeLists\.txt$|simulator/lv_conf\.h$|scripts/check_ui_golden\.py$|\.pre-commit-config\.yaml$)
|
||||
|
||||
Reference in New Issue
Block a user