pikabo - 一个可以自动化浏览器插件测试的工具

8 月 19 日
 pike0002

做浏览器扩展的日常循环大概是这样:改一行代码 → chrome://extensions 点刷新 → 点开弹窗 → 再点进选项页 → 同时盯三个 DevTools 窗口看有没有报错。我自己维护几个扩展,这套流程走了几年,一直没写自动化测试——不是懒,是常规工具够不着扩展真正会坏的地方。

Playwright / Puppeteer 驱动的是「页面」,而扩展大部分不是页面:

以前的办法是 --load-extension 启动浏览器再驱动。Chrome 137 把这个开关从 Chrome 品牌版本里删了(理由也算合理,这参数长期被拿来静默装恶意扩展)。但公告里关键的一句是:该变更只作用于 Chrome 品牌版本,Chromium 、Chrome for Testing 照常工作。 所以门没焊死,只是官方 Chrome 关了。

顺带说两个实测结论,省得有人踩:

于是有了 pikabo

一句话:manifest.json 里其实已经写好半套测试了。弹窗、选项页、内容脚本的匹配规则、有没有 Service Worker——这些都是声明好的,足够推导出一套真能跑的冒烟测试。

npx pikabo explore --ext ./my-extension

它读 manifest ,在真实 Chromium 里把每个声明的界面打开,检查弹窗是不是渲染出了实际内容(而不是一个空壳),按内容脚本的匹配规则访问对应网址确认注入成功,再断言 Worker 干净启动。生成的 YAML 套件落盘,你可以接着改,不是黑盒。

my-extension smoke tests
  ✓ service worker starts without errors      12ms
  ✓ popup renders                            431ms
  ✓ options page renders                     318ms
  ✓ content script injects on github.com     772ms

  4 passed · 3.8s

一行手写测试都没有。

我自己最受用的一个功能

MV3 Service Worker 的控制台,只在你打开它的 Inspector 期间才存在,Chrome 不替你缓冲。所以后台脚本第一行就抛异常(拼错变量名、少 import 、用了没声明权限的 API ),你看到的是一个空白弹窗,页面控制台干干净净,完全意识不到出过事——Worker 在你开始看之前就已经死了。

pikabo 的做法是在 Worker 启动之前通过 DevTools 协议挂上去,等它抛的时候缓冲区已经在收:

✗ service worker starts without errors
  assertNoConsoleErrors: 2 console error(s):
    [worker] ReferenceError: initialise is not defined
      at chrome-extension://abc…/background.js:4:1

文件行号都在,而这个脚本根本没活到能给你打印一次堆栈。

其他

做不到的也说清楚

只支持未打包目录,不支持商店装的 .crx。浏览器自身 UI (工具栏图标菜单、拼图溢出菜单、原生权限弹窗)点不了,不过这些界面能触发的功能都能从弹窗文档、选项页或 Worker 走到。manifest.commands 里的快捷键没法作为真实按键发送,得通过 Worker 派发处理函数。需要 Node 22+( 20/21 没有全局 WebSocket,Worker 控制台捕获依赖它)。

MIT ,0.1.0 ,刚发出来不久,能用但肯定还有坑。

https://github.com/sonic0002/pikabo

npm 上包名就是 pikabo。如果你也在维护扩展、一直因为没趁手工具把测试往后拖,这个补的正好是那块;有跑不通的场景欢迎来提 issue 。

810 次点击
所在节点    Chrome
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/1235461

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX