How to video-record selenium tests running headless inside a docker?

拈花ヽ惹草 提交于 2020-01-12 14:01:51

问题


I am running python-selenium tests inside a docker using a headless firefox.

During these tests I am able to make screenshots with the selenium method for screenshots - but can I use something to 'video' record the virtual display during the whole test (several test scripts with several test methods, with many webdrivers started and stopped).

So how can I video-record a complete test session?

Addendum: I have found a webpage that describes exactly what I need: here. Unfortunately I get an error when I try to do the recording. Here are the commands I am doing:

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

and the error is (for the second command):

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

回答1:


The correct steps to record the virtual display with ffmpeg are:

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



回答2:


As the article provides, there are couple things to try:

You can fix the “cannot open display” error by following the xhost procedure:

  1. Allow clients to connect from any host using xhost+ Execute the following command to disable the access control, by which you can allow clients to connect from any host.

    $ xhost + 
    access control disabled, clients can connect from any host
    
  2. Enable X11 forwarding While doing ssh use the option -X to enable X11 forwarding.

    $ ssh username@hostname -X 
    

    Enable trusted X11 forwarding, by using the -Y option,

    $ ssh username@hostname -Y
    
  3. Open GUI applications in that host After opening ssh connection to the remote host as explained above, you can open any GUI application which will open it without any issue.

    If you still get the “cannot open display” error, set the DISPLAY variable as shown below.

    $ export DISPLAY='IP:0.0' 
    

    Note: IP is the local workstation’s IP where you want the GUI application to be displayed.

EDIT:

hostname:n.m

Where hostname is the network hostname, qualified with domain name as needed (or use the IP address directly); n is the display number on that host (usually 0); and m is the screen number on that host (usually 0).

So try to replace 127.0.0.1:44 with 127.0.0.1:n.m. If you have multiple displays try to find out which one will work by passing 127.0.0.1:0.0, 127.0.0.1:0.1, 127.0.0.1:1.0 ...

Also check if display dimensions is really 1920x1080.



来源:https://stackoverflow.com/questions/51192198/how-to-video-record-selenium-tests-running-headless-inside-a-docker

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!