ChromeDriver启动报错:参数无效、端口不可用问题求助
搞定ChromeDriver启动失败的那些坑(Port not available + CreatePlatformSocket错误)
嘿,看你的报错信息,核心问题就是ChromeDriver没法正常启动——一会儿说端口不可用,一会儿又蹦出CreatePlatformSocket()的参数错误,再加上你系统里有_JAVA_OPTIONS=-Djava.net.preferIPv4Stack=true的设置,这几个因素凑一块就出问题了。下面给你几个针对性的解决方案,一个个试过来应该能搞定:
1. 先解决端口占用的问题
ChromeDriver默认会随机挑端口,但有时候刚好被其他程序占了,咱可以手动指定一个没被用的端口:
修改你代码里启动ChromeDriver的部分,加上端口参数就行:
System.setProperty("webdriver.chrome.driver","F:\\Chromedriver\\chromedriver_win32\\chromedriver.exe"); // 新增ChromeOptions配置,指定端口 ChromeOptions options = new ChromeOptions(); options.addArguments("--remote-debugging-port=9515"); // 选个比如9515这种常用未占用端口 driver = new ChromeDriver(options);
另外,你也可以用命令行查一下占用报错里那个17873端口的进程:打开cmd,输入netstat -ano | findstr :17873,找到进程ID后,在任务管理器里结束它,再重新跑测试。
2. 修复_JAVA_OPTIONS的IPv4设置冲突
你系统里设置的-Djava.net.preferIPv4Stack=true可能和ChromeDriver的网络逻辑冲突了,先临时试试禁用这个环境变量:
- 打开cmd,输入
set _JAVA_OPTIONS=,清空这个变量; - 然后在同一个cmd窗口里运行你的Java测试程序,看看能不能正常启动ChromeDriver。
如果管用,你可以永久修改环境变量,把-Djava.net.preferIPv4Stack=true删掉,或者直接在你的测试代码开头覆盖这个设置:
// 代码最开头加这句,取消强制IPv4 System.setProperty("java.net.preferIPv4Stack", "false");
3. 检查版本兼容性,别让版本不匹配拖后腿
你的Selenium版本是2.53.1,ChromeDriver是2.38,这俩版本其实兼容性不太好:
- ChromeDriver 2.38对应的Chrome浏览器版本是65-67,先确认你的Chrome版本是不是在这个区间;
- 建议要么把Selenium升级到3.x的稳定版(比如3.8.1及以上,和ChromeDriver2.38匹配),要么把ChromeDriver降级到和Selenium2.53.1适配的版本(比如ChromeDriver2.29,对应Chrome56-58)。
4. 确认ChromeDriver的路径和权限没问题
- 先检查
chromedriver.exe的路径是不是完全正确,别带空格或者特殊字符,有时候路径里有空格会导致识别失败; - 试试右键
chromedriver.exe,选“以管理员身份运行”,或者给这个文件加读写执行的权限; - 也可以把
chromedriver.exe放到系统PATH里的文件夹(比如C:\Windows),这样代码里不用写完整路径,直接System.setProperty("webdriver.chrome.driver","chromedriver.exe");就行。
给你整理好的修改后代码(直接用就行)
package automationFramework; import java.util.concurrent.TimeUnit; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; import appModules.SignIn_Action; import utility.Constant; import utility.ExcelUtils; public class Apache_POI_TC { private static WebDriver driver=null; public static void main(String[] args) throws Exception { // 可选:覆盖IPv4强制设置 System.setProperty("java.net.preferIPv4Stack", "false"); ExcelUtils.setExcelFile(Constant.Path_TestData + Constant.File_TestData,"Sheet1"); System.setProperty("webdriver.chrome.driver","F:\\Chromedriver\\chromedriver_win32\\chromedriver.exe"); // 指定端口避免占用问题 ChromeOptions options = new ChromeOptions(); options.addArguments("--remote-debugging-port=9515"); driver = new ChromeDriver(options); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get(Constant.URL); SignIn_Action.execute(driver); System.out.println("Login Successfully, now it is the time to Log Off buddy."); driver.quit(); ExcelUtils.setCellData("Pass", 1, 3); } }
内容的提问来源于stack exchange,提问作者liki
相关产品推荐
相关产品推荐

