如何在Xvfb中运行无头Firefox测试用例并通过FFmpeg录制?
在Xvfb中运行Selenium测试并录制视频的详细步骤
前置准备
确保已安装以下工具:
- Xvfb(虚拟X服务器)
- FFmpeg(视频录制工具)
- Selenium对应语言的库(如Python的
selenium包) - 浏览器驱动(如
chromedriver、geckodriver)
方式一:手动分终端操作(适合调试阶段)
这种方式步骤拆分清晰,方便排查问题:
启动Xvfb虚拟显示器
打开第一个终端,执行命令创建虚拟显示:Xvfb :10 -ac -screen 0 1920x1080x24:10是虚拟显示的编号(可自定义为:99等其他值)-ac关闭访问控制,允许任意用户连接1920x1080x24设置屏幕分辨率为1920×1080,色深24位
运行Selenium测试
打开第二个终端,先指定测试用的虚拟显示,再执行测试脚本:export DISPLAY=:10 # 替换为你的测试脚本执行命令,比如Python脚本 python your_selenium_test.py启动FFmpeg录制屏幕
打开第三个终端,同样指定虚拟显示后启动录制:export DISPLAY=:10 ffmpeg -f x11grab -r 25 -s 1920x1080 -i :10 -vcodec libx264 -preset ultrafast -crf 20 test_recording.mp4-r 25设置录制帧率为25fps(可按需调整)-s 1920x1080必须和Xvfb设置的分辨率一致-preset ultrafast保证录制过程不卡顿(以少量压缩率为代价)-crf 20控制视频质量,数值越小质量越高(18-28为常用范围)
测试完成后,按Ctrl+C停止FFmpeg和Xvfb进程即可。
方式二:单脚本自动化操作(适合批量执行)
把所有步骤整合到一个shell脚本,一键启动测试和录制:
创建脚本文件
record_selenium_test.sh,内容如下:#!/bin/bash # 自定义配置 DISPLAY_NUM=:10 SCREEN_RES="1920x1080x24" OUTPUT_VIDEO="selenium_test_recording.mp4" TEST_SCRIPT="your_selenium_test.py" # 启动Xvfb后台进程 Xvfb $DISPLAY_NUM -ac -screen 0 $SCREEN_RES & XVFB_PID=$! # 设置环境变量 export DISPLAY=$DISPLAY_NUM # 启动FFmpeg后台录制 ffmpeg -f x11grab -r 25 -s ${SCREEN_RES%x24} -i $DISPLAY_NUM -vcodec libx264 -preset ultrafast -crf 20 $OUTPUT_VIDEO & FFMPEG_PID=$! # 执行Selenium测试脚本 python $TEST_SCRIPT # 测试结束后清理进程 kill $FFMPEG_PID kill $XVFB_PID给脚本添加执行权限:
chmod +x record_selenium_test.sh运行脚本:
./record_selenium_test.sh
注意事项
- 确保Xvfb的屏幕分辨率和FFmpeg的
-s参数完全一致,否则录制画面会出现拉伸或裁剪问题 - 若使用Chrome浏览器,测试脚本中可添加
--no-sandbox --disable-dev-shm-usage参数,避免权限或内存问题 - 如果测试脚本持续运行,需手动停止脚本或在脚本中添加超时逻辑
- 若遇到Xvfb连接失败,检查
DISPLAY环境变量是否正确设置,或尝试更换显示编号
内容的提问来源于stack exchange,提问作者JustSomeFool
相关产品推荐
相关产品推荐

