脚本跑得好好的,某天早上突然报错。查了半天代码没问题,最后发现 App 更新了一版,某个按钮挪了地方。
有脚本的团队里,这事几乎必然发生。App 是别人在维护的,改版节奏不受你控制。
改版动的是定位,静默更新更难查
业务逻辑还在。坏掉的是脚本用来找目标的那套坐标。
脚本定位通常靠两样:位置和标识。
位置是第几行第几列,截图上量出来,写死在脚本里。界面一动,坐标全废。
标识是控件 ID 或者控件路径。理论上比坐标稳,但改版经常把这些也重新生成一遍。前端框架升级的时候,控件 ID 会成批变化。
失效往往很突然。昨天还好好的,今天全挂。中间没有人改过脚本,运行环境变了。
比知道它改版了更麻烦的,是你不知道。
很多 App 静默更新,手机连上 WiFi 的晚上就自动升级。第二天照常跑脚本,报错,然后去查一个你根本不知道发生过的变化。
没法靠「最近有没有更新」判断问题从哪来,只能从报错反推。
看屏幕判断,什么时候还得改
iEasyRun 不记录坐标,看屏幕上有什么。
执行每一步之前,它先读当前页面:有哪些元素、各自写着什么字,判断哪一个是目标,再点下去。
改版时两类做法差在这:
| 变化类型 | 写死坐标的脚本 | 看屏幕判断 |
|---|---|---|
| 按钮挪位置 | 失效,要重配 | 正常 |
| 菜单层级变了 | 失效,要重配 | 正常 |
| 控件 ID 重新生成 | 失效,要重配 | 正常 |
| 页面多了一个弹窗 | 大概率卡住 | 通常能自己关掉 |
| 按钮文案改了 | 不受影响 | 要补一句描述 |
| 流程本身多了一步 | 失效 | 要改流程 |
前四行是改版最常见的,后两行才需要你动手,而且少得多。
要动手的有两种。
文案变了。按钮从「导出」改成「下载」,或者菜单从「我的」改成「个人中心」。它按文字找,新说法认不出来。在描述里把新说法加进去,比如「点导出(有些版本叫下载)」。
流程本身变了。原来点了导出直接下载,现在多了一个「选择格式」的确认步骤。认字没有认错,是业务上多了一步,描述里要补上这一段。
这两种改完就完事,不会像坐标那样,每改一版界面就重来一轮。
升级之后建议主动跑一次。大概率不用改,跑一次能确认。低频任务尤其要跑。它可能两个月才跑一次,不验证的话,问题会在最不方便的时候露出来。
原来的脚本不用扔。
看变化频率:
- 每天都跑、流程两年没变、对速度敏感,脚本更省资源,继续用
- 界面版本迭代快,或者你懒得维护,用描述跑
- 介于两者之间,先留着,等它下一次失效再决定
很多团队混着用。核心的高频流程用脚本,外围的、容易变的、低频的用描述跑。同一台手机上两种都在,不冲突。
少返工,出问题怎么查
两条习惯能挡掉大部分维护。
把入口描述成做什么,别描述在哪里。「打开我的订单」比「点右下角那个图标」稳。前者说的是目的,后者说的是位置,位置会变。
把容易变的部分做成参数。句式、关键词、目标店铺每次都可能不一样,做成调用时能填的参数,别写死在流程里。改版时只改动的那一处,不用通读整个流程。
先看 执行历史 里那一步的截图。
比读报错文字有用。报错通常只写「找不到元素」,截图能看出当时停在哪个页面。改版导致的问题,十次里有八次是停在一个你从来没见过的新页面上。
看到那个页面,就知道该补哪一句。比如加一个「如果出现 XX 页面,先点跳过」。
软件完全免费,装在自己电脑就能跑。改版之后,维护从每次都要重新调一遍,变成偶尔补一句话。更多场景可以看 移动端 UI 自动化测试 和 不会写代码怎么做手机自动化。
常见问题
- 脚本失效最常见的原因是什么?
- 界面改版占了大多数。按钮挪了位置、菜单层级变了、弹窗多了一步、控件 ID 重新生成——这些都不影响业务逻辑,但会让写死坐标和控件路径的脚本找不到目标。
- 为什么看屏幕决定的做法不受影响?
- 因为它判断的依据是语义而不是位置。脚本认的是「第 320 行 65 列的像素」,它认的是「写着导出两个字的那个按钮」。按钮换到哪儿,语义没变,它就还找得到。
- 什么情况下它也会失效?
- 两种情况:一是文案变了,比如按钮从「导出」改叫「下载」;二是流程本身变了,比如多了一个确认步骤。前一种补一句描述就行,后一种要改流程。
- 改版之后要重新跑一遍验证吗?
- 建议跑一次。虽然大概率不用改,但跑一次确认比等业务出问题再发现要好。低频任务尤其要注意,因为它可能两个月才跑一次。
- 原来的脚本要不要全删掉?
- 不用。高频、流程完全稳定、对速度敏感的活,脚本依然更省资源。两种方式可以并存,同一台手机上都能用。
- 错误提示只写「找不到元素」,怎么定位?
- 先看执行历史里那一步的截图。界面对不对、是不是停在了意料之外的页面,看一眼就知道。改版导致的问题基本都是「停在了新出现的页面」这种形态。
- App 自动更新也会影响吗?
- 会。很多 App 是静默更新的,你不一定知道改了。这恰恰是靠位置定位最吃亏的地方:变化发生在你没注意的时候。
- 怎么减少改版带来的维护工作?
- 两条:把入口描述成「做什么」而不是「在哪里」;把容易变的部分做成可填的参数。做到这两点,一次改版通常只需要改一两句描述。