如何在Playwright的toHaveText中匹配数组部分值(忽略时间戳)
解决Playwright表格日期时间戳忽略问题
方案1:正则表达式直接匹配(推荐)
Playwright的toHaveText支持在数组参数中传入正则表达式,可以直接对带时间戳的日期列做模糊匹配,不用拆分定位每个<td>。
修改代码如下:
const tableRowData = this.page.locator(`//table[@class="myTableClass"]//td`); await expect(tableRowData).toHaveText([ 'John', 'Smith', 'Ohio', /Aug 22, 2023.*/ // 匹配以目标日期开头的任意文本,忽略后续时间戳 ]);
只要单元格文本以指定日期开头,不管后面的时分秒、时区是什么,都会匹配成功。
方案2:自定义匹配函数(提升可读性)
如果需要复用这种日期匹配逻辑,可以写一个简单的自定义函数:
// 自定义函数:校验文本是否以目标日期开头 function startsWithDate(expectedDate) { return (text) => text.startsWith(expectedDate); } // 使用示例 await expect(tableRowData).toHaveText([ 'John', 'Smith', 'Ohio', startsWithDate('Aug 22, 2023') ]);
这种方式可读性更强,适合需要多次校验日期的场景。
额外提示
- 正则里的日期格式要和页面渲染的完全一致(比如月份缩写、逗号、空格位置)
- 如果日期格式有变动可能(比如数字格式
8/22/2023),可以调整正则为通用格式,比如/\d{1,2}\/\d{1,2}\/\d{4}.*/
内容的提问来源于stack exchange,提问作者Andy Giebel
相关产品推荐
相关产品推荐

