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

Chrome 138+版本Headless模式忽略窗口最大化/尺寸问题求助

Chrome 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:53:09