Запуск нескольких экземпляров браузера при выполнении теста - PullRequest
0 голосов
/ 15 октября 2018

Я новый в specflow, я реализую фреймворк.Когда я создаю один файл объектов с несколькими сценариями и выполняю свой тест, он открывает один экземпляр браузера и запускается успешно, когда я добавляю еще один файл объектов с несколькими сценариями и выполняю свой тест, чем при запуске нескольких экземпляров браузера один экземпляр для каждого сценария.мне что не так в моем коде

Start.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TechTalk.SpecFlow;

namespace Orange_HRM
{
    class Start : SeleniumDriver
    {

      [BeforeScenarioBlock]
        public void Setup()
        {
            Intitialize();
            WebDriver.Navigate().GoToUrl(BaseAddress);
        } 

        [AfterScenarioBlock]
        public void TearDown()
        {
            Close();
        }
    }
}

SeleniumDriver.cs

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Orange_HRM
{
    class SeleniumDriver
    {

        public static IWebDriver WebDriver;


        public static string BaseAddress
        {
            get { return Constants.Url; }
        }

        public static void Intitialize()
        {
            WebDriver = new ChromeDriver();
            WebDriver.Manage().Window.Maximize();
            TurnOnWait();
        }

        public static void Navigate()
        {
            WebDriver.Navigate().GoToUrl(BaseAddress);
        }

        public static void Close()
        {
            WebDriver.Close();
        }

        public static void Quit()
        {
            WebDriver.Quit();
        }

        private static void TurnOnWait()
        {
            WebDriver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
            WebDriver.Manage().Timeouts().PageLoad = TimeSpan.FromMinutes(2);
        }

    }
}

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Вы можете инициализировать и закрыть драйвер на уровне Test Run вместо уровня сценария.И поддерживайте только навигацию по URL на уровне сценария.Таким образом, драйвер будет запущен до начала теста и завершится после его завершения.Также страница будет обновляться перед каждым запуском сценария.

namespace Orange_HRM
{
    class Start : SeleniumDriver
    {

      [BeforeTestRun]
        public static void Setup()
        {
            Intitialize();
        } 

        [AfterTestRun]
        public static void TearDown()
        {
            Quit();
        }

        [AfterScenarioBlock]
        public void navigateToUrl()
        {
            WebDriver.Navigate().GoToUrl(BaseAddress);
        } 
    }
}

Также вы использовали WebDriver.Close () вместо WebDriver.Quit ().Если мы используем WebDriver.Close () для главного окна, то сеанс будет прерван.Затем, если мы попытаемся снова получить доступ к тому же объекту веб-драйвера, он выдаст сообщение «Нет такой ошибки сеанса».

WebDriver.Close () предназначен для закрытия дочернего окна, если мы работаем с несколькими окнами.Таким образом, чтобы закрыть главное окно, мы должны использовать WebDriver.Quit () напрямую.

0 голосов
/ 15 октября 2018

Вы используете SpecFlow из techtalk.Имя концепции - Hooks.
для выполнения автоматических логических операций в определенные моменты времени. Так что ловушки - это привязки событий.запуск тестов в нескольких потоках с SpecFlow + Runner.

Итак, вы можете выставлять ордера,

class Start : SeleniumDriver
{
[BeforeScenario(Order = 0)]
public void Setup()
        {
            Intitialize();
            WebDriver.Navigate().GoToUrl(BaseAddress);
        } 

[BeforeScenario(Order = 1)]
public void TearDown()
        {
            Close();
        }
}

Я хотел бы предложить вам не использовать их, класс привязок без хуков.то есть [BeforeTestRun] [AfterTestRun] использовать их вместо.

[AfterScenario]
public void CleanUp()
{
    if (seleniumDriver != null)
    {
        SeleniumDriver.Dispose();
        seleniumDriver = null;
    }
}
...