无法通过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
相关产品推荐
相关产品推荐

