WebDriverManager的browserInDocker函数问题:CI/CD环境防火墙致驱动获取失败
解决WebDriverManager因防火墙阻断无法访问外部库的问题
我用WebDriverManager已有一年多,近期将CI/CD迁移至新工具后,新增防火墙阻断了外部库访问。尝试以下两段代码均未成功:
WebDriverManager.firefoxdriver().browserInDocker().create();
WebDriverManager.firefoxdriver().browserInDocker().linux().setup();
(注:原代码中setup(存在语法错误,已修正为setup();)
报错信息如下:
io.github.bonigarcia.wdm.config.WebDriverManagerException: io.github.bonigarcia.wdm.config.WebDriverManagerException: org.apache.hc.client5.http.ConnectTimeoutException: Connect to https://msedgedriver.azureedge.net:443 [msedgedriver.azureedge.net/13.107.246.38, msedgedriver.azureedge.net/13.107.213.38] failed: Read timed out at io.github.bonigarcia.wdm.WebDriverManager.handleException(WebDriverManager.java:809) at io.github.bonigarcia.wdm.WebDriverManager.manage(WebDriverManager.java:599) at io.github.bonigarcia.wdm.WebDriverManager.fallback(WebDriverManager.java:825) at io.github.bonigarcia.wdm.WebDriverManager.handleException(WebDriverManager.java:806) at io.github.bonigarcia.wdm.WebDriverManager.manage(WebDriverManager.java:599) at io.github.bonigarcia.wdm.WebDriverManager.handleException(WebDriverManager.java:799) at io.github.bonigarcia.wdm.WebDriverManager.manage(WebDriverManager.java:599) at io.github.bonigarcia.wdm.WebDriverManager.setup(WebDriverManager.java:287)
需要迁移的驱动文件
从代码和报错信息来看,需准备以下驱动:
- GeckoDriver:对应Docker中使用的Firefox版本,选择Linux系统的可执行文件
- msedgedriver:报错中出现Edge驱动的请求,说明测试环境涉及Edge浏览器,需同步准备Linux版本的Edge驱动
- 如果还有Chrome等其他浏览器测试,需补充对应系统的chromedriver等
配置WebDriverManager使用本地驱动
- 将下载好的驱动文件放到构建仓库的指定目录,比如
src/test/resources/drivers/linux/,并给Linux下的驱动添加执行权限:chmod +x geckodriver msedgedriver - 在代码中指定本地驱动路径,示例:
// Firefox + Docker 配置本地驱动 WebDriverManager.firefoxdriver() .browserInDocker() .linux() .driverPath("/build/repo/path/src/test/resources/drivers/linux/geckodriver") .setup(); // 如果涉及Edge,同理配置 WebDriverManager.edgedriver() .browserInDocker() .linux() .driverPath("/build/repo/path/src/test/resources/drivers/linux/msedgedriver") .setup();
或者通过系统属性直接指定:
System.setProperty("webdriver.gecko.driver", "/build/repo/path/src/test/resources/drivers/linux/geckodriver"); WebDriver driver = new FirefoxDriver();
额外注意事项
- 驱动版本必须与Docker中运行的浏览器版本严格匹配,避免兼容性问题
- 若使用自定义Docker镜像,可将驱动文件直接打包进镜像,避免每次构建时的路径配置
- 确保CI/CD环境有权限访问构建仓库中的驱动文件
内容的提问来源于stack exchange,提问作者Sabina Firek
相关产品推荐
相关产品推荐

