如何在Playwright中断言错误?TimeoutError断言问题求助
解决Playwright断言异步抛出TimeoutError的问题
问题根源
你当前使用的expect(async () => await hiddenLayersPage.clickGreenButton()).toThrow()无法捕获异步错误,因为Playwright中异步函数的错误是通过Promise拒绝抛出的,普通的toThrow()只适用于同步函数的错误捕获,必须使用rejects链式调用来处理异步断言。
修正后的测试代码
// 首次点击绿色按钮 await hiddenLayersPage.clickGreenButton(); // 断言第二次点击会抛出错误(通用写法) await expect(async () => { await hiddenLayersPage.clickGreenButton(); }).rejects.toThrow();
如果需要更精确地断言是TimeoutError,可以导入Playwright的错误类型并针对性判断:
import { TimeoutError } from '@playwright/test'; // ... await expect(async () => { await hiddenLayersPage.clickGreenButton(); }).rejects.toBeInstanceOf(TimeoutError);
补充说明
- 当绿色按钮被上层元素遮挡时,
click()方法会因为无法完成交互而触发超时错误,这正是你需要断言的预期结果。 - 使用
rejects是Playwright处理异步函数错误断言的标准方式,它会等待异步函数执行并捕获Promise的拒绝状态。
内容的提问来源于stack exchange,提问作者aandrei1991
相关产品推荐
相关产品推荐

