如何视频记录在docker内部无头运行的硒测试?

时间:2018-07-05 13:10:31

标签: python selenium ffmpeg xvfb pyvirtualdisplay

我正在使用无头firefox在docker内部运行python-selenium测试。

在这些测试过程中,我可以使用selenium方法来制作屏幕快照,但是我可以在整个测试过程中使用某些东西来“视频”记录虚拟显示(一些测试脚本具有多种测试方法,并且启动了许多网络驱动程序,停止)。

那我如何录制完整的测试会话?

附录:我找到了一个网页,该网页准确地描述了我的需求:here。不幸的是,当我尝试进行录制时出现错误。这是我正在执行的命令:

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

2 个答案:

答案 0 :(得分:7)

使用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

答案 1 :(得分:0)

article提供了一些尝试方法:

您可以按照xhost步骤修复“无法打开显示”错误:

  1. 允许客户端使用xhost +从任何主机进行连接执行以下命令以禁用访问控制,从而可以允许客户端从任何主机进行连接。

    $ xhost + 
    access control disabled, clients can connect from any host
    
  2. 启用X11转发。在执行ssh时,请使用选项-X启用X11转发。

    $ ssh username@hostname -X 
    

    使用-Y选项启用受信任的X11转发,

    $ ssh username@hostname -Y
    
  3. 在该主机中打开GUI应用程序按照上述说明打开与远程主机的ssh连接后,您可以打开将打开它的任何GUI应用程序。

    如果仍然出现“无法打开显示”错误,请如下所示设置DISPLAY变量。

    $ export DISPLAY='IP:0.0' 
    

    注意: IP是要在其中显示GUI应用程序的本地工作站IP。

编辑:

hostname:n.m

其中主机名是网络主机名,根据需要用域名限定(或直接使用IP地址); n是该主机上的显示号(通常为0); m是该主机上的屏幕号(通常为0)。

因此,请尝试将127.0.0.1:44替换为127.0.0.1:n.m。如果您有多台显示器,请通过传递127.0.0.1:0.0127.0.0.1:0.1127.0.0.1:1.0 ...

来找出哪种显示器可以工作。

还要检查显示尺寸是否真的为1920x1080