如何在Docker中以无头模式录制Selenium测试的视频?

23

我正在使用一个无头火狐浏览器在docker中运行python-selenium测试。

在这些测试期间,我能够使用selenium的截图方法进行截图,但是我可以使用什么东西来记录整个测试过程中的虚拟显示屏幕(包括多个测试脚本、多个测试方法以及启动和停止许多Web驱动程序)。

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

补充说明: 我找到了一篇网页,描述了我需要的确切内容: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

请看这里:https://dev59.com/Oojca4cB1Zd3GeqPrxkK? - timbre timbre
这对我不起作用。引发了一个错误:“TypeError: fsPath.existsSync不是一个函数”。 - Alex
你是在第一条命令还是第二条命令上出错了? - Tarun Lalwani
这是针对第二个命令(即“ffmpeg”命令)的。 - Alex
2个回答

16

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

0

正如文章所提供的,有几件事情可以尝试:

您可以按照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

其中,hostname是网络主机名,必要时带有域名(或直接使用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


这些建议仍然不起作用。另外,我无法尝试建议2,因为我正在同一台本地机器上尝试示例。我根本不使用ssh!对于建议3,我使用了export DISPLAY='localhost:0.0'... - Alex
我无法尝试所有可能的组合。我尝试了一些,但没有成功。错误消息仍然是“无法打开显示127.0.0.1:44,错误1。127.0.0.1:44:输入/输出错误”。 - Alex
请尝试使用 127.0.0.1:10.0。我已经阅读过,这通常会有所帮助。 - Andrei Suvorkov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接