当前运行测试时,Chrome驱动程序的堆栈会堆积起来,并且从未完全关闭
已尝试使用:
driver.Close();
driver.Quit();
driver.Dispose();
与此讨论相关的
但在测试运行/完成后,Chrome驱动程序似乎仍然存在。
场景挂钩后:
[AfterScenario]
public void AfterScenario()
{
var driver = _objectContainer.Resolve<IWebDriver>();
driver?.Quit();
driver?.Dispose();
}
后特征挂钩:
[AfterFeature]
public static void AfterFeature(FeatureContext featureContext)
{
var driverService = featureContext.Get<ChromeDriverService>();
driverService.Dispose();
}
目前正在并行运行4个测试,因此希望避免意外关闭所有浏览器。
已确认在场景结束时调用AfterScenario
,但当它们堆积起来时,它们似乎仍然潜伏在本地,并使我的机器减速。如前所述,我尝试过driver.Close()
,但这并没有帮助。
- 色度:85.0.4183.8700
- 规格流量-3.0.225
- Selenium网络驱动程序-3.141
由于您已经有ChromeDriverService可用,请在[AfterScenario]
挂钩中显式终止进程:
[AfterScenario]
public void AfterScenario()
{
// Add a FeatureContext parameter to the class constructor if need be
var driverService = featureContext.Get<ChromeDriverService>();
var driver = _objectContainer.Resolve<IWebDriver>();
try
{
if (driverService.ProcessId != default)
{
Trace.WriteLine("Attempting to kill web driver service process #" + driverService.ProcessId);
var process = Process.GetByProcessId(driverService.ProcessId);
process.Kill();
Trace.WriteLine(" > Done killing process #" + driverService.ProcessId);
}
}
catch (Exception ex)
{
Trace.WriteLine("Exception thrown when killing web driver service: " + ex);
}
try
{
driverService.Dispose();
Trace.WriteLine("Web driver service disposed of.");
}
catch (Exception ex)
{
Trace.WriteLine("Exception thrown when disposing of web driver service: " + ex);
}
driver?.Close();
driver?.Quit();
driver?.Dispose();
}
自从Chrome 85以来,我注意到这些ChromeDriver.exe进程不像以前那样容易清理。你可能会认为Dispose()
方法会扼杀这个过程,但最近我不得不添加一些额外的强度清理和错误处理。