Тесты Specflow/Selenium выполняются одновременно в одном браузере (и мешают)

У меня есть несколько тестов, написанных на 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();
    }
}

Пример класса Steps:

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

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

    //step definitions here

}

Когда я нажимаю «Выполнить все», они оба запускаются и работают в одном окне:

введите здесь описание изображения

Я не хочу, чтобы они запускались одновременно в одном окне. Как заставить их работать последовательно? Использование тестового плейлиста не вариант. Я бы также согласился работать в разных окнах, но когда они ведут себя так, как они, тесты мешают друг другу и приводят к их сбою. Они успешно работают при индивидуальном запуске.


person tnw    schedule 07.06.2017    source источник
comment
Какой тестовый бегун вы используете? SpecFlow+Runner, NUnit, MSTest, xUnit?   -  person Andreas Willich    schedule 07.06.2017
comment
Я хочу, чтобы в тестах повторно использовалось окно браузера. Есть ли причина, по которой вы хотите повторно использовать браузер? Позже вы упомянули, что я бы также согласился работать в разных окнах, это звучит противоречиво первому утверждению. Будет ли достаточно решения, в котором эти тесты запускаются одновременно в отдельных изолированных браузерах?   -  person mrfreester    schedule 07.06.2017
comment
@mrfreester Хочу, но не нужно. Я был бы в порядке с изолированными экземплярами браузера.   -  person tnw    schedule 07.06.2017
comment
@AndreasWillich Я использую xUnit для запуска своих тестов.   -  person tnw    schedule 07.06.2017


Ответы (1)


Решение заключалось в том, чтобы добавить в AssemblyInfo.cs следующее:

[assembly: CollectionBehavior(DisableTestParallelization = true)]

Это говорит xUnit не запускать тесты параллельно.

Ссылка: https://xunit.github.io/docs/running-tests-in-parallel.html

person tnw    schedule 07.06.2017
comment
Очень приятно :) Для решения для отдельных браузеров вы также можете сделать драйвер нестатичным и установить его в методе BeforeScenario. Ваше здоровье! - person mrfreester; 07.06.2017
comment
@mrfreester Приятно знать. Это маршрут, по которому я могу пойти, чтобы выполнять тесты одновременно, не мешая им. Спасибо! - person tnw; 07.06.2017
comment
@tnw большое спасибо за это. Я пытался настроить параллельные тесты с задействованной базой данных, но безрезультатно :/ И это помогло мне, по крайней мере, запустить их последовательно. - person Jan Iwanow; 27.02.2021