Региональные снимки экрана в WebdriverIO
В процессе тестирования веб-приложений часто возникает необходимость делать скриншоты, чтобы зафиксировать состояние страницы в определённый момент времени. В WebDriverIO есть удобный механизм для создания скриншотов, включая возможность делать снимки только части страницы — региональные скриншоты. Это может быть полезно в ситуациях, когда нужно зафиксировать изменения в конкретной области интерфейса, а не на всей странице.
WebdriverIO предоставляет функцию для создания снимков экрана, которая обычно используется для захвата всей страницы. Однако при необходимости можно ограничить область захвата, сделав скриншот только определённого элемента или области. Для этого можно использовать методы, позволяющие указать координаты и размеры региона для съёмки.
Для того чтобы создать снимок экрана только части веб-страницы, необходимо:
const element = await $('#some-element'); // Найти нужный элемент
const rect = await element.getRect(); // Получить координаты и размеры элемента
await browser.saveScreenshot('./region-screenshot.png', {
x: rect.x,
y: rect.y,
width: rect.width,
height: rect.height
});
В данном примере:
$('#some-element') — находит элемент, с которого будет
сделан скриншот.getRect() — метод, возвращающий объект с координатами и
размерами элемента, включая его x, y,
width и height.saveScreenshot() — функция, создающая скриншот, с
указанием параметров для ограниченной области.Параметры x, y, width, и
height указывают точку начала области и её размеры, что
позволяет захватить именно ту часть экрана, которая соответствует
выбранному элементу.
scrollIntoView(), который прокручивает страницу до нужного
элемента перед созданием скриншота.const element = await $('#some-element');
await element.scrollIntoView(); // Прокручиваем страницу до элемента
const rect = await element.getRect();
await browser.saveScreenshot('./scrolled-region-screenshot.png', {
x: rect.x,
y: rect.y,
width: rect.width,
height: rect.height
});
Если нужно сделать снимок нескольких элементов одновременно или части страницы с разными элементами, можно использовать методы, позволяющие захватить более сложные области. Например, можно взять снимок нескольких элементов, комбинируя их координаты или делая снимки нескольких частей экрана.
const element1 = await $('#first-element');
const element2 = await $('#second-element');
const rect1 = await element1.getRect();
const rect2 = await element2.getRect();
// Пример создания комбинированного региона
const x = Math.min(rect1.x, rect2.x);
const y = Math.min(rect1.y, rect2.y);
const width = Math.max(rect1.x + rect1.width, rect2.x + rect2.width) - x;
const height = Math.max(rect1.y + rect1.height, rect2.y + rect2.height) - y;
await browser.saveScreenshot('./combined-region-screenshot.png', { x, y, width, height });
Этот пример вычисляет минимальные и максимальные значения координат двух элементов, чтобы создать комбинированную область, которая охватывает оба элемента.
Региональные снимки экрана полезны в различных ситуациях:
WebdriverIO также поддерживает создание снимков экрана с прозрачным
фоном. Это может быть полезно, если нужно сделать снимок с выделением
только самого элемента без фонового контента. Для этого используется
опция transparent_background.
await browser.saveScreenshot('./transparent-region-screenshot.png', {
x: rect.x,
y: rect.y,
width: rect.width,
height: rect.height,
transparent_background: true
});
Региональные снимки экрана — это мощный инструмент в арсенале автоматизатора тестирования, который позволяет точечно захватывать интересующие области страницы. В WebdriverIO этот функционал реализован достаточно гибко, что даёт возможность работать как с отдельными элементами, так и с их комбинациями. Использование региональных скриншотов помогает повысить точность тестирования и минимизировать объём данных, которые нужно анализировать, что особенно важно в крупных проектах с большим количеством тестов.