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

如何在GitHub Actions中模拟显示器、鼠标等基础硬件环境?

GitHub Actions 中运行 PyAutoGUI 无显示环境的解决方案

方案一:使用 Xvfb 虚拟显示(适配需要实际调用PyAutoGUI接口的场景)

Xvfb 是 Linux 平台的虚拟帧缓冲服务,可在无物理屏幕、输入设备的环境下模拟完整的 X11 显示服务,兼容 PyAutoGUI 依赖的分辨率获取、鼠标点击/滚动等基础接口,不需要实际弹出交互窗口,完全匹配测试需求。
配置步骤如下:

  • 首先在工作流中安装所需系统依赖,使用 Ubuntu 类型的 GitHub Runner 即可:
- name: 安装系统依赖
  run: |
    sudo apt-get update
    sudo apt-get install -y xvfb python3-tk python3-dev scrot

xvfb 是虚拟显示核心服务,其余三个包是 PyAutoGUI 在 Linux 环境下的常规运行依赖,避免导入或功能调用时报错。

  • 启动虚拟显示并运行测试,二选一即可:
    • 单次测试运行推荐直接用 xvfb-run 包裹命令,自动管理虚拟显示生命周期、自动配置DISPLAY环境变量,测试结束自动清理资源:
    - name: 运行测试
      run: xvfb-run -a -s "-screen 0 1920x1080x24" pytest
    
    参数说明:-a 自动选择空闲的显示编号避免冲突,-s 后指定虚拟屏幕配置,0为屏幕编号,1920x1080为分辨率,24为色深,可根据测试需要自行调整分辨率。如果不需要自定义分辨率,直接执行xvfb-run -a pytest即可,默认分辨率为1280x1024。
    • 如果工作流中多个步骤需要调用PyAutoGUI,可以提前启动虚拟显示服务,将DISPLAY变量写入全局环境:
    - name: 启动虚拟显示
      run: |
        Xvfb :99 -screen 0 1920x1080x24 &
        echo "DISPLAY=:99" >> $GITHUB_ENV
    - name: 运行测试
      run: pytest
    # 后续其他需要调用PyAutoGUI的步骤可直接执行,不需要额外前缀
    

Xvfb 已经在 X11 层面模拟了鼠标输入设备,PyAutoGUI的size()、click()、scroll()等基础接口都可以正常调用,不会出现鼠标设备缺失的报错。

方案二:Mock PyAutoGUI 接口(适配纯业务逻辑单元测试场景)

如果测试不需要验证PyAutoGUI本身的调用正确性,仅验证自身业务逻辑,可以直接在测试中Mock掉PyAutoGUI的相关接口,完全跳过显示、硬件依赖,运行速度更快,也不需要安装额外系统依赖。
以pytest测试框架为例,在conftest.py中添加全局自动加载的fixture即可:

from unittest.mock import patch
import pytest

@pytest.fixture(autouse=True)
def mock_pyautogui_interface():
    with patch("pyautogui.size") as mock_size, \
         patch("pyautogui.click") as mock_click, \
         patch("pyautogui.scroll") as mock_scroll:
        # 自定义模拟返回的分辨率
        mock_size.return_value = (1920, 1080)
        yield

如果测试中用到了PyAutoGUI的其他接口,按相同方式加入patch列表即可。

注意事项

  • 不要选择 Windows 或 macOS 类型的 GitHub Runner 运行上述配置,Xvfb 仅支持 Linux X11 环境,Ubuntu 20.04/22.04 官方 runner 适配成本最低。
  • 如果测试中用到PyAutoGUI的截图功能,必须安装scrot依赖,否则会调用失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:01:28