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

无法通过timing方法获取下载事件时长,求Playwright解决办法

测量Playwright下载事件耗时的方案

由于Playwright的Download对象本身没有直接提供获取耗时的timing方法,你可以通过以下两种实用方法实现需求:

方法一:手动记录时间戳计算

在触发下载操作前后分别记录时间戳,等下载完成后计算时间差,这种方式直观易懂:

const downloadPromise = page.waitForEvent("download", { timeout: 35000 });
// 记录下载触发前的时间
const startTime = Date.now();
await page.getByRole("button", { name: "Download" }).click({ timeout: 35000 });
const download = await downloadPromise;
// 等待文件下载完成并保存(确保下载流程彻底结束)
await download.saveAs("./downloaded-file.ext");
// 记录结束时间并计算耗时
const endTime = Date.now();
const downloadDuration = (endTime - startTime) / 1000;
console.log(`下载总耗时:${downloadDuration} 秒`);

方法二:通过关联Request对象获取时序数据

每个Download对象都可以通过request()方法拿到对应的请求实例,而Request对象自带的timing()方法能返回详细的网络请求时序,从中提取下载相关的耗时:

const downloadPromise = page.waitForEvent("download", { timeout: 35000 });
await page.getByRole("button", { name: "Download" }).click({ timeout: 35000 });
const download = await downloadPromise;
// 获取下载对应的请求对象
const request = download.request();
// 获取请求时序数据
const timing = request.timing();
// 计算完整请求到响应结束的耗时(单位:毫秒)
const totalDuration = timing.responseEnd - timing.requestStart;
// 如果只需要文件传输阶段的耗时,用responseEnd - responseStart
const transferDuration = timing.responseEnd - timing.responseStart;
console.log(`请求到响应完成总耗时:${totalDuration / 1000} 秒`);
console.log(`文件传输耗时:${transferDuration / 1000} 秒`);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 09:27:15