You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

【技术问询】Selenium测试问题:C#+NUnit环境下测试结束后Chrome浏览器无法关闭

解决Selenium+NUnit中Chrome浏览器无法自动关闭的问题

我帮你排查下代码里的关键问题,核心原因和修复方案如下:

1. 致命问题:Assert.Pass() 阻断了后续代码执行

你代码里的 Assert.Pass(); 会立即终止当前测试方法,后面的 driver.Close(); 和 driver.Quit(); 完全没有机会运行,这就是浏览器一直无法自动关闭的主要原因。NUnit会根据你之前的断言(比如StringAssert.AreEqualIgnoringCase)自动判断测试是否通过,完全不需要手动调用Assert.Pass()。

2. 次要问题:驱动实例重复初始化

你先创建了一个无参数的ChromeDriver,之后又重新new了一个带ChromeOptions的实例,这不仅浪费资源,还可能导致之前的实例没有被正确清理。

3. 最优修复方案:用using语句自动管理驱动生命周期

最佳实践是用using块包裹IWebDriver实例,这样不管测试成功还是失败,都会自动调用Dispose()方法,确保浏览器被关闭、驱动进程被终止,彻底避免资源泄漏。

修正后的完整代码

public void Test1() 
{ 
    // 先配置Chrome浏览器选项
    ChromeOptions options = new ChromeOptions(); 
    options.AddArguments("start-maximized"); 
    options.AddArguments("--disable-extensions"); 

    // 使用using自动管理驱动资源,代码块结束时自动销毁实例
    using (IWebDriver driver = new ChromeDriver(options))
    {
        driver.Navigate().GoToUrl("https://name-of-the-site.com/"); 
        string actualTitle = driver.Title; 
        Console.WriteLine("Site title: " + actualTitle); 
        
        string expectedTitle = "name of the site"; 
        StringAssert.AreEqualIgnoringCase(expectedTitle, actualTitle); 
        
        if (actualTitle.Equals(expectedTitle, StringComparison.OrdinalIgnoreCase)) 
        { 
            Console.WriteLine("Title Confirmed"); 
        } 
        else 
        { 
            Console.WriteLine("Title Not Confirmed"); 
        }
    } // 这里会自动执行driver.Dispose(),等价于Close()+Quit()的组合效果
}

额外细节说明

  • using语句会在代码块结束时自动触发IWebDriver的Dispose()方法,这个方法内部会先关闭所有浏览器窗口,再终止ChromeDriver后台进程,比手动调用Close()+Quit()更可靠。
  • 把变量名check改成actualTitle,让代码语义更清晰,符合测试用例的命名习惯。
  • 字符串比较用StringComparison.OrdinalIgnoreCase比直接==更严谨,能避免因系统文化差异导致的判断错误。

内容的提问来源于stack exchange,提问作者user3766600

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 01:19:07