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
As the article provides, there are couple things to try:
You can fix the “cannot open display” error by following the xhost procedure:
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.
Enable X11 forwarding While doing ssh use the option -X to enable X11 forwarding.
Enable trusted X11 forwarding, by using the -Y option,
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.
Note: IP is the local workstation’s IP where you want the GUI application to be displayed.
EDIT:
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
with127.0.0.1:n.m
. If you have multiple displays try to find out which one will work by passing127.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
.The correct steps to record the virtual display with
ffmpeg
are: