Karate框架chromedriver端口占用及会话创建超时问题如何解决?
问题定位步骤
- 第一步验证Chrome与ChromeDriver版本兼容性
该问题90%以上的诱因是本地安装的Chrome浏览器版本,与Karate调用的ChromeDriver版本不匹配。你可以在Chrome地址栏输入chrome://version查看当前浏览器版本,再核对对应ChromeDriver的大版本号是否一致即可。 - 第二步验证9515端口实际状态
仅开放端口不足以确认可用,需执行命令检查端口是否被其他进程占用:
Windows系统执行netstat -ano | findstr 9515
Mac/Linux系统执行lsof -i:9515
若返回结果中存在其他进程ID,说明端口被占用,需先终止对应进程。 - 第三步手动验证ChromeDriver可用性
直接在本地终端运行chromedriver命令,启动后执行curl http://localhost:9515/status,若能正常返回JSON格式的状态信息,说明驱动本身正常;如果该步就出现超时、连接失败,说明ChromeDriver本身存在问题,与Karate框架无关。 - 第四步核对Karate驱动配置
检查你的测试脚本中driver配置项是否存在错误参数,比如错误添加代理配置、指定了不存在的浏览器路径、参数格式错误等。
解决方案
- 版本不匹配的处理:
要么将本地Chrome升降级到与Karate自带ChromeDriver匹配的版本,要么在配置中指定你自行下载的对应版本驱动的绝对路径,示例配置如下:* configure driver = { type: 'chromedriver', executable: '你的本地chromedriver绝对路径', port: 9515 } - 端口/网络拦截处理:
若9515端口确实无法使用,可在配置中指定其他空闲端口;同时检查本地防火墙、安全软件是否拦截了ChromeDriver的端口监听请求,将ChromeDriver加入白名单即可。如果你的设备配置了全局代理,需要在驱动配置中添加addOptions: ['--no-proxy-server']参数,或者将localhost加入代理例外列表,避免请求本地端口被代理转发导致超时。 - 启动超时处理:
可以在驱动配置中调大会话创建的超时时间,比如将timeout设置为120000(单位毫秒),给驱动足够的启动时间。 - 非默认路径Chrome处理:
如果你将Chrome安装到了非系统默认路径,需要在配置中通过chromeBinary参数指定Chrome可执行文件的绝对路径,否则ChromeDriver无法找到浏览器程序,会一直卡空白页并返回超时。
补充说明:你看到的空白浏览器窗口是正常现象,Karate需要先和ChromeDriver建立会话,会话创建成功后才会发送导航指令加载目标URL,会话创建失败的情况下浏览器就会一直停留在空白页。
内容的提问来源于stack exchange,提问作者Kusum Gunsola
相关产品推荐
相关产品推荐

