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

为何Playwright Reporter不等待异步函数执行完成?

问题解决:Playwright自定义Reporter中exec命令被跳过的问题

问题原因

Playwright的Reporter生命周期方法(比如onTestEnd)如果包含异步操作,必须返回Promise让Playwright等待操作完成。你原来的代码里exec用的是回调模式,而onTestEnd是同步方法,Playwright不会等待回调执行,直接结束流程,导致exec的逻辑被跳过。

解决方案

把exec转换成Promise形式,将onTestEnd改为异步方法并等待命令执行完成:

修改后的代码

const { exec } = require('child_process');
const { promisify } = require('util');
// 将exec转换为支持Promise的版本
const execPromise = promisify(exec);

class CustomPDFReporter {
  async onTestEnd(test, result) {
    const cmd = `C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe --quiet --print-media-type ...`;

    try {
      const { stdout, stderr } = await execPromise(cmd);
      if (stderr) {
        console.error(`Error output: ${stderr}`);
      }
      console.log("Generation successful!");
      console.log(`Command Output: ${stdout}`);
    } catch (error) {
      console.error(`Error executing command: ${error.message}`);
    }
  }
}

module.exports = CustomPDFReporter;

关键改动说明

  • 使用util.promisify把回调式的exec转为Promise兼容的函数,这样可以用await等待命令执行完成。
  • 给onTestEnd添加async关键字,让它返回Promise,Playwright会自动等待这个Promise完成后再继续。
  • 用try/catch替代原来的回调错误处理,更符合异步/await的代码风格。

内容的提问来源于stack exchange,提问作者Branislav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:32:03