网易首页 > 网易号 > 正文 申请入驻

从15分钟到1秒:前端团队用500行脚本终结“选择器漂移”噩梦

0
分享至

每一次端到端测试运行都有成本,而这个成本是以反馈循环中的分钟数来计算的。

经典场景:有人重构时改了一个 data-test 属性,不知十个用例引用了它。理想情况,一次 15 分钟的合并前检查在快结束时失败告警。最糟情况,改名悄悄并入,凌晨 3:30 夜间构建挂掉。第二天上午,有人得花一个小时才弄明白,这次“失败”不是 bug、不是宕机、不是偶发不稳定,只是三天前被改掉的选择器名字。

无论哪种情况,你都在用分钟甚至小时级的测试执行时间,去获取一个本可在启动浏览器前、一秒内就能知晓的信息。

我们团队决定不再交这笔时间税了。

我们的解决方案是一个大约 500 行的 Node 脚本。它会将我们所有测试用例引用的每一个选择器,与应用源代码中能够生成的每一个选择器进行交叉校验,然后在大约一秒钟内让触发了这个问题的 PR 直接失败。整个过程没有浏览器启动,没有应用引导,也没有 AI 参与。我们是为自己的 Cypress 测试套件打造的,前端技术栈是 Vue 3,大约有 200 个测试文件,约 6300 个选择器调用点。但这个思路跟 Cypress 本身关系不大,它同样适用于 Playwright、WebdriverIO 或其他任何框架,因为被检查的对象不是测试框架本身,而是一个命名的契约。

更棒的是:当它首次在我们那套全部绿灯通过的测试套件上运行时,它直接揪出了 8 个真实的自动化缺陷。

一个像 cy.getByDataTest('orders-table') 这样的选择器,本质上是对一个在别处定义的元素的引用,就像一次函数调用。当有人删掉那个函数时,编译器会立刻告诉你。但反过来,当有人删掉一个属性时,工具链却一声不吭,你只能等到某个恰好触及那个元素的测试恰好运行时,才能发现出了问题。

在讨论这个问题的过程中,我们明确地排除了运行时的“自愈”选择器方案,也就是那种依靠 AI 去猜测你可能想指向哪个元素的做法。我们相信自愈技术在某些场景下是有用的,但它通常会掩盖掉选择器漂移的问题。所以我们追求的是恰恰相反的效果:让导致漂移的 PR 直接失败,以一种清晰且确定性的方式。我们希望按照自己的理解去发现问题并修复它。

这种静态检查之所以能实现,完全依赖于我们此前已强制推行的一项约定:每个测试用例中的每一次元素访问,都必须通过一个统一的辅助调用 cy.getByDataTest('...') 来完成。这实际上是我们测试框架选择器调用之上的一个单行封装。而在应用端,所有组件都只暴露一个 data-test 属性作为测试的锚点。没有原始的 CSS 选择器,没有 XPath,也没有文本匹配来做元素定位。

如果你的测试套件在选择元素时是临时拼凑的,一会儿用 CSS 类名,一会儿用测试 ID,一会儿又靠文本内容,那根本不存在一个可供检查的契约。这套约定本身就是这个契约,而脚本只是负责强制执行它。如果你还没有建立起这种开发纪律,那么采纳它就是解决问题的第零步,而且即便你永远不打算构建这个检查器,这一步本身也回报丰厚。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
中科院研究员黄学杰:可以随时充电,手机每次充到80%,别整晚充电,别把电量用完!网友:那每次都只用80%不到的电量,和坏了有啥区别?

中科院研究员黄学杰:可以随时充电,手机每次充到80%,别整晚充电,别把电量用完!网友:那每次都只用80%不到的电量,和坏了有啥区别?

大白聊IT
2026-07-21 01:21:07
一位34岁大龄剩女的相亲标准:“想娶我,必须要满足这三个条件”

一位34岁大龄剩女的相亲标准:“想娶我,必须要满足这三个条件”

多久情感
2026-07-20 11:55:45
美伊激战正酣,谁会想到,最先倒下国家会是它,中国应做最坏准备

美伊激战正酣,谁会想到,最先倒下国家会是它,中国应做最坏准备

万物知识圈
2026-07-19 09:42:20
知名港星离婚!是情场浪子本性难移,还是承受不住妻子的双重丑闻

知名港星离婚!是情场浪子本性难移,还是承受不住妻子的双重丑闻

文刀贰
2026-07-21 15:27:35
人生最大的愚蠢 ,就是把千辛万苦赚来的钱借给别人

人生最大的愚蠢 ,就是把千辛万苦赚来的钱借给别人

风起见你
2026-06-22 08:01:38
台湾军情局六处副处长庞大为,潜入广州秘密策反解放军少将,亲手搅乱96年台海军演,这位两岸谍战第一人,晚年迎来了什么结局?

台湾军情局六处副处长庞大为,潜入广州秘密策反解放军少将,亲手搅乱96年台海军演,这位两岸谍战第一人,晚年迎来了什么结局?

磊子讲史
2026-07-15 15:39:34
小女儿自称照顾九旬母亲多年,替男友争取财产,母亲无奈:饭都是自己煮

小女儿自称照顾九旬母亲多年,替男友争取财产,母亲无奈:饭都是自己煮

福建第一帮帮团
2026-07-20 21:53:45
印度向比亚迪开出巨额罚单,坑技术坑钱全落空,急眼反闹国际笑话

印度向比亚迪开出巨额罚单,坑技术坑钱全落空,急眼反闹国际笑话

王新喜
2026-07-18 22:01:23
又出事了?日本排华情绪大爆发,高喊滚出日本!百万华人咋办?

又出事了?日本排华情绪大爆发,高喊滚出日本!百万华人咋办?

兵鉴史
2026-06-07 12:30:44
美国6艘舰艇调往菲律宾,美国只要敢动,黄岩岛必填!

美国6艘舰艇调往菲律宾,美国只要敢动,黄岩岛必填!

阿龙聊军事
2026-07-20 21:28:04
上海银行发布关于防范仿冒该行名义虚假保函的声明

上海银行发布关于防范仿冒该行名义虚假保函的声明

财经网
2026-07-21 14:33:07
那年,杨超越还是个厂妹,在厂里啃馒头

那年,杨超越还是个厂妹,在厂里啃馒头

微微热评
2026-07-08 23:03:27
底层的戾气越来越重了。

底层的戾气越来越重了。

老陆不老
2026-07-19 09:07:40
前妻当局长后要调我去喂猪,我指红色电话:明天上级告诉你我是谁

前妻当局长后要调我去喂猪,我指红色电话:明天上级告诉你我是谁

千秋文化
2026-07-18 19:00:32
媒体报道称,泽连斯基考虑用德拉帕蒂取代西尔斯基

媒体报道称,泽连斯基考虑用德拉帕蒂取代西尔斯基

山河路口
2026-07-21 14:27:24
太尴尬了!邹市明被倪萍怒斥“我觉得他没大有是非观”,冉莹颖全程隐忍退让丈夫

太尴尬了!邹市明被倪萍怒斥“我觉得他没大有是非观”,冉莹颖全程隐忍退让丈夫

火山詩话
2026-07-21 06:44:40
黄健翔:西班牙对法国、阿根廷都是碾压,梅西只是输给了时间

黄健翔:西班牙对法国、阿根廷都是碾压,梅西只是输给了时间

懂球帝
2026-07-20 19:16:19
最会讲脱口秀的那批人,全跑了?

最会讲脱口秀的那批人,全跑了?

四味毒叔
2026-07-20 15:23:17
3连胜!CCTV5播中国女排VS美国,赵勇对二传做取舍,李晨瑄迎机会

3连胜!CCTV5播中国女排VS美国,赵勇对二传做取舍,李晨瑄迎机会

体育大学僧
2026-07-21 08:58:16
零票支持!日本议会爆发倒戈潮,高市早苗修改无核三原则彻底无望

零票支持!日本议会爆发倒戈潮,高市早苗修改无核三原则彻底无望

阿晪美食
2026-07-21 15:10:40
2026-07-21 16:27:00
摸鱼算法
摸鱼算法
致力于用最前沿的AI技术,换取更多发呆时间的三十岁青年。
347文章数 57关注度
往期回顾 全部

科技要闻

智谱暴跌,Kimi只是导火索

头条要闻

男子工亡哥哥获赔116万 分居多年妻子起诉索还91.6万

头条要闻

男子工亡哥哥获赔116万 分居多年妻子起诉索还91.6万

体育要闻

西班牙队夺冠游行庆典:200万人,狂欢5小时

娱乐要闻

谢贤被曝已火葬,狄波拉携儿女送别

财经要闻

创业板指涨超7% 半导体产业链全线爆发

汽车要闻

热爱驾驶的更棒选择 极氪8X让大块头也有大乐趣

态度原创

游戏
亲子
本地
公开课
军事航空

IGN试玩GF社新作《轮回之兽》!只狼+剑星+FF7+尼尔融合怪?

亲子要闻

梦幻童话世界,带娃探访小王子的星球

本地新闻

2026暑期旅行新灵感:跟着影视去旅行

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

美伊再开打 战局出现新变化

无障碍浏览 进入关怀版