Protractor изначально не предоставляет встроенной функции записи видео тестов, поэтому для фиксации видеопотока используются внешние инструменты, такие как ffmpeg, protractor-video-reporter, browserstack, selenium-video-reporter или кастомные скрипты на Node.js.
Для начала необходимо убедиться, что окружение подготовлено:
npm install -g protractor
# Установка на Ubuntu
sudo apt install ffmpeg
# Установка на MacOS
brew install ffmpeg
npm install --save-dev protractor-video-reporter
Конфигурационный файл protractor.conf.js дополняется
настройками для видео. Основные моменты:
const VideoReporter = require('protractor-video-reporter');
exports.config = {
framework: 'jasmine',
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['tests/**/*.spec.js'],
onPrepare: () => {
jasmine.getEnv().addReporter(new VideoReporter({
baseDirectory: 'videos/', // Папка для сохранения видео
singleVideo: false, // Разделение видео по тестам
videoOptions: {
fps: 25,
videoCodec: 'libx264',
videoBitrate: 1024
}
}));
}
};
Ключевые моменты конфигурации:
true, все тесты
объединяются в одно видео, если false — создаётся отдельный
файл на каждый тест.Protractor-video-reporter запускает запись автоматически при старте теста и останавливает её после завершения. Однако при использовании кастомных подходов через ffmpeg можно управлять записью программно:
const { exec } = require('child_process');
let ffmpegProcess;
exports.config = {
onPrepare: () => {
ffmpegProcess = exec('ffmpeg -y -video_size 1920x1080 -f x11grab -i :0.0 videos/test.mp4');
},
onComplete: () => {
ffmpegProcess.kill('SIGINT'); // Завершение записи
}
};
Особенности подхода через ffmpeg:
Для фреймворков Jasmine и Mocha video-репортеры часто используют хуки тестов:
Пример с Jasmine:
describe('Тест с видео', () => {
beforeAll(() => {
browser.video.start(); // Кастомный метод start
});
it('Проверка страницы', async () => {
await browser.get('https://example.com');
expect(await browser.getTitle()).toEqual('Example Domain');
});
afterAll(() => {
browser.video.stop(); // Кастомный метод stop
});
});
Важно: для работы таких методов необходимо
расширение объекта browser через глобальные утилиты.
Рекомендуется использовать динамические имена файлов, содержащие дату, время и имя теста, чтобы видео не перезаписывались:
const path = require('path');
const fs = require('fs');
function generateVideoName(testName) {
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
return path.join('videos', `${testName}_${timestamp}.mp4`);
}
Такой подход облегчает поиск видео и автоматизацию CI/CD процессов.
Запись видео особенно полезна при запуске тестов в Jenkins, GitHub Actions, GitLab CI.
Видеофиксация тестов в Protractor позволяет не только видеть поведение интерфейса, но и ускоряет анализ проблем в автоматизации, снижает количество пропущенных ошибок и делает отчеты более наглядными. Она тесно интегрируется с существующими инструментами тестирования и CI/CD, при этом требует аккуратной настройки конфигурации и процессов записи.