В Playwright существует встроенная возможность делать скриншоты страниц или отдельных элементов. В ряде случаев требуется скрыть или замаскировать чувствительные данные — например, пароли, токены, личные данные пользователей. Для этого используются функции маскирования областей при захвате скриншота.
Основная функция для снятия скриншота в Playwright —
page.screenshot() для всей страницы и
elementHandle.screenshot() для конкретного элемента.
Пример снятия скриншота страницы:
await page.screenshot({ path: 'fullpage.png', fullPage: true });
Скриншот отдельного элемента:
const element = await page.$('#user-profile');
await element.screenshot({ path: 'profile.png' });
maskPlaywright предоставляет опцию mask для замены
содержимого области на однотонный прямоугольник. Это особенно важно при
работе с динамическими или конфиденциальными данными.
Синтаксис для mask:
await page.screenshot({
path: 'masked.png',
fullPage: true,
mask: [
await page.$('#password'),
await page.$('.credit-card')
]
});
В данном примере все элементы с селекторами #password и
.credit-card будут замаскированы серым прямоугольником по
размеру элемента.
Особенности маскирования:
mask принимает массив элементов
(ElementHandle) или массив прямоугольников
({x, y, width, height}).page.$eval или генерацию селекторов по данным.Иногда требуется скрыть области, не привязанные к конкретному элементу. Для этого используется объект с координатами:
await page.screenshot({
path: 'masked-area.png',
fullPage: true,
mask: [
{ x: 50, y: 100, width: 200, height: 50 },
{ x: 300, y: 400, width: 150, height: 100 }
]
});
Каждый объект задаёт прямоугольник для маски. Цвет по умолчанию — серый, но можно изменять его через глобальные стили страницы перед снятием скриншота.
Для изменения цвета маски Playwright не предоставляет прямую опцию. Однако цвет можно изменить через временную модификацию стиля элементов перед снятием скриншота:
await page.$$eval('.sensitive', elements => {
elements.forEach(el => el.style.backgroundColor = 'black');
});
await page.screenshot({
path: 'custom-mask.png',
fullPage: true
});
После скриншота стили можно сбросить при необходимости.
В случае динамического контента (например, модальные окна,
уведомления) важно убедиться, что элементы существуют перед
маскированием. Рекомендуется использовать
waitForSelector:
const sensitiveElement = await page.waitForSelector('#token', { state: 'visible' });
await page.screenshot({
path: 'dynamic-mask.png',
mask: [sensitiveElement]
});
Это гарантирует, что маска будет наложена корректно, даже если элемент появляется с задержкой.
Для тестов, где требуется сравнение скриншотов
(visual regression testing), маскирование помогает избежать
ложных срабатываний из-за динамических данных:
await page.screenshot({
path: 'baseline.png',
fullPage: true,
mask: [
await page.$('.timestamp'),
await page.$('.dynamic-value')
]
});
Таким образом, только значимые части страницы сравниваются между тестовыми прогонками, а переменные или чувствительные данные скрыты.
fullPage скриншотах.Маскирование областей на скриншотах в Playwright обеспечивает безопасное сохранение и проверку UI без утечки конфиденциальных данных, а также стабильность визуальных тестов при работе с динамическим контентом.