Selenium视频容器无法录制测试视频的问题排查与解决
Selenium测试视频录制失败问题解决
问题现象
- 可通过7900端口的NoVNC正常查看测试执行过程
- 测试在VSCode终端执行完成,断言结果符合预期
- selenium-video容器日志无异常输出,也无任何测试结果处理的反馈
环境与初始配置
使用CakePHP框架下的PHPUnit进行测试,初始Docker Compose配置如下:
selenium: container_name: selenium image: selenium/standalone-edge:latest shm_size: 2gb networks: - frontend - backend ports: - "4444:4444" - "7900:7900" environment: TZ: ${TIMEZONE} LANG: en_US.UTF-8 LC_ALL: en_US.UTF-8 LANGUAGE: en_US.UTF-8 volumes: - "$LOCAL_FOLDER:/mnt/local_folder" selenium-video: container_name: selenium-video image: selenium/video:ffmpeg-7.1-20250123 networks: - frontend - backend environment: - DISPLAY_CONTAINER_NAME=selenium - SE_NODE_GRID_URL=http://selenium:4444 # - FILE_NAME=chrome_video.mp4 - SE_VIDEO_FILE_NAME=auto volumes: - "$LOCAL_FOLDER:/videos"
排查方向
曾怀疑问题源于standalone-edge与node-edge容器的差异。
解决方案
1. 调整selenium-video容器环境变量
问题核心是缺少两个关键环境变量:SE_NODE_PORT和SE_VIDEO_RECORD_STANDALONE。修改后的selenium-video配置如下:
selenium-video: container_name: selenium-video image: selenium/video:ffmpeg-7.1-20250123 networks: - frontend - backend environment: - DISPLAY_CONTAINER_NAME=selenium - SE_NODE_GRID_URL=http://selenium:4444 # - FILE_NAME=chrome_video.mp4 - SE_VIDEO_FILE_NAME=auto - SE_NODE_PORT=4444 - SE_VIDEO_RECORD_STANDALONE=true volumes: - "$LOCAL_FOLDER:/videos"
2. 配置客户端测试代码
需要在测试代码中通过Selenium能力参数控制视频录制,示例代码如下:
// 启动浏览器会话 $capabilities = DesiredCapabilities::microsoftEdge(); $chrome_options = (new ChromeOptions)->addArguments(['--lang' => 'en']); // 设置语言 $capabilities->setCapability('goog:chromeOptions', $chrome_options); // 配置Selenium能力参数 $capabilities->setCapability('platformName', 'linux'); $capabilities->setCapability('se:name', basename(__FILE__, '.php')); // 视频文件名前缀,会自动追加会话ID $capabilities->setCapability('se:recordVideo', 'false'); // 可根据需求控制是否录制当前测试 $capabilities->setCapability('se:screenResolution', '1920x1080'); // 设置录制分辨率 $this->driver = RemoteWebDriver::create('http://selenium:4444/wd/hub', $capabilities);
内容的提问来源于stack exchange,提问作者TechFanDan
相关产品推荐
相关产品推荐

