Jenkins构建报错:org.openqa.selenium.WebDriverException: 等待驱动服务器启动超时
我之前在Jenkins的Linux节点上跑Selenium自动化测试时,也碰到过和你几乎一模一样的情况——本地跑完全正常,一到Jenkins就报错。结合我的排查经验,给你几个具体的解决方向:
严格匹配Chrome浏览器与ChromeDriver版本
哪怕你下载了最新的ChromeDriver,如果Jenkins虚拟机上的Chrome浏览器不是对应版本,大概率会出问题。先在Jenkins机器上执行命令查Chrome版本:google-chrome --version然后找完全对应大版本的ChromeDriver(比如Chrome是118.0.5993.x,ChromeDriver也要选118.0.5993开头的版本),小版本尽量保持一致。
给ChromeDriver添加可执行权限
Linux系统下,刚下载的ChromeDriver默认可能没有执行权限,Jenkins运行时会因为权限不足无法启动。可以在构建脚本里加一行权限设置:chmod +x ${WORKSPACE}/path/to/your/chromedriver或者提前在虚拟机里手动给驱动文件设置
chmod +x权限。明确指定ChromeDriver路径并配置无头模式
Linux虚拟机通常没有图形界面,必须用无头模式启动Chrome,同时要确保代码里正确指定驱动路径:ChromeOptions options = new ChromeOptions(); // 新版Chrome的无头模式启动参数 options.addArguments("--headless=new"); // 解决Linux下的沙箱权限限制问题 options.addArguments("--no-sandbox"); // 避免/dev/shm空间不足导致浏览器崩溃 options.addArguments("--disable-dev-shm-usage"); // 明确指定ChromeDriver的绝对路径 System.setProperty("webdriver.chrome.driver", "/var/lib/jenkins/workspace/your-project/src/test/resources/chromedriver"); WebDriver driver = new ChromeDriver(options);这里的
--no-sandbox和--disable-dev-shm-usage两个参数在Jenkins环境下几乎是必须的,很多权限和资源不足的问题靠这两个参数就能解决。检查Jenkins执行用户的环境变量
Jenkins默认用jenkins用户运行任务,和你本地登录的用户环境可能不一样。如果代码里依赖环境变量中的ChromeDriver路径,要确保jenkins用户的PATH里包含驱动所在目录,或者直接在代码里用绝对路径(推荐后者,更稳定)。查看详细构建日志定位问题
如果以上步骤都试过还没解决,建议把Jenkins的构建日志调至更详细级别,或者在构建脚本里添加调试命令:# 打印ChromeDriver版本 ${WORKSPACE}/path/to/chromedriver --version # 测试Chrome是否能正常启动 google-chrome --headless --no-sandbox --dump-dom https://www.google.com从这些命令的输出里,你能更精准地定位是驱动本身的问题,还是Chrome浏览器无法启动的问题。
内容的提问来源于stack exchange,提问作者jerando

