PAYATHON 2026

Playwright 重试时如何让 Argos 使用同一截图路径?

数据小陈

结论

Playwright 会在重试时使用带 -retryN 后缀的输出目录。根据你提供的配置和现象,Argos 收到的路径因此会不同。目前的信息无法确认 @argos-ci/playwright 6.3.4 是否提供公开的路径自定义选项。testInfo.outputDir 是只读属性,不能通过修改它来去掉后缀;DO_NOT_USE_setMetadataConfig 已经报错,也不应依赖这个内部接口。

如果截图测试不需要重试,可以只对视觉测试关闭重试。这样每个测试只生成一份截图,Argos 也不会收到来自不同重试目录的多个路径。

对视觉测试关闭重试

在视觉测试所在的 test.describe 中将重试次数设为 0:

import { test } from "@playwright/test";

 test.describe.configure({ retries: 0 });

test("visual comparison", async ({ page }) => {
  // 页面操作和断言
  await argosScreenshot(page, "screenshot");
});

示例中的 argosScreenshot 是项目现有的截图包装函数。只需关闭少数测试的重试时,可以把配置放在对应的 test.describe 块内;如果整个视觉测试文件都需要关闭重试,也可以在文件顶层配置。其他端到端测试仍可使用 playwright.config.ts 中的 retries 设置。

如果视觉测试必须重试

先检查安装版本 @argos-ci/playwright 的公开文档和类型定义,确认 reporter 或 argosScreenshot 是否提供了稳定路径或重试路径映射选项。目前的材料无法证明存在这样的公开配置,因此不要假设设置截图名称、root 或修改 reporter 元数据就能覆盖 testInfo.outputPath()。

如果该版本没有公开选项,要保留重试并让 Argos 将结果映射到同一基线,就需要根据该版本实际支持的 reporter 接口实现或调整集成。仅把截图文件复制到相同目录,并不能保证 reporter 会按复制后的路径识别截图。可以先用一个会重试的测试检查 Argos 收到的附件路径,确认路径来源后再决定是否实现自定义 reporter。不要把多次尝试的截图直接覆盖到同一个文件;除非集成明确支持这种处理,否则可能丢失尝试结果或导致上传顺序不确定。

配置注意事项

testInfo.outputDir 是只读属性,不能通过赋值移除重试目录后缀。retries: process.env.CI ? 2 : undefined 表示在 CI 环境中启用两次重试;关闭某个视觉测试套件的重试时,应显式设置 retries: 0。DO_NOT_USE_setMetadataConfig 报错也表明,这条内部调用路径在当前环境不可用,不适合用于路径归一化。

备注:内容仅供参考。