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

ChromeDriver 136无头模式异常:桌面测试陷平板模式问题求助

ChromeDriver 136变更及无头桌面模式恢复方案

一、ChromeDriver 136的关键变更

Chrome 136版本对无头模式进行了核心调整:默认启用了新版无头模式(Headless Mode v2),该模式基于Chrome for Android内核构建,默认模拟移动设备(平板/手机)的视口与行为,而非旧版无头模式默认的桌面端环境。这直接导致测试中出现784×445的平板尺寸,触发页面移动端布局,引发测试失败。

二、恢复无头桌面模式的解决方法

方案1:强制使用旧版无头模式(快速兼容原有配置)

将原代码中启用无头模式的参数从headless改为headless=old,即可回到之前正常运行的桌面端无头环境:

if (!Debugger.IsAttached)
    options.AddArgument("headless=old"); // 替换原"headless"参数

此方案无需额外调整其他配置,能快速适配现有测试代码。

方案2:适配新版无头模式(长期推荐,避免旧模式被移除)

若想适配新版无头模式,需显式指定桌面设备类型、视口尺寸及桌面端用户代理,同时通过CDP命令确保视口生效:

var options = new EdgeOptions
{
    PageLoadStrategy = PageLoadStrategy.Normal
};
// 保留原有参数
options.AddArgument("enable-automation");
options.AddArgument("disable-dev-shm-usage");
options.AddArgument("ignore-certificate-errors");
options.AddArgument("ignore-ssl-errors");
options.AddArgument("disable-popup-blocking");
options.AddArgument("window-size=1920,1080");
options.AddUserProfilePreference("download.default_directory", DownloadPath);

// 启用新版无头模式并指定桌面设备
if (!Debugger.IsAttached)
{
    options.AddArgument("headless=new");
    options.AddArgument("device-type=desktop"); // 关键:强制桌面设备类型
    // 指定桌面端用户代理(Chrome 136桌面版UA)
    options.AddArgument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36");
}

options.AddArgument("disable-gpu");
var service = EdgeDriverService.CreateDefaultService();
Driver = new EdgeDriver(service, options, TimeSpan.FromSeconds(MaxWait));

SetTimeOuts(MaxWait);
Driver.Manage().Cookies.DeleteAllCookies();
// 替换原Maximize,用CDP强制设置桌面视口
Driver.ExecuteCdpCommand(
    "Emulation.setDeviceMetricsOverride",
    new Dictionary<string, object>
    {
        ["width"] = 1920,
        ["height"] = 1080,
        ["deviceScaleFactor"] = 1,
        ["mobile"] = false, // 明确禁用移动模拟
        ["screenWidth"] = 1920,
        ["screenHeight"] = 1080
    });
// 保留原有时区设置
Driver.ExecuteCdpCommand(
    "Emulation.setTimezoneOverride",
    new Dictionary<string, object>
    {
        ["timezoneId"] = "Europe/London"
    });

注:原代码中Driver.Manage().Window.Maximize();在新版无头模式下可能无法生效,因此改用CDP的Emulation.setDeviceMetricsOverride命令强制设置桌面视口,确保布局符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:03:21