自动化里的「假成功」:三类静默失败的定位方法

跑自动化真正消耗人的不是报错,是不报错。

前几天连着撞了三次「点了没反应」:进程退出码 0、控制台干净、日志没有 ERROR,但产物一个都没出来。把三次复盘成三类,附上我现在的通用复核顺序。

一、进程级:退出码 0,文件没生成

一条无头 Chrome 截图命令:

powershell 复制代码
$tmp = Join-Path $env:TEMP ("shot_" + [guid]::NewGuid())
Start-Process chrome -ArgumentList @(
  "--headless=old","--disable-gpu","--hide-scrollbars",
  "--user-data-dir=$tmp",
  "--window-size=1080,1440",
  "--screenshot=$out","file:///$html"
) -Wait

$LASTEXITCODE 是 0,stderr 空,但 $out 不存在。换成 --headless=new 也一样正常退出、一样不生成文件,而且它不报错。

两个附带条件:别用 & 直接调用(拿不到 -Wait 的产出时序);--user-data-dir 必须给全新目录,否则会附着到已经在运行的 Chrome。

对策很简单:断言产物,不看退出码。

powershell 复制代码
if (-not (Test-Path $out) -or (Get-Item $out).Length -eq 0) { throw "screenshot failed" }

二、交互级:选中态没生效

弹窗列表里点一项,.active 没加上,点「确定」没反应,控制台干净。原因是那一项的 getBoundingClientRect().top 已经超出视口(实测 viewport 高 777,该项 top 856)。视口外的元素,.click() 和合成 MouseEvent 都不会触发选中,页面也没有任何提示。

js 复制代码
el.scrollIntoView({ block: "center" });
el.click();

另外别在同一个 tick 里读 className 做验证------框架的 DOM 更新是异步的,读早了会误判。

三、服务端级:提交按钮自己弹回来

点「发布」,按钮变「发布中...」并置灰,十几秒后自己变回「发布」。没有 toast、没有报错、列表计数也不变。

这类处理起来麻烦,我的做法是同一动作不硬试超过 2 次,第 3 次换时间窗或换入口。有些平台的额度按提交次数扣,重试反而把机会用掉。

我现在的复核顺序

  • 看产物,不看退出码;
  • 回读状态位(disabled、类名、计数器);
  • 涉及列表的写操作,重载页面再看------很多前端不会自动刷新;
  • 同一动作不超过 2 次。

自动化真正贵的是「不报错但没生效」。把每处「我以为成了」换成「我验证过了」,稳定性会明显好一截。

相关推荐
AliCloudROS6 小时前
OOS ChatOps Agent 定时任务:每天 9 点,让Agent 在钉钉群里交运维报告
运维·自动化运维
追光者499 小时前
我把 55 篇自动化日志翻了一遍:最容易出事的是这 4 个地方
python·自动化运维
考虑考虑13 小时前
JFROG手动上传包
运维·后端·自动化运维
东莞市云毅网络有限公司13 小时前
客服记录里的问句怎么变成知识库条目:意图聚类的 Python 实现
python·sqlite·自动化运维·geo·数据监测
用户34944679120314 小时前
我把午饭外包给了 AI:用麦当劳官方 MCP 造了个每天自己写日记的 GitHub 仓库
自动化运维
Ikalus19885 天前
告警不是变绿,是「不再是 active」——rules/alerting.go 里 0 次 IsStaleNaN
自动化运维
迪康软件zz6 天前
终端审批体系怎么搭?从模板配置到业务连续性
运维·安全·自动化运维
东莞市云毅网络有限公司6 天前
结构化标注缺失怎么查:JSON-LD抽取与每日巡检脚本实现
python·sqlite·自动化运维·geo·数据监测
Vex2une8 天前
Windows PowerShell 发展史:从命令行工具到自动化核心
windows·自动化运维·命令行·powershell·cmd·脚本语言·对象管道