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

如何在部署Jenkins的Azure Linux虚拟机中以GUI模式运行Selenium测试

我来帮你解决在Azure Linux虚拟机上通过Jenkins以GUI模式运行Selenium脚本的问题——你之前试过Chrome配置和xrdp没成功,我给你梳理几个亲测有效的方案,按优先级推荐:

方案1:用Xvfb创建虚拟显示(最省心的无桌面依赖方案)

这个方案不需要真实的显示器或桌面环境,而是通过虚拟X服务器模拟GUI环境,完美适配Jenkins的CI/CD场景,稳定性拉满:

  • 先安装Xvfb及相关依赖(以Debian/Ubuntu为例,RHEL/CentOS替换为yum/dnf):
    sudo apt-get install xvfb x11vnc xfonts-base
  • 在Jenkins的Shell构建步骤中,先启动Xvfb虚拟显示:
    Xvfb :1 -screen 0 1920x1080x24 &
  • 设置环境变量,让Chrome指向这个虚拟显示:
    export DISPLAY=:1
  • 最后运行你的Selenium脚本,注意去掉--headless参数!比如Python脚本示例:
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.binary_location = "/usr/bin/google-chrome"  # 替换成你的Chrome实际路径
    driver = webdriver.Chrome(options=options)
    driver.get("https://example.com")
    # 你的测试逻辑代码
    driver.quit()
    
  • 嫌每次写命令麻烦?直接把这些步骤封装成一个Shell脚本,Jenkins调用脚本就行。

方案2:修复xrdp配置,让Jenkins连接真实桌面环境

如果你一定要用真实的GUI桌面(比如需要可视化调试),那得把之前没搞定的xrdp配置补全:

  • 先安装轻量桌面环境(推荐XFCE,适合服务器资源):
    sudo apt-get install xfce4 xfce4-goodies
  • 配置xrdp默认使用XFCE:
    echo "startxfce4" > ~/.xsession
    sudo systemctl restart xrdp
  • 用xrdp远程登录一次虚拟机,在桌面终端里执行echo $DISPLAY,记下输出的会话ID(比如:10.0)
  • 在Jenkins的构建步骤中,先设置DISPLAY变量为刚才记下的ID,再运行脚本:
    export DISPLAY=:10.0
    这里运行你的Selenium脚本
  • 注意: 必须保持xrdp会话处于登录状态,否则DISPLAY会失效。建议创建一个专门的服务用户,用来持续保持xrdp登录,避免影响其他操作。

方案3:用Docker封装带GUI的Selenium环境

这个方案更隔离,不用折腾虚拟机里的依赖,适合复杂测试场景:

  • 先在虚拟机上安装Docker,并给Jenkins用户授权:
    sudo apt-get install docker.io
    sudo usermod -aG docker jenkins
    sudo systemctl restart jenkins # 重启Jenkins让权限生效
  • 拉取官方带Chrome的Selenium镜像:
    docker pull selenium/standalone-chrome:latest
  • 启动容器时映射虚拟显示(结合Xvfb使用,无需真实桌面):
    docker run -d -p 4444:4444 -e DISPLAY=:1 selenium/standalone-chrome
  • 修改Selenium脚本,连接到Docker里的远程驱动:
    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    driver = webdriver.Remote(
        command_executor='http://localhost:4444/wd/hub',
        desired_capabilities=DesiredCapabilities.CHROME
    )
    driver.get("https://example.com")
    # 你的测试逻辑代码
    driver.quit()
    

最后小建议

优先选方案1,因为它不需要维持桌面会话,最适合Jenkins的自动化运行场景;如果需要可视化调试再考虑方案2;方案3适合多环境隔离的复杂测试需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:46:12