SpecFlow Teardown打开并关闭多个空白浏览器

时间:2014-08-24 02:12:10

标签: selenium bdd specflow

我正在将一堆硒测试用例转换为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;
        }
    }

1 个答案:

答案 0 :(得分:1)

我们最终完成了this post中描述的内容。它允许在场景之间重复使用浏览器(如果需要),并且仅关闭“AfterFeature”(不在场景运行之后)。