如何为Selenide库配置代理?解决ChromeDriver下载异常问题
看起来你遇到的问题是Maven本身的代理配置已经生效(能正常下载依赖),但Selenide依赖的WebDriverManager在下载ChromeDriver时没走代理,导致UnknownHostException。这是因为Maven的settings.xml只控制Maven自身的依赖拉取,而WebDriverManager是在测试运行阶段通过Java代码发起HTTP请求,需要单独配置代理。
下面是几种可行的解决方案:
1. 通过Maven命令行添加JVM代理参数
直接在你的Maven命令中加入Java系统属性,指定HTTP/HTTPS代理,WebDriverManager会自动读取这些参数:
mvn clean test site -Dhttp.proxyHost=你的代理地址 -Dhttp.proxyPort=代理端口 -Dhttps.proxyHost=你的代理地址 -Dhttps.proxyPort=代理端口
如果代理需要认证,还要追加认证参数:
-Dhttp.proxyUser=用户名 -Dhttp.proxyPassword=密码 -Dhttps.proxyUser=用户名 -Dhttps.proxyPassword=密码
2. 在代码中显式配置WebDriverManager的代理
如果你不想每次都在命令行加参数,可以在测试代码初始化WebDriver前,直接给WebDriverManager指定代理:
import io.github.bonigarcia.wdm.WebDriverManager; // 在启动浏览器前配置代理 WebDriverManager.chromedriver() .proxy("http://你的代理地址:端口") // 若代理需要认证,添加以下两行 .proxyUser("用户名") .proxyPass("密码") .setup();
这样就能强制WebDriverManager走指定代理下载ChromeDriver。
3. 通过系统环境变量配置
你也可以设置操作系统的环境变量,让WebDriverManager自动读取代理配置:
- Windows(命令行):
set HTTP_PROXY=http://用户名:密码@代理地址:端口 set HTTPS_PROXY=http://用户名:密码@代理地址:端口
- Linux/macOS(终端):
export HTTP_PROXY=http://用户名:密码@代理地址:端口 export HTTPS_PROXY=http://用户名:密码@代理地址:端口
设置完成后再运行你的Maven命令即可。
为什么Maven的settings.xml没起作用?
Maven的settings.xml代理配置只服务于Maven自身的依赖下载流程,而WebDriverManager是在测试运行时由Java程序发起的独立HTTP请求,不会读取Maven的代理配置,所以必须单独为它配置代理。
你的报错信息也明确了问题核心:
java.net.UnknownHostException: chromedriver.storage.googleapis.com
io.github.bonigarcia.wdm.WebDriverManagerException: java.net.UnknownHostException: chromedriver.storage.googleapis.com
at io.github.bonigarcia.wdm.WebDriverManager.handleException(WebDriverManager.java:475)
...
这个错误说明WebDriverManager无法解析目标域名,本质是请求未走代理导致无法访问外部网络。
内容的提问来源于stack exchange,提问作者Ivan Gerasimenko

