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

如何解决Selenium WebDriver在Jenkins运行时屏幕过小的问题

解决Jenkins Windows测试时屏幕分辨率过小导致UI测试失败的问题

我之前也碰到过一模一样的坑!Jenkins在Windows slave上跑UI测试时默认的分辨率确实离谱,尤其是那些没适配低分辨率的网站,元素重叠、不可见的问题一抓一个准。下面几个方法都是我亲测有效的,你可以根据自己的场景选:

1. 直接修改Jenkins Slave的系统分辨率

这是最根本的解决办法,从系统层面把分辨率拉上去。

方法A:用命令行设置分辨率

在Jenkins Slave的启动脚本(比如bat或PowerShell)里添加以下命令,设置成你需要的分辨率(比如1920x1080):

  • 用PowerShell脚本(更可靠直观):
    Add-Type @"
    using System;
    using System.Runtime.InteropServices;
    public class DisplayManager {
        [DllImport("user32.dll")]
        public static extern int ChangeDisplaySettings(ref DEVMODE lpDevMode, int dwFlags);
        
        [StructLayout(LayoutKind.Sequential)]
        public struct DEVMODE {
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst=32)] 
            public string dmDeviceName;
            public short dmSpecVersion;
            public short dmDriverVersion;
            public short dmSize;
            public short dmDriverExtra;
            public int dmFields;
            public int dmPositionX;
            public int dmPositionY;
            public int dmDisplayOrientation;
            public int dmDisplayFixedOutput;
            public short dmColor;
            public short dmDuplex;
            public short dmYResolution;
            public short dmTTOption;
            public short dmCollate;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst=32)] 
            public string dmFormName;
            public short dmLogPixels;
            public int dmBitsPerPel;
            public int dmPelsWidth;
            public int dmPelsHeight;
            public int dmDisplayFlags;
            public int dmDisplayFrequency;
            public int dmICMMethod;
            public int dmICMIntent;
            public int dmMediaType;
            public int dmDitherType;
            public int dmReserved1;
            public int dmReserved2;
            public int dmPanningWidth;
            public int dmPanningHeight;
        }
    }
    "@
    
    # 初始化DEVMODE结构体
    $devMode = New-Object DisplayManager+DEVMODE
    $devMode.dmSize = [System.Runtime.InteropServices.Marshal]::SizeOf($devMode)
    # 设置目标分辨率
    $devMode.dmPelsWidth = 1920
    $devMode.dmPelsHeight = 1080
    # 指定修改宽度和高度字段
    $devMode.dmFields = 0x00000080 -bor 0x00000040
    # 应用设置并保存到注册表
    [DisplayManager]::ChangeDisplaySettings([ref]$devMode, 0x00000001)
    
    把这段脚本加到Slave启动的前置步骤里,确保测试运行前分辨率已经设置好。

方法B:用虚拟显示驱动

如果你的Slave机器没有物理显示器(比如云服务器),可以安装虚拟显示驱动(比如Virtual Display Driver),创建一个高分辨率的虚拟桌面,这样Jenkins就能在正常的分辨率下运行测试了。

2. 在测试代码中强制设置浏览器窗口大小

如果不想改系统分辨率,也可以直接在测试框架里控制浏览器窗口的尺寸,这对Selenium、Cypress这类UI测试工具都适用:

Selenium示例:

  • Java:
    import org.openqa.selenium.Dimension;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    
    public class TestSetup {
        public static void main(String[] args) {
            WebDriver driver = new ChromeDriver();
            // 设置窗口为1920x1080
            driver.manage().window().setSize(new Dimension(1920, 1080));
            // 或者直接最大化窗口
            driver.manage().window().maximize();
        }
    }
    
  • Python:
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.set_window_size(1920, 1080)
    # 或者最大化
    driver.maximize_window()
    

Headless浏览器设置:

如果用Headless模式(比如Chrome Headless),一定要指定窗口大小,不然默认分辨率还是很小:

ChromeOptions options = new ChromeOptions();
options.addArguments("--headless=new");
options.addArguments("--window-size=1920,1080");
WebDriver driver = new ChromeDriver(options);

3. 解决远程桌面断开后的分辨率问题

如果你经常通过远程桌面连接Slave机器,断开后Windows会自动把分辨率降到最低,这时候可以用tscon.exe命令断开会话而不关闭桌面:

tscon %SESSIONNAME% /dest:console

把这个命令加到远程桌面断开前的脚本里,就能保持原来的分辨率了。

4. 配置Jenkins Slave服务的交互权限

如果Slave是作为Windows服务运行的,默认在会话0中没有桌面,这时候需要:

  1. 打开服务管理器,找到Jenkins Slave服务
  2. 右键→属性→登录选项卡,勾选“允许服务与桌面交互”
  3. 重启服务,这样Slave就能在有桌面的会话中运行,分辨率设置也能生效

我当时是结合了方法1和方法2:先在Slave启动时用PowerShell设置系统分辨率,然后在测试代码里把浏览器窗口最大化,从此再也没碰到过元素不可见的测试失败问题。

内容的提问来源于stack exchange,提问作者Lipson T A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:08:47