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

Specflow/Selenium tests run simultaneously on same browser (and interfere)

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

我设置了这些 classes 以重复使用浏览器 window:

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();
    }
}

示例步骤class:

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

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

    //step definitions here

}

当我单击 "Run All" 时,它们都会启动,并且 运行 会同时启动 window:

我不希望他们同时 运行 在同一个 window 上。我怎样才能让它们按顺序到达 运行?使用测试播放列表不是一种选择。我也会在不同的 windows 上接受 运行ning,但是当它们的行为与它们的行为相同时,测试会相互干扰并导致它们失败。他们 运行 成功 运行 个人。

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

[assembly: CollectionBehavior(DisableTestParallelization = true)]

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

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