剧作家的屏幕截图去哪儿了——我该如何控制它?
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
});
我在 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
});