Как записывать на видео тесты селена, работающие без головы внутри докера?

Я запускаю тесты python-selenium внутри докера, используя безголовый firefox.

Во время этих тестов я могу делать скриншоты с помощью метода селена для скриншотов, но могу ли я использовать что-то для «видео» записи виртуального дисплея в течение всего теста (несколько тестовых сценариев с несколькими методами тестирования, с запуском и остановкой многих веб-драйверов).

Итак, как я могу записать на видео полную тестовую сессию?

Дополнение. Я нашел веб-страницу, на которой точно описано, что мне нужно: здесь. К сожалению, я получаю сообщение об ошибке, когда пытаюсь сделать запись. Вот команды, которые я делаю:

xvfb-run --listen-tcp --server-num 44 --auth-file /tmp/xvfb.auth -s "-ac -screen 0 1920x1080x24" python seltest.py &
ffmpeg -f x11grab -video_size 1920x1080 -i 127.0.0.1:44 -codec:v libx264 -r 12 /tmp/behat_1.mp4

и ошибка (для второй команды):

[x11grab @ 0x1d289c0] Cannot open display 127.0.0.1:44, error 1.
127.0.0.1:44: Input/output error

person Alex    schedule 05.07.2018    source источник
comment
это: stackoverflow.com/questions/28655518/?   -  person Kiril S.    schedule 05.07.2018
comment
Это не работает для меня. Выдает ошибку: TypeError: fsPath.existsSync не является функцией   -  person Alex    schedule 06.07.2018
comment
Вы получаете ошибку на первой команде или на второй?   -  person Tarun Lalwani    schedule 09.07.2018
comment
Это для второй команды (команда ffmpeg)   -  person Alex    schedule 09.07.2018


Ответы (2)


Правильные шаги для записи виртуального дисплея с помощью ffmpeg:

xvfb-run --listen-tcp --server-num 44 --auth-file /tmp/xvfb.auth -s "-ac -screen 0 1920x1080x24" python seltest.py &
export DISPLAY=:44
ffmpeg -f x11grab -video_size 1920x1080 -i :44 -codec:v libx264 -r 12 video.mp4
person Alex    schedule 10.07.2018

Как указано в статье, есть несколько вещей, которые можно попробовать. :

Вы можете исправить ошибку «не удается открыть дисплей», выполнив процедуру xhost:

  1. Разрешить клиентам подключаться с любого хоста с помощью xhost+. Выполните следующую команду, чтобы отключить контроль доступа, с помощью которого вы можете разрешить клиентам подключаться с любого хоста.

    $ xhost + 
    access control disabled, clients can connect from any host
    
  2. Включить переадресацию X11 При выполнении ssh используйте параметр -X, чтобы включить пересылку X11.

    $ ssh username@hostname -X 
    

    Включите доверенную переадресацию X11 с помощью параметра -Y,

    $ ssh username@hostname -Y
    
  3. Открытие приложений с графическим интерфейсом на этом хосте После открытия ssh-соединения с удаленным хостом, как описано выше, вы можете открыть любое приложение с графическим интерфейсом, которое откроет его без каких-либо проблем.

    Если вы по-прежнему получаете сообщение об ошибке «не удается открыть дисплей», установите переменную DISPLAY, как показано ниже.

    $ export DISPLAY='IP:0.0' 
    

    Примечание. IP – это IP-адрес локальной рабочей станции, на которой должно отображаться приложение с графическим интерфейсом.

ИЗМЕНИТЬ:

hostname:n.m

Где hostname — это сетевое имя хоста, дополненное доменным именем при необходимости (или используйте IP-адрес напрямую); n — номер дисплея на этом хосте (обычно 0); а m — номер экрана на этом хосте (обычно 0).

Поэтому попробуйте заменить 127.0.0.1:44 на 127.0.0.1:n.m. Если у вас несколько дисплеев, попробуйте выяснить, какой из них будет работать, передав 127.0.0.1:0.0, 127.0.0.1:0.1, 127.0.0.1:1.0...

Также проверьте, действительно ли размеры экрана 1920x1080.

person Andrei Suvorkov    schedule 09.07.2018
comment
Эти предложения по-прежнему не работают. Также я не могу попробовать вариант 2, так как пробую пример на той же локальной машине. Я вообще не пользуюсь ssh! Для предложения 3 я использовал export DISPLAY='localhost:0.0'... - person Alex; 09.07.2018
comment
Я не могу попробовать все возможные комбинации. Я пробовал некоторые, но у меня нет успеха. Сообщение об ошибке по-прежнему Cannot open display 127.0.0.1:44, error 1. 127.0.0.1:44: Input/output error - person Alex; 10.07.2018
comment
Пожалуйста, попробуйте 127.0.0.1:10.0 я читал, что это часто помогает - person Andrei Suvorkov; 10.07.2018