В автоматизированном тестировании визуальное подтверждение состояния приложения играет важную роль. Скриншоты позволяют фиксировать ошибки, проверять корректность отображения интерфейса и облегчать анализ проблем при сбоях тестов. В Protractor создание скриншотов интегрируется с фреймворками для отчётности, такими как Jasmine или Mocha, и расширяет возможности стандартных логов.
Для работы со скриншотами в Protractor используется метод
browser.takeScreenshot(). Этот метод возвращает
строку в формате Base64, представляющую изображение
текущего состояния браузера. Чтобы сохранить скриншот в файл, необходимо
использовать модуль fs:
const fs = require('fs');
async function saveScreenshot(filename) {
const png = await browser.takeScreenshot();
fs.writeFileSync(filename, png, { encoding: 'base64' });
}
Ключевые моменты:
takeScreenshot() работает только после полной
загрузки страницы и всех её элементов.Protractor из коробки поддерживает Jasmine. Для включения скриншотов
в отчёт можно использовать Jasmine Reporter, например
jasmine-reporters или
jasmine-spec-reporter.
Пример интеграции с jasmine-reporters:
const JasmineReporters = require('jasmine-reporters');
jasmine.getEnv().addReporter(new JasmineReporters.JUnitXmlReporter({
savePath: 'test-results',
consolidateAll: false
}));
Чтобы автоматически делать скриншот при падении теста:
afterEach(async function() {
if (this.currentTest.failedExpectations.length > 0) {
const testName = this.currentTest.description.replace(/\s+/g, '_');
await saveScreenshot(`screenshots/${testName}.png`);
}
});
Важно учитывать:
mkdir -p screenshots или аналог).Для более наглядных отчётов часто используют Allure. Allure позволяет прикреплять скриншоты к шагам теста, что значительно облегчает визуальный анализ. Пример использования с Jasmine:
const { allure } = require('allure-mocha/runtime');
afterEach(async function() {
if (this.currentTest.state === 'failed') {
const png = await browser.takeScreenshot();
allure.attachment('Скриншот ошибки', Buffer.from(png, 'base64'), 'image/png');
}
});
Преимущества интеграции с Allure:
При использовании Protractor с Selenium Grid или
protractor.conf.js с multiCapabilities, важно
корректно именовать файлы скриншотов:
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
const browserName = browser.capabilities.browserName;
const testName = this.currentTest.description.replace(/\s+/g, '_');
await saveScreenshot(`screenshots/${browserName}_${testName}_${timestamp}.png`);
Рекомендации:
Скриншоты частей страницы: С помощью методов
element(...).takeScreenshot() можно сделать снимок
конкретного элемента, а не всей страницы.
Скриншоты перед и после действия: Для сложных сценариев полезно фиксировать состояние страницы до выполнения критической операции и после, чтобы выявлять визуальные регрессии.
Интеграция с CI/CD: Скриншоты можно автоматически сохранять в артефакты сборки Jenkins, GitLab CI или TeamCity, что облегчает анализ ошибок без локального запуска тестов.
ExpectedConditions) перед снятием скриншота, чтобы
избежать пустых или некорректных изображений.Скриншоты в Protractor обеспечивают визуальный контроль качества, позволяют быстро идентифицировать ошибки интерфейса и интегрируются с любыми системами отчётности. Правильная организация скриншотов и их автоматическое создание делает тестирование более прозрачным и управляемым.