使用ChromeDriver2.37+Selenium2.45测试Angular网站遇随机连接关闭异常
解决ChromeDriver与Selenium WebDriver随机ConnectionClosed异常
嘿,我之前也帮不少人解决过类似的ChromeDriver+Selenium在Angular测试里的随机连接问题,结合你的环境(ChromeDriver 2.37 + Selenium 2.45),给你几个实打实的排查和解决方向:
1. 先搞定版本兼容性——这是最常见的坑
你的Selenium和ChromeDriver版本差得有点远啊:Selenium 2.45是2015年的老版本,ChromeDriver 2.37只适配Chrome 64-66版本。如果你的Chrome浏览器版本高于66,那随机连接异常基本是板上钉钉的事。
- 要么降级Chrome浏览器到64-66版本,要么升级Selenium到3.x系列(至少3.4以上,和ChromeDriver 2.37兼容)。记住核心规则:ChromeDriver的版本要和Chrome主版本号对应,比如2.37对应Chrome 64-66,这个不用查外链,记准就行。
2. 给Angular页面加“智能等待”,别着急操作
Angular页面全是异步加载,你执行moveto的时候,元素可能还没完全绑定好,就容易触发连接异常:
- 别用
Thread.sleep()这种笨办法,换成Selenium的WebDriverWait结合显式等待条件,比如等元素可交互了再动它。举个Java示例:WebDriverWait wait = new WebDriverWait(driver, 10); WebElement targetElement = wait.until(ExpectedConditions.elementToBeClickable(By.id("your-element-id"))); Actions actions = new Actions(driver); actions.moveToElement(targetElement).perform(); - 要是能等Angular的
$http请求都完成了再操作,稳定性会更高,你可以自己写个等待Angular加载完成的方法。
3. 给ChromeDriver加几个启动参数,稳一波
试试添加这些参数,能减少不少渲染和权限相关的异常:
ChromeOptions options = new ChromeOptions(); options.addArguments("--no-sandbox"); // 禁用沙箱,避免权限问题 options.addArguments("--disable-gpu"); // 禁用GPU加速,减少渲染bug options.setPageLoadStrategy(PageLoadStrategy.NORMAL); // 等页面所有资源加载完再继续 ChromeDriver driver = new ChromeDriver(options);
4. 测试完一定要彻底清理ChromeDriver进程
如果测试结束只关了浏览器没杀ChromeDriver进程,时间久了会占端口、耗资源,随机异常就找上门了:
- 测试用例的收尾方法里,一定要用
driver.quit(),别用driver.close()——quit()会彻底干掉ChromeDriver进程,close()只是关个标签页。 - 测试前也可以手动清一下残留进程:
Windows用命令:
Linux/macOS用:taskkill /F /IM chromedriver.exe /IM chrome.exepkill -f chromedriver pkill -f chrome
5. 查端口占用+调超时时间
异常里的60430是ChromeDriver随机分配的端口,要是被其他进程占了,连接肯定崩:
- 测试前查一下这个端口的占用情况:
Windows:netstat -ano | findstr :60430
Linux/macOS:lsof -i :60430 - 给Selenium加个更长的超时时间,别因为响应慢就直接断连:
driver.manage().timeouts().setScriptTimeout(30, TimeUnit.SECONDS); driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
建议先从版本兼容性开始排查,这是这类问题的头号元凶,按这个顺序试下来,应该能解决那个随机的ConnectionClosed异常。
内容的提问来源于stack exchange,提问作者Priya
相关产品推荐
相关产品推荐

