Запись видео с помощью protractor-video-reporter

Привет.

Использую для автоматизированного тестирования protractor. Запуск идет под Windows.
Сейчас стоит задача видеозаписи прохода тестов в разных браузерах. Желательно, чтобы можно было настраивать запись по следующим параметрам:

  1. Полная запись всего тестового набора
  2. Отдельная запись упавших тестов
  3. Отдельная запись каждого сценария
  4. Включение / отключение субтитров

Все это умеет библиотека protractor-video-reporter.
Но вот никак не могу ее успешно прикрутить. Максимум что получается – это полный файл с субтитрами и пустой видеофайл.

Сделано:
1.вначале была проблемы запуска тестов, они валились с ошибкой, но это решение помогло: Can't run under Windows · Issue #1 · tomyam1/protractor-video-reporter · GitHub
2. прописал ffmpeg в PATH
3. скачал последний ffmpeg и указал его в параметрах protractor-video-reporter
ffmpegCmd: “d:\FFmpeg\ffmpeg.exe”
4. пробовал менять формат сохраняемого видеофайла

Заранее спасибо за ответы.

PS Если есть другие варианты реализации моей задачи, буду благодарен из услышать.

Добрый день, использовал эту бибилиотеку, на macOS и linux всё отлично работало, достаточно было установить ffmpeg. Возможно на видне нужно поиграться с параметрами ffmpegArgs и установив допольнительные кодеки.
Были ещё проблемы с записью в отдельные файлы, решал дл себя, поправив исходный код и cделал PR на это дело. Щас уже вроде пофиксили в новой версии, добавив переменную singleVideoPath, можно либо свою функцию передавать для формирования имени файла, либо использовать full.
По сути вам нужно сделать настраиваемыми эти опции в конфиге для репортера:
singleVideo, createSubtitles, saveSuccessVideos. Можете передавать их через перменные окуржения при запуске протрактора либо использовать таск-раннер grunt или gulp для которых уже есть расширения, где можно указывать переменные окружения grunt-env или по типу такого.

var videoReporter = new VideoReporter({
  baseDirectory: config.resultFolder + '/videos/',
  singleVideoPath: 'full',
  singleVideo: process.env.SINGLE_VIDEO || {some default value},
  saveSuccessVideos: process.env.SAVE_ALL_VIDEOS || {some default value},
  createSubtitles: process.env.SUBTITLES || {some default value}
  ffmpegArgs: [
    '-y',
    '-r', '30',
    '-f', 'x11grab',
    '-s', '1920x1200',
    '-i', process.env.DISPLAY || ':21.0',
    '-g', '300',
    '-vcodec', 'qtrle']
  });

для java есть много video recorder plugin вариантов начиная с org.monte.screenrecorder.ScreenRecorder

Java

  • для Protractor существует несколько портов на Java

то же справедливо для .net

Там же в коде x11grab зашит. Вас это не смутило? Для винды наиболее вменяемым аналогом является gdigrab.

Ну и еще один момент касается остановки видео записи. В отличие от того же linux, на винде вы просто так не сможете отправить INT signal для корректной финализации процесса. Тут нужно отправлять ctrl + c сигнал и ждать. В зависимости от качества записи / доступных ресурсов / кол-ва потоков и т.п., это время может значительно отличаться. Т.е. если вы планируете сразу после завершения теста что-то делать с видео записью, придется подождать полного завершения ffmpeg процесса(-ов). Если только соответствующий код не поддерживает асинхронного режима.

с monte , проверено - работает ( под windows).

У автора JS стек. А так, Monte неплох, но пишет в avi. Его не встроишь в тот же Allure, к примеру (кроме как обычной линкой).

Там же в коде x11grab зашит. Вас это не смутило? Для винды наиболее вменяемым аналогом является gdigrab

Вроде как не зашит. Запускают же как-то protractor-video-reporter на Windows.

Для винды наиболее вменяемым аналогом является gdigrab.

Так как не получается сторонние библиотеки, думаю пойти путем прямого вызова gdigrab. В Before передавать в консоль команду запуска записи, а в After команду окончания.

Тут нужно отправлять ctrl + c сигнал и ждать.

Подскажите как это сделать?

для Protractor существует несколько портов на Java

Не сталкивался с таким и не совсем понимаю как это работает. Можно установить эти библиотеки и каким-то образом использовать Java код рядом с JS?

Вот таким образом на разных платформах можно писать:

Так завершать:

Сам cmd тул для отправки ctrl + c сигнала можно скачать тут. Ему достаточно передать ffmpeg PID в качестве аргумета.

в моем форке описано… https://github.com/caarlos0/jProtractor/README.md
(Using with existing Java projects)
мы поленились с юнит тестами и не попали на maven central - то есть чтобы jprotractor.jar искользовать надо его собрать . пробуйте. пишите если проблемы…

мой форк - GitHub - sergueik/jProtractor: An AngularJS/Protractor implementation for Java Selenium API

кстати я про это писал на codeproject - Developing Protractor tests in C# (or Java) - CodeProject
и хабре - Работа с AngularJS Protractor из C # и Java / Habr

смысл так страдать, есть докеры уже умеют писать видео. Все эти рекордеры можно выкинуть в топку

1 лайк

Ну тут имелось в виду, чтобы делать видео по упавшим тестам или по некоторым тестам, которые интересуют по типу вашего video-recorder’a, вот было бы очень круто иметь такой для js-стека.

а кстати объясните пожалуйста в чем преимущество docker решения перед vagrant / virtualbox если хост на windows или на osx ? docker же создает virtualbox инстанс с linux не проще ли сразу в нем пускать java + x server + browser + что по душе стек ?

Докер не создает виртуабокс инстанс, почитайте как работает докер - станет понятно

1 лайк

как docker на linux работает вроде понятно. то есть в ваше конфигурации VirtualBox c Linux a.k.a. runDocker base рабоает постоянно - ?