Selenium SpecFlow拆卸打开和关闭多个空白浏览器
我正在将一堆selenium测试用例转换为SpecFlow。一切都很好,但让我抓狂的是,我正在使用一个后场景来执行driver.quit。当它执行时,我大约有4-6个浏览器打开和关闭。在查看任务管理器时,它正在杀死所有chromedriver.exe(第二个在某处打开)和chrome.exe进程,这非常棒。如果我在selenium中运行相同的测试,我只有一个浏览器,它会关闭。当SpecFlow现在运行时,它基本上会在打开和关闭浏览器时为我的运行增加10-20秒 如果我把浏览器换成Firefox,我也会得到同样的结果。一个浏览器打开,完成时,几个空白的firefox浏览器打开和关闭 知道是什么导致了这种行为吗?我到处寻找,除了我,似乎没有人经历过这一切 谢谢你的帮助Selenium SpecFlow拆卸打开和关闭多个空白浏览器,selenium,bdd,specflow,Selenium,Bdd,Specflow,我正在将一堆selenium测试用例转换为SpecFlow。一切都很好,但让我抓狂的是,我正在使用一个后场景来执行driver.quit。当它执行时,我大约有4-6个浏览器打开和关闭。在查看任务管理器时,它正在杀死所有chromedriver.exe(第二个在某处打开)和chrome.exe进程,这非常棒。如果我在selenium中运行相同的测试,我只有一个浏览器,它会关闭。当SpecFlow现在运行时,它基本上会在打开和关闭浏览器时为我的运行增加10-20秒 如果我把浏览器换成Firefox,
[AfterScenario]
public void CleanUp()
{
if (seleniumDriver != null)
{
SeleniumDriver.Dispose();
seleniumDriver = null;
}
}
这是拆卸代码。我将它放在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;
}
}
我们最终做了中描述的事情。它允许在场景之间重复使用浏览器(如果您愿意),并仅在“AfterFeature”(场景运行后除外)关闭所有内容。我也发现打开/关闭浏览器在时间上非常昂贵。在我正在进行的项目中,我们不会关闭浏览器,而是重复使用它,例如,一旦场景完成,导航到不同的起点,或者进行完全刷新。谢谢Ben。不错的选择。奇怪的是,我在运行基本的google测试时没有看到这种行为。我认为这是我的框架,但常规的selenium测试马上就要结束了。我实际上禁用了afterscenario,所以现在我手动关闭它。如果我运行整个套件,我会启用afterscenario并让它关闭它。这不是一个很好的解决办法。你能在问题中包括你的赛后代码吗?如果您也在使用BeforeCasenario钩子代码,请将其包括在内。谢谢你的帮助,本。你还有“TestDriver.Quit();”的代码吗?这是你写的吗?正如Sam建议的答案中所提到的,如果在每个场景结束后都关闭浏览器,则不需要TestCleanup。该链接现在已失效。@BenPower它似乎对我来说工作正常@Sirk这很奇怪,我还是看不到,我只看到一个图标,上面有两个齿轮在旋转。这也许是一个地区性问题?