ChromeDriver+Selenium在Jenkins运行自动化测试超时问题求助
解决Jenkins中Selenium+ChromeDriver自动化测试超时问题
兄弟,你遇到的这个Timed out receiving message from renderer: 20.000错误,在Jenkins这种无头环境里真的太常见了——毕竟Eclipse和本地命令行都是有桌面界面的,Chrome能正常渲染,但Jenkins跑测试的时候根本没图形界面支撑,自然就卡壳了。下面给你几个针对性的解决办法,亲测有效:
1. 给Chrome加上无头模式配置
这是最核心的一步,Jenkins服务器没有桌面,Chrome必须以无头模式启动才能干活。你得在初始化ChromeDriver的时候加上这些参数:
ChromeOptions options = new ChromeOptions(); // 新版Chrome用这个参数,旧版可以换成--headless options.addArguments("--headless=new"); // 禁用GPU加速,避免无头模式下的兼容问题 options.addArguments("--disable-gpu"); // 关闭沙箱模式,Jenkins运行的用户一般没沙箱权限 options.addArguments("--no-sandbox"); // 解决/dev/shm空间不足导致的渲染卡顿 options.addArguments("--disable-dev-shm-usage"); WebDriver driver = new ChromeDriver(options);
2. 核对ChromeDriver和Chrome的版本兼容性
你用的ChromeDriver是2.33版本,这版本老得掉牙了,只支持Chrome 60-62左右的版本。如果Jenkins服务器上装的Chrome是新版的,那肯定会出现兼容性问题,直接导致渲染超时。
- 先查下Jenkins服务器上的Chrome版本,然后去下载对应版本的ChromeDriver(比如Chrome 114就对应ChromeDriver 114.x.x.x)
- 把新的ChromeDriver路径加到Jenkins的环境变量里,或者在测试代码里直接指定绝对路径
3. 适当延长超时时间
有时候页面加载确实慢,默认20秒的渲染超时不够用,你可以调长一点:
ChromeOptions options = new ChromeOptions(); // 把页面加载超时设为60秒,根据实际情况调整 options.setPageLoadTimeout(Duration.ofSeconds(60)); // 或者直接给driver设置超时 driver.manage().timeouts().pageLoadTimeout(Duration.ofSeconds(60));
4. 检查Jenkins运行用户的权限
Jenkins的运行用户可能没权限访问Chrome或者ChromeDriver,你可以:
- 看看Chrome和ChromeDriver的执行权限,确保Jenkins用户有
execute权限 - 在Jenkins任务里加个
whoami命令,看看当前跑任务的用户是谁,然后切换到这个用户,在服务器命令行手动跑测试,看能不能复现问题——这样能快速定位是不是权限的锅
5. 确认Jenkins的环境配置
确保Jenkins的JDK8环境是对的,而且ChromeDriver的路径已经加到PATH里了,要是没加,就在测试代码里明确指定:
// 替换成你Jenkins服务器上ChromeDriver的绝对路径 System.setProperty("webdriver.chrome.driver", "/opt/chromedriver");
要是还是不行,你可以先在Jenkins服务器上手动执行和任务里一样的Ant命令,看看能不能复现问题,这样更容易揪出具体原因。
内容的提问来源于stack exchange,提问作者Andrew C.
相关产品推荐
相关产品推荐

