Java自动化高分辨率下部分Cucumber脚本Jenkins无头模式执行失败求助
可行解决方案
- 优先使用Chrome启动参数指定分辨率,替代代码动态setSize
Chrome 96的Windows headless模式对driver.manage().window().setSize()的支持存在已知兼容缺陷,在启动ChromeOptions时直接添加如下参数,稳定性远高于运行时修改分辨率:ChromeOptions options = new ChromeOptions(); options.addArguments("--headless"); options.addArguments("--window-size=1920,1080"); options.addArguments("--force-device-scale-factor=1"); options.addArguments("--high-dpi-support=1"); options.addArguments("--disable-gpu"); // Windows Server环境必加,规避渲染bug - 验证脚本实际运行环境参数
在script1、script2的入口位置增加日志打印,确认headless模式下分辨率实际生效值,排查是否存在分辨率设置不生效触发的元素定位死等:
这两个脚本大概率存在依赖视口的操作(比如懒加载元素、悬浮交互、截图对比校验),1920*1080分辨率下Windows Server的headless渲染逻辑和普通模式存在偏差,导致元素无法被定位触发隐式等待无限挂起。System.out.println("当前窗口分辨率:" + driver.manage().window().getSize()); - 增加超时兜底避免构建卡死
给WebDriver实例配置全局超时上限,同时给Jenkins任务配置单步执行超时规则,避免单个脚本异常阻塞整个构建流程:driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS); driver.manage().timeouts().setScriptTimeout(30, TimeUnit.SECONDS); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); - 低成本适配方案
无需修改全局配置,仅给script1、script2单独配置兼容分辨率:执行这两个脚本前调用driver.manage().window().setSize(new Dimension(1366,768)),执行完成后再切回1920*1080即可快速恢复构建流程。 - 根治方案
升级Chrome浏览器和对应ChromeDriver到最新稳定版,Chrome 96为2021年发布的旧版本,Windows Server下headless模式存在大量未修复的渲染、窗口操作缺陷,升级后可直接解决大部分兼容问题。
内容的提问来源于stack exchange,提问作者Mahee99
相关产品推荐
相关产品推荐

