Chrome 138+版本Headless模式忽略窗口最大化/尺寸问题求助
核心问题根源
Chrome 112及以上版本对Headless模式进行了架构更新,默认启用Headless New Mode,该模式下传统的窗口最大化/尺寸配置逻辑与旧版Headless行为不一致。你的配置中browserprofile.Chrome.headless=true会触发默认的新Headless模式,导致窗口尺寸设置失效,进而引发元素点击问题。
具体排查与修复步骤
1. 强制切换回旧版Headless模式
在Chrome启动参数中添加--headless=old,恢复旧版Headless的窗口尺寸控制逻辑:
修改browserprofile.Chrome.arguments配置项:
browserprofile.Chrome.arguments=-ignore-certificate-errors --disable-gpu --headless=old
注:即使已设置
browserprofile.Chrome.headless=true,显式指定--headless=old会覆盖默认的新Headless模式。
2. 确认窗口尺寸配置的优先级
你的配置同时存在browserprofile.Chrome.browserResolution=1920x1080和neodymium.webDriver.window.width/height,需验证生效优先级:
- 尝试注释
browserprofile.Chrome.browserResolution,仅保留neodymium.webDriver.window.width=1920和neodymium.webDriver.window.height=1080 - 或在代码中显式设置窗口尺寸,在
WebDriverUtils.setUp("Chrome");后添加:
WebDriver driver = WebDriverUtils.getDriver(); // 直接设置固定尺寸 driver.manage().window().setSize(new Dimension(1920, 1080)); // 或强制最大化 driver.manage().window().maximize();
3. 验证ChromeDriver与Chrome版本兼容性
尽管使用WebDriverManager,仍需确认版本严格匹配Chrome 138.x:
- 在
before方法中添加日志打印版本信息:
ChromeDriver chromeDriver = (ChromeDriver) WebDriverUtils.getDriver(); System.out.println("ChromeDriver版本:" + chromeDriver.getVersion()); System.out.println("Chrome浏览器版本:" + chromeDriver.getCapabilities().getVersion());
若版本不匹配,手动指定ChromeDriver版本:
WebDriverManager.chromedriver().browserVersion("138.0.7025.106").setup(); // 替换为你的Chrome精确版本号
4. 适配新Headless模式的窗口尺寸配置
若需保留新Headless模式,需显式添加--window-size参数:
修改browserprofile.Chrome.arguments配置:
browserprofile.Chrome.arguments=-ignore-certificate-errors --disable-gpu --window-size=1920,1080
此时browserprofile.Chrome.headless=true会默认启用新Headless模式,配合窗口尺寸参数即可生效。
5. 修复元素点击的滚动问题
若窗口尺寸已生效但元素仍无法点击,需处理页面布局差异:
- 在失败步骤前添加截图,确认元素位置:
TakesScreenshot screenshotDriver = (TakesScreenshot) WebDriverUtils.getDriver(); Allure.addAttachment("元素位置验证", new ByteArrayInputStream(screenshotDriver.getScreenshotAs(OutputType.BYTES)));
- 强制滚动到元素后再点击,以Selenide为例:
$(By.id("target-element-id")).scrollTo().click();
内容的提问来源于stack exchange,提问作者Sailesh Botcha

