You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自动化测试截图时出现字符编码(乱码)问题求助

解决Headless Chrome在CentOS7上截图乱码的问题

我之前维护Ruby+Capybara自动化测试项目时,也碰到过一模一样的情况——本地截图显示正常,远程CentOS机器上的截图却出现方块乱码。结合你给出的环境信息,给你几个针对性的解决思路:

一、优先排查字体缺失问题(最常见原因)

CentOS 7默认没有预装中文字体,Headless Chrome渲染页面时找不到对应字体,就会用方块替代显示。解决步骤:

  1. 先检查系统已安装字体:
    fc-list
    
    如果看不到宋体、黑体这类中文字体,就需要补充安装。
  2. 安装常用中文字体,比如文泉驿微米黑:
    yum install -y wqy-microhei-fonts
    
  3. 安装完成后,重启测试服务或重新启动ChromeDriver,再运行测试用例验证。

二、调整Chrome启动参数优化渲染

在你的headless_chrome驱动配置里,添加几个和字体渲染相关的参数,强制规范渲染行为:

Capybara.register_driver :headless_chrome do |app|
  options = Selenium::WebDriver::Chrome::Options.new
  options.add_argument 'headless'
  options.add_argument 'disable-gpu'
  options.add_argument 'disable-popup-blocking'
  options.add_argument 'no-sandbox'
  # 添加以下优化参数
  options.add_argument '--font-render-hinting=medium'
  options.add_argument '--default-font-size=14'
  options.add_argument '--force-device-scale-factor=1'
  options.add_argument '--disable-font-subpixel-positioning'
  Capybara::Selenium::Driver.new app, browser: :chrome, options: options
end

三、检查文件名编码问题

你的截图文件名包含scenario.name,如果场景名称有中文,CentOS的文件系统编码环境可能导致文件名乱码,间接影响截图渲染逻辑。可以尝试把文件名转成纯英文格式:

# 把场景名称里的非英文字符替换为下划线
safe_name = scenario.name.gsub(/[^a-zA-Z0-9_\-]/, '_')
page.save_screenshot("testResults/report_smoke_mobile/screenshot_#{safe_name}.png")

四、考虑升级ChromeDriver和Chrome版本

你当前使用的ChromeDriver 2.38对应Chrome 65-67版本,虽然版本匹配,但老版本的Headless模式在字体渲染上存在已知bug。建议升级到更稳定的版本组合,比如:

  • ChromeDriver 2.41 对应 Chrome 67-69
  • 或者直接升级到更晚的兼容版本(注意严格对应Chrome和ChromeDriver的版本号)

五、手动验证Headless环境

可以在远程CentOS机器上直接运行Headless Chrome截图,排除测试框架的影响:

google-chrome --headless --disable-gpu --screenshot --window-size=1280,720 https://你的测试页面地址

查看生成的screenshot.png是否乱码:

  • 如果手动截图也乱码:确定是系统字体缺失或Chrome本身的环境问题
  • 如果手动截图正常:那可能是Capybara的配置或截图代码的问题

内容的提问来源于stack exchange,提问作者Batuhan Kilic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:57:24