У меня проблема при попытке сделать то, что написано в названии. Когда я запускаю это локально, он запускает 2 экземпляра Chrome, однако он использует только один из браузеров для обоих тестов, а не каждый браузер для каждого теста. Есть идеи, как это правильно настроить?

public class BaseClass
{
    public IWebDriver driver; 

    [SetUp]
    public void BaseSetUp() 
    {
        driver = new ChromeDriver();
        driver.Manage().Window.Maximize();
    } 

    [TearDown]
    public void BaseTearDown() 
    {
        driver.Quit();
    }
}
[Parallelizable(ParallelScope.All)]
[TestFixture]

public class DerivedClass : BaseClass
{
    [TestCase("https://www.python.org/", "Welcome to Python.org")]
    [TestCase("https://www.w3.org/", "World Wide Web Consortium (W3C)")]
    public void Test3(string url, string title)
    {
        driver.Navigate().GoToUrl(url);
        Thread.Sleep(4500);
        Assert.AreEqual(driver.Title, title);
    }
}
0
agleno 10 Мар 2021 в 14:14

1 ответ

Лучший ответ

Вы действительно создаете драйвер дважды, но сохраняете оба экземпляра в одном и том же поле члена, driver. Причина этого в том, что NUnit использует один и тот же экземпляр тестового класса для всех тестов в этом классе. (В следующем выпуске будет доступна новая функция для использования отдельного экземпляра, но сейчас это вам не поможет.)

Поскольку тесты выполняются параллельно, первый запускаемый тест выполняет настройку и сохраняет драйвер в этом поле. Затем запускается второй тест, который сохраняет его экземпляр в том же поле. Невозможно точно предсказать, когда - во время выполнения тестов - произойдет замена. Однако это, скорее всего, будет происходить постоянно при повторном запуске на той же машине.

В случае с примером решение простое. Если вы хотите, чтобы каждый тестовый пример использовал отдельный экземпляр драйвера, создайте драйвер внутри самого теста, возможно, вызвав метод, который централизует всю вашу инициализацию.

Важно помнить, что ParallelizableAttribute используется, чтобы сообщить NUnit, что тест может выполняться параллельно. NUnit принимает это как обещание, но если вы разделяете состояние между тестами, они не будут работать правильно.

1
Charlie 10 Мар 2021 в 15:45