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

如何配置Azure Windows Server 2012R2 VM默认分辨率适配Selenium测试?

解决Azure Windows Server 2012R2 VM上VSO Agent运行Selenium时分辨率过低的问题

我之前在Azure上部署Windows Server 2012R2虚拟机跑Selenium UI测试时,也碰到过一模一样的问题——RDP连接时分辨率和客户端一致是1600x900,但VSO Agent会话默认的1024x768分辨率直接导致测试失败,而且RDP里的分辨率设置还灰掉改不了。下面是几个亲测有效的解决方案:

方法1:将VSO Agent配置为交互式运行模式

默认情况下VSO Agent是以Windows服务的形式运行的,后台会话的分辨率会被限制在1024x768。改成交互式登录模式就能让Agent在有桌面的会话中运行,从而可以自定义分辨率:

  • 进入VSO Agent的安装目录,运行config.cmd打开配置命令行
  • 选择Change service account选项,将服务账户改为拥有本地管理员权限的账户
  • 接着选择Run as interactive process,按照提示完成配置
  • 重启Agent服务后,登录到VM的交互式会话,手动设置你需要的分辨率(比如1600x900),之后Agent运行时就会沿用这个会话的分辨率

方法2:用PowerShell脚本强制设置分辨率(无需修改Agent模式)

如果不想改动Agent的运行模式,可以在Selenium测试执行前,用PowerShell脚本强制修改当前会话的分辨率。Hyper-V Video驱动支持通过系统API修改分辨率,脚本如下:

Add-Type @"
using System;
using System.Runtime.InteropServices;

public class DisplayResolution {
    [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;
    }

    [DllImport("user32.dll")]
    public static extern bool EnumDisplaySettings(string lpszDeviceName, int iModeNum, ref DEVMODE lpDevMode);

    [DllImport("user32.dll")]
    public static extern bool ChangeDisplaySettings(ref DEVMODE lpDevMode, int dwFlags);

    public const int ENUM_CURRENT_SETTINGS = -1;
    public const int CDS_UPDATEREGISTRY = 0x01;
    public const int DISP_CHANGE_SUCCESSFUL = 0;
}
"@

$dm = New-Object DisplayResolution+DEVMODE
$dm.dmSize = [System.Runtime.InteropServices.Marshal]::SizeOf($dm)

[DisplayResolution]::EnumDisplaySettings($null, [DisplayResolution]::ENUM_CURRENT_SETTINGS, [ref]$dm) | Out-Null

# 设置目标分辨率为1600x900
$dm.dmPelsWidth = 1600
$dm.dmPelsHeight = 900

$result = [DisplayResolution]::ChangeDisplaySettings([ref]$dm, [DisplayResolution]::CDS_UPDATEREGISTRY)

if ($result -eq [DisplayResolution]::DISP_CHANGE_SUCCESSFUL) {
    Write-Host "分辨率已成功设置为1600x900"
} else {
    Write-Host "设置分辨率失败,错误代码: $result"
}

把这个脚本保存为Set-DisplayResolution.ps1,在VSO Agent的测试任务中,先执行这个脚本,再启动Selenium测试即可。

方法3:调整Azure VM的Hyper-V视频适配器配置

对于Azure上的Windows Server 2012R2 VM,还可以通过PowerShell修改虚拟机的视频适配器设置,增加最大分辨率支持:

  • 登录到Azure PowerShell或Azure Cloud Shell
  • 运行以下命令(替换你的资源组和VM名称):
$vm = Get-AzVM -ResourceGroupName "你的资源组名称" -Name "你的VM名称"
# 修改视频适配器的最大分辨率限制
$vm.VirtualMachineProfile.VideoAdapter.MaxResolutionWidth = 1600
$vm.VirtualMachineProfile.VideoAdapter.MaxResolutionHeight = 900
Update-AzVM -ResourceGroupName "你的资源组名称" -VM $vm

修改完成后重启VM,之后Agent会话的分辨率上限就会提升到你设置的数值。

补充说明:为什么RDP里分辨率设置灰掉?

这是因为Hyper-V的视频驱动在RDP会话中,分辨率是由RDP客户端和服务器协商决定的,默认不允许在会话中修改。只有在本地控制台会话(或者交互式Agent会话)中,才能手动修改分辨率,或者通过上述脚本/VM配置的方式强制调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:58:05