使用 Playwright 自动化测试同意横幅:实操指南
为什么要自动化同意测试
人工同意检查很容易被跳过,也很容易出错。营销部门新增的标签、主题更新或重构后的脚本加载器,都可能悄悄地在同意之前就触发追踪器,直到客户或监管机构发现,才会有人注意到。自动化浏览器测试把“我们的横幅还正常吗”这个问题变成每次发布都会运行的检查。Playwright 非常适合,因为它控制真实的浏览器、可以拦截网络请求,并提供全新、相互隔离的浏览器上下文。
测试上下文
每个测试都应从干净的浏览器上下文开始,没有 Cookie,也没有本地存储。这模拟的是首次访问的访客。为每个测试创建一个新的上下文,而不是复用页面,否则一个测试存储的选择会泄漏到下一个测试。
测试 1:同意之前什么都不触发
从页面开始加载的那一刻起,监听每一个网络请求。加载页面,等待其空闲,且不要触碰横幅。然后,将请求与你维护的追踪器域名列表(例如分析、广告和社交像素)进行比对。只要有任何请求发往列表中的域名,测试就失败。同时从上下文中读取 Cookie 列表,只要存在任何非必要的 Cookie,就判为失败。
测试 2:拒绝使一切保持关闭
- 在全新的上下文中加载页面。
- 点击横幅中的拒绝控件。
- 导航到另外两三个页面,其中包括一个带有嵌入式媒体的页面。
- 断言没有发出追踪器请求,也没有设置非必要的 Cookie。
- 重新加载并断言横幅保持隐藏,且选择被保留。
测试 3:接受后应启用的内容确实启用
点击接受,并断言预期的标签现在会触发,例如你的分析请求。这是为了防范相反的失败:横幅记录了同意却从不放行脚本,悄悄地让你损失数据和收入。
测试 4:细化的选择
打开偏好设置层,只启用一个目的并保存。断言与该目的相关联的标签会触发,而与其他目的相关联的标签不会触发。保留一个从目的到预期域名的小型映射文件,让测试读起来清晰,也便于更新。
测试 5:撤回
接受,然后通过你的持久链接重新打开设置并撤回。断言随后对追踪器的请求停止,且存储的同意状态反映了这一变化。注意,已设置的 Cookie 可能需要被显式移除,所以请确定你的政策是什么并对其进行测试。
测试 6:信号
如果你使用 Google Consent Mode,请在每次选择前后读取页面上下文中的数据层,并断言同意状态的值相符:默认为 denied,访客接受的类别为 granted。如果你使用 TCF 字符串,请通过 TCF API 读取,并断言它在选择之后存在并反映了该选择。
保持测试可靠
- 使用稳定的选择器,例如测试属性或无障碍角色,而不是会随设计更新而变化的 CSS 类。
- 等待明确的条件,而不是固定的延迟。
- 针对与生产环境标签设置相同的预发布副本运行测试。
- 不仅在部署时,也按计划运行套件的精简版本,因为第三方脚本的变化并不依赖你的发布。
- 通过设置地理位置或使用 CMP 提供的区域覆盖功能,测试你服务的主要地区。
FlexyConsent 的定位
FlexyConsent 支持 IAB TCF 2.4、IAB GPP v1.1 和 Google Consent Mode v2,因此你在测试中断言的信号是可以从页面读取的标准信号。横幅提供 58 种语言;如果你服务多种语言,请加入一个至少加载一个非英语版本的测试。
要点总结
- 每个测试使用一个全新的浏览器上下文,以模拟首次访问的访客。
- 对网络请求和 Cookie 进行断言,而不仅仅看横幅的外观。
- 覆盖四条路径:无交互、拒绝、接受和撤回。
- 同时检查数据层或 TCF API 中的同意信号。
- 在发布时和按计划运行测试套件,以捕捉第三方脚本带来的偏差。