#javascript #e2e-testing #playwright
#javascript #e2e-тестирование #playwright
Вопрос:
Каков хороший способ сделать тест скриншотов с помощью playwright?
Если я правильно понимаю, мне нужно сделать скриншот, как показано ниже:
it('Some test', async () => {
page.screenshot({ path: 'screenshot.png' });
}
Но как я могу сравнить его с эталонными скриншотами?
Если я что-то пропустил в документах, дайте мне знать, пожалуйста
Комментарии:
1. Вы пытаетесь выполнить регрессионные тесты, сравнивающие изображения?
2. ДА. В результате я хотел бы получить что-то вроде этого: npmjs.com/package/jest-image-snapshot Я думаю, это возможно, но у меня есть идея, как мне нужно это сделать
Ответ №1:
судя по тому, что команда Playwright начала разрабатывать собственный тестовый раннер, который может сравнивать скриншоты:
playwright-test#визуальные сравнения
import { it, expect } from "@playwright/test";
it("compares page screenshot", async ({ page, browserName }) => {
await page.goto("https://stackoverflow.com");
const screenshot = await page.screenshot();
expect(screenshot).toMatchSnapshot(`test-${browserName}.png`, { threshold: 0.2 });
});
они не планируют добавлять такую функциональность непосредственно в Playwright
Комментарии:
1. У меня был хороший опыт работы с playwright-test, но для других, пожалуйста, обратите внимание: «Бегун теста Playwright доступен в режиме предварительного просмотра, и могут произойти незначительные критические изменения». В API довольно много изменений, и это может вызвать некоторые накладные расходы на обслуживание.
Ответ №2:
Playwright toHaveScreenshot
и toMatchSnapshot
отлично подходят, если вы хотите сравнить текущий скриншот со скриншотом из предыдущего тестового запуска, но если вы хотите сравнить два скриншота, которые у вас есть в качестве буферов в памяти, вы можете использовать getComparator
метод, который Playwright использует за кулисами:
import { getComparator } from 'playwright-core/lib/utils';
await page.goto('my website here');
const beforeImage = await page.screenshot({
path: `./screenshots/before.png`
});
//
// some state changes implemented here
//
const afterImage = await page.screenshot({
path: `./screenshots/after.png`
});
const comparator = getComparator('image/png');
expect(comparator(beforeImage, afterImage)).toBeNull();
Преимущество использования getComparator
заключается в том, что оно нечетко совпадает, и вы можете установить пороговое значение того, сколько пикселей может отличаться. Если вы просто хотите проверить, что PNG-файлы точно идентичны, очень простой способ проверить равенство между двумя скриншотами:
ожидайте(Buffer.compare(beforeImage, afterImage)) .toEqual(0)
Однако будьте осторожны — этот более простой метод ненадежен и чувствителен к разнице в один пиксель при рендеринге (например, если какие-либо анимации / переходы не завершены или если есть различия в сглаживании).