我有一些用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
}
当我点击“全部运行”时,它们都会启动并在同一窗口上运行:
我不希望它们在同一个窗口上同时运行。如何让它们按顺序运行?使用测试播放列表不是一种选择。我也可以在不同的窗口上运行,但是当它们像他们那样行事时,测试会相互干扰并导致它们失败。它们在单独运行时会成功运行。
答案 0 :(得分:2)
解决方案是将以下内容添加到AssemblyInfo.cs:
[assembly: CollectionBehavior(DisableTestParallelization = true)]
这告诉xUnit不要并行运行测试。
参考:https://xunit.github.io/docs/running-tests-in-parallel.html