如何录制在 docker 内无头运行的 selenium 测试?
Posted
技术标签:
【中文标题】如何录制在 docker 内无头运行的 selenium 测试?【英文标题】:How to video-record selenium tests running headless inside a docker? 【发布时间】:2018-12-13 23:43:38 【问题描述】:我正在使用无头 firefox 在 docker 内运行 python-selenium 测试。
在这些测试期间,我可以使用 selenium 方法进行屏幕截图 - 但我可以在整个测试期间使用一些东西来“视频”记录虚拟显示吗(具有多种测试方法的几个测试脚本,启动了许多 webdrivers 和停止)。
那么我怎样才能录制完整的测试会话呢?
附录:我找到了一个准确描述我需要的网页: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
【问题讨论】:
这个:***.com/questions/28655518/…? 这对我不起作用。引发错误:“TypeError: fsPath.existsSync 不是函数” 您收到第一个命令或第二个命令的错误? 第二个命令(ffmpeg
命令)
【参考方案1】:
用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
【讨论】:
【参考方案2】:正如article 所提供的,有几件事可以尝试:
您可以按照 xhost 程序修复“无法打开显示”错误:
允许客户端使用xhost+从任何主机连接执行以下命令禁用访问控制,通过该命令可以允许客户端从任何主机连接。
$ xhost +
access control disabled, clients can connect from any host
启用 X11 转发 在执行 ssh 时使用选项 -X 启用 X11 转发。
$ ssh username@hostname -X
通过使用 -Y 选项启用受信任的 X11 转发,
$ ssh username@hostname -Y
在该主机中打开 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.0
、127.0.0.1:0.1
、127.0.0.1:1.0
来找出哪一个可以工作...
同时检查显示尺寸是否真的是1920x1080
。
【讨论】:
这些建议仍然无效。我也无法尝试建议 2,因为我正在同一台本地机器上尝试该示例。我根本不使用 ssh!对于建议 3,我使用了export DISPLAY='localhost:0.0'
...
我无法尝试所有可能的组合。我尝试了一些,但没有成功。错误信息仍然是Cannot open display 127.0.0.1:44, error 1. 127.0.0.1:44: Input/output error
请尝试127.0.0.1:10.0
我读过,它经常有帮助以上是关于如何录制在 docker 内无头运行的 selenium 测试?的主要内容,如果未能解决你的问题,请参考以下文章