如何在player中针对某个预定义的时间戳运行测试



我正在尝试运行一个剧作家测试,由于某些内容旁边的页面上发布的时间戳(例如3小时前、1天前、5天前(与当前时间戳不匹配,该测试一直未能通过屏幕截图匹配,而当前时间戳已更改,因为测试是在获取初始基线屏幕截图后运行的。

在捕捉基线屏幕截图时,我可以用什么方法存储当前日期和时间,并告诉剧作家这始终是我想在所有测试中进行比较的时间戳?

在我看来,只要你不忽略屏幕截图中的日期比较,他们就会不断抛出错误。我们可以说,考虑到你的快照只是一个瞬间。因此,如果您的基线快照(您将当前状态与之进行比较的快照(包含文本";5天前";,除非更新快照,否则这是不可更改的,但整个比较快照都是为了比较当前状态和以前的状态,以检查是否存在不必要的回归,因此每次更新此测试的快照没有多大意义。

在我看来,你应该忽略给定的文本。一个很好的方法是使用选项";掩模";包含在版本1.20中。所以想象一下,你想忽略剧作家repo主页上的明星数量。你可以这样做:

test('homepage', async({ page }) => {
await page.goto('https://playwright.dev/');
const stars = page.locator('.gh-count');
expect(await page.screenshot({ mask: [stars] })).toMatchSnapshot();
});

这将拍摄剧作家主页的快照,用星星数掩盖元素,并将元素粘贴到一个粉红色的盒子中。这将防止快照失败,无论回购获得多少颗星。

如果出于任何原因,您无法将版本更新到1.20,您也可以"假的";使用evaluate((函数的元素,从在拍摄快照之前将文本更改为固定文本(使用innerHTML属性(,甚至使用setAttribute属性使元素本身消失以更改其可见性。这一切都是为了在这方面发挥创意。

我知道这个问题已经过时了,但也许有人会发现答案很有用。我们围绕这个问题所做的是注入css来隐藏时间戳:

await page.addStyleTag({
content: `
.timestamp { display: none !important; }
`})

您只需要找到时间戳的选择器,并使用此代码来隐藏它

最新更新