具有 AJAX 负载的 Playwright 步骤的输出执行时间

Output execution time for a Playwright step with AJAX payload

我试图在我的测试运行时将一些关键测量值转储到控制台,而不是从报告器输出中获取它们,但我看不到如何抓住执行最后一步所花费的时间。这是基于 request.timing() 文档的简化版本,但我不认为我正在做的事情被归类为请求:

const { test, expect } = require('@playwright/test');

test('ApplicationLoadTime', async ({ page }) => {

  // Wait for applications to load
  await page.waitForSelector('img[alt="Application"]');

  // Not working! - get time for step execution
  const [fir] = await Promise.all([
    page.click('text=Further information requested'),
    page.waitForSelector('img[alt="Application"]')
  ]);
  console.log(fir.timing());

});

单击“请求的更多信息”会导致根据后台调用 AJAX 修改页面,应用程序 img 的外观告诉我它已完成。这是可能的还是我需要依赖报告?

fir 在您的代码中将成为 undefined,因为 page.click() 不会 return 任何东西。您需要等待您感兴趣的时间请求,使用 page.waitForEvent('requestfinished') or waitForNavigation:

const { test, expect } = require('@playwright/test');

test('ApplicationLoadTime', async ({ page }) => {

  // Wait for applications to load
  await page.waitForSelector('img[alt="Application"]');

  const [fir] = await Promise.all([
    // Wait for the request
    page.waitForEvent('requestfinished', r => r.url() == '<url of interest>'),
    page.click('text=Further information requested'),
    page.waitForSelector('img[alt="Application"]')
  ]);
  console.log(fir.timing());

});