【技术问询】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
相关产品推荐
相关产品推荐

