Specflow / Selenium测试在同一浏览器上同时运行(并干扰)

时间:2017-06-07 16:18:25

标签: c# selenium visual-studio-2015 selenium-chromedriver specflow

我有一些用SpecFlow和Selenium编写的测试。我希望他们暂时按顺序运行。出于某种原因,它们会在同一浏览器窗口上同时启动并相互干扰。我确实希望测试重新使用浏览器窗口,但我显然不希望它们在同一个窗口上同时运行。

我已经设置了这些类来重用浏览器窗口:

public class SeleniumContext
{
    public ChromeDriver WebDriver { get; set; }
    public SeleniumContext()
    {
        ChromeOptions options = new ChromeOptions();
        options.SetLoggingPreference(LogType.Browser, LogLevel.All);
        options.AddArgument("no-sandbox");

        WebDriver = new ChromeDriver("./", options, TimeSpan.FromSeconds(240));
    }
}

[Binding]
public class BeforeAllTests
{
    private readonly IObjectContainer objectContainer;
    private static SeleniumContext seleniumContext;

    public BeforeAllTests(IObjectContainer container)
    {
        this.objectContainer = container;
    }

    [BeforeTestRun]
    public static void RunBeforeAllTests()
    {
        seleniumContext = new SeleniumContext();
    }

    [BeforeScenario]
    public void RunBeforeScenario()
    {
        objectContainer.RegisterInstanceAs<SeleniumContext>(seleniumContext);
    }

    [AfterTestRun]
    public static void afterRun()
    {
        seleniumContext.WebDriver.Quit();
    }
}

示例步骤类:

[Binding]
public sealed class LogInSteps
{
    private ChromeDriver driver;

    public LogInSteps(SeleniumContext seleniumContext)
    {
        this.driver = seleniumContext.WebDriver;
    }

    //step definitions here

}

当我点击“全部运行”时,它们都会启动并在同一窗口上运行:

enter image description here

我不希望它们在同一个窗口上同时运行。如何让它们按顺序运行?使用测试播放列表不是一种选择。我也可以在不同的窗口上运行,但是当它们像他们那样行事时,测试会相互干扰并导致它们失败。它们在单独运行时会成功运行。

1 个答案:

答案 0 :(得分:2)

解决方案是将以下内容添加到AssemblyInfo.cs:

[assembly: CollectionBehavior(DisableTestParallelization = true)]

这告诉xUnit不要并行运行测试。

参考:https://xunit.github.io/docs/running-tests-in-parallel.html