剧作家的屏幕截图去哪儿了——我该如何控制它?

Where are playwright screenshots going - and how can I control this?

我在 Windows (11) 上进行了非常基础的剧作家 (v1.18.1) 测试:

import { test, expect } from '@playwright/test';

test('test', async ({ page }) => {
  await page.goto('http://whatsmyuseragent.org/');
  //await page.screenshot({ path: `./tests/tmp/screenshots/whats.my.ua.${project:name}.png` });
  await page.screenshot();
});

当我 运行 这个 - 它说有效

Running : cd C:\playwright\tests && npx playwright test whats_my_user_agent.spec.ts --reporter=list

Running 5 tests using 3 workers

   ok   [webkit] › whats_my_user_agent.spec.ts:3:1 › test   (3s) 
   ok   [firefox] › whats_my_user_agent.spec.ts:3:1 › test   (4s) 
   ok   [chromium] › whats_my_user_agent.spec.ts:3:1 › test   (5s) 
   ok   [Mobile Chrome] › whats_my_user_agent.spec.ts:3:1 › test   (2s) 
   ok   [Mobile Safari] › whats_my_user_agent.spec.ts:3:1 › test   (2s) 


   5 passed   (8s) 

但我找不到屏幕截图文件的迹象 - 它们在哪里 [没有提供任何提示的反馈]。另外 - 有没有办法控制保存的文件名(包括项目名称,这样我就不会相互保存 5 个 png 文件)。

screenshot 函数始终将屏幕截图作为 buffer 返回。如果您不传递 path 获取该屏幕截图的唯一方法是通过缓冲区。

据我所知,如果您取消注释指定要存储屏幕截图的路径的行,您应该可以在那里找到它,例如:

import { test, expect } from '@playwright/test';

test('testing screenshot path', async ({ page }) => {
    await page.goto('https://playwright.dev/');
    await page.screenshot({ path:`./screenshots/screenshot.png` });
});

应该会导致您在项目根目录中名为 'screenshots' 的文件夹中获得名为 'screenshot.png' 的网站的屏幕截图。如果没有该名称的文件夹,将创建它。

至于你的问题,因为对于你正在 运行 宁的每个项目,这将 运行 相同的步骤(在特定路径中保存具有特定名称的屏幕截图),你的屏幕截图将被覆盖,只留下您上一个项目的屏幕截图 运行。如果您希望存储所有屏幕截图,或者特别是一个项目的屏幕截图(尽管 运行 多个项目),您可以使用 testInfo。假设您只想在 Chromium 中存储您正在 运行 的项目的屏幕截图,尽管检查所有其他项目中的步骤;你可以这样做:

test('testing chromium screenshots', async ({ page }, testInfo) => {
    await page.goto('https://playwright.dev/');
    if (testInfo.project.name === 'chromium') {
        await page.screenshot({ path:`./screenshots/${testInfo.title}.png` });
    }
});

这将在项目根目录的文件夹 'screenshots' 中存储名为 'testing chromium screenshots' 且扩展名为 .png 的屏幕截图,使用 chromium 进行测试,同时检查您在每个其他项目中的测试通过情况可能是 运行宁。

希望所有这些对您有所帮助。

好的 - 我发现了方法 - 我需要在异步声明中包含 workerInfo,然后我可以在屏幕截图调用中引用它:

import { test, expect } from '@playwright/test';

test('test', async ({ page }, workerInfo) => {              <----------- added workerInfo
      await page.goto('http://whatsmyuseragent.org/');
      await page.screenshot({ path: "./tests/tmp/screenshots/whats.my.ua."+workerInfo.project.name+".png" });
      //                                                                   ^^ referenced it with this
});