Запуск нескольких тестов nUnit вызывает ошибку «Нет соединения», но работает индивидуально (JetBrains Rider) - PullRequest
0 голосов
/ 07 ноября 2018

У меня очень простая структура Selenium c #:

using System;
using System.Timers;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

namespace ConsoleApplication2
{
    internal class Program
    {
        IWebDriver driver = new ChromeDriver();
        
        public static void Main(string[] args)
        {
            
        }

        [SetUp]
        public void Initialize()
        {
            driver.Navigate().GoToUrl("https://www.google.pt/");
            Console.WriteLine("INITIALIZE complete");
        }
        
        [Test]
        public void TestGoogleSearch()
        {
            IWebElement element = driver.FindElement(By.Name("q"));
            
            element.SendKeys("ivo cunha");
            Console.WriteLine("IVO complete");
        }
        
        [Test]
        public void TestGoogleSearch2()
        {
            IWebElement element = driver.FindElement(By.Name("q"));
            
            element.SendKeys("adam o'brien");
            Console.WriteLine("ADAM complete");
        }
        
        [TearDown]
        public void CleanUp()
        {
            System.Threading.Thread.Sleep(2500);
            driver.Close();
            driver.Quit();
            driver.Dispose();
            Console.WriteLine("CLEANUP complete");
        }
    }
}

Когда я запускаю каждый тестовый блок, каждый проходит. Но если я запускаю все тестовые модули (в данном случае только 2), происходит сбой со следующей ошибкой:

OpenQA.Selenium.WebDriverException: непредвиденная ошибка. System.Net.WebException: Невозможно подключиться к удаленному серверу ---> System.Net.Sockets.SocketException: Невозможно установить соединение, так как целевой компьютер активно отказал ему 127.0.0.1:57535

Screenshot of the results when running all tests

Как я могу это исправить, чтобы я мог запустить все тесты в серии?

1 Ответ

0 голосов
/ 07 ноября 2018

Когда вы создаете экземпляр ChromeDriver, он создает сокет, который используется для тестов.

Затем вы используете TearDown, который запускается после каждого теста, поэтому он в основном закрывает соединение после TearDown и не открывает его снова для второго теста.

Так что вы либо:

  • Закрыть ChromeDriver только после завершения всех испытаний.
  • Закрыть ChromeDriver и создавать новый экземпляр после каждого теста.

Вот пример со вторым решением

using System;
using System.Timers;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

namespace ConsoleApplication2
{
    internal class Program
    {
        IWebDriver driver = null;

        public static void Main(string[] args)
        {

        }

        [SetUp]
        public void Initialize()
        {
            driver = new ChromeDriver();
            driver.Navigate().GoToUrl("https://www.google.pt/");
            Console.WriteLine("INITIALIZE complete");
        }

        [Test]
        public void TestGoogleSearch()
        {
            IWebElement element = driver.FindElement(By.Name("q"));

            element.SendKeys("ivo cunha");
            Console.WriteLine("IVO complete");
        }

        [Test]
        public void TestGoogleSearch2()
        {
            IWebElement element = driver.FindElement(By.Name("q"));

            element.SendKeys("adam o'brien");
            Console.WriteLine("ADAM complete");
        }

        [TearDown]
        public void CleanUp()
        {
            System.Threading.Thread.Sleep(2500);
            driver.Close();
            driver.Quit();
            driver.Dispose();
            Console.WriteLine("CLEANUP complete");
        }
    }
}
...