You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:40:38