我正在将一堆硒测试用例转换为SpecFlow。一切都运作良好,但令我发疯的是我正在使用一个后场景来做一个driver.quit。当执行时,我有大约4-6个浏览器打开和关闭。在查看任务管理器时,它会杀死所有chromedriver.exe(第二个在某处打开)并且chrome.exe进程成功,这很棒。如果我在selenium中运行相同的测试,我只有一个浏览器并关闭。当SpecFlow现在运行时,它基本上会在我的运行中添加10-20秒,因为它会打开并关闭浏览器。
如果我将浏览器更改为Firefox,我会得到同样的结果。一个浏览器打开,完成后,几个空白的Firefox浏览器打开和关闭。
任何可能导致此行为的想法?我一直在搜索,似乎没有人经历过这个,但我。
感谢帮助。
这是拆解代码。我在basetestobject类中有它,它由specflow类继承。我尝试删除[TestCleanup],但同样的结果适用。
BaseTestObject.cs
public class BaseTestObject
{
private IWebDriver seleniumDriver;
private IDriver testDriver;
[TestInitialize]
public virtual void Setup()
{
TestDriver.goToUrl(ConfigProperties.StartUrl);
}
[AfterScenario]
public void ScenarioTearDown()
{
TestDriver.Quit();
}
[TestCleanup]
public void CleanUp()
{
TestDriver.Quit();
}
public IWebDriver SeleniumDriver
{
get
{
if (seleniumDriver == null)
{
seleniumDriver = GetDriver();
}
return seleniumDriver;
}
}
public IDriver TestDriver
{
get
{
if (testDriver == null)
{
testDriver = new UiDriver(SeleniumDriver);
}
return testDriver;
}
}
public CurrentPageObjectScope On
{
get
{
return new CurrentPageObjectScope(TestDriver);
}
}
public static String GetTimestamp()
{
return DateTime.Now.ToString("yyyyMMddhhmmssfff");
}
public static String GetTimestamp2()
{
return DateTime.Now.ToString("M/d/yyyy");
}
private IWebDriver GetDriver()
{
switch (ConfigProperties.Browser.ToLower())
{
case "firefox":
return new FirefoxDriver();
case "chrome":
ChromeOptions options = new ChromeOptions();
ChromeDriverService service = ChromeDriverService.CreateDefaultService(@"../Chrome/");
service.SuppressInitialDiagnosticInformation = true;
service.HideCommandPromptWindow = true;
options.AddArguments("test-type");
options.AddArgument("--start-maximized");
return new ChromeDriver(service, options);
case "ie":
case "internetexplorer":
return new InternetExplorerDriver(@"../IE/");
default:
throw new NotImplementedException("Unknown browser string in Config properties " + ConfigProperties.Browser);
}
}
编辑9.15.14
通过在我的baseTestObject中添加以下内容来解决。谢谢你的帮助。
[AfterScenario]
public void CleanUp()
{
if (seleniumDriver != null)
{
SeleniumDriver.Dispose();
seleniumDriver = null;
}
}