Здравствуйте, по какой-то причине открывается второй экземпляр браузера
Берем один и тот же тест, переработанный для Nunit и Specflow(+Nunit)
Nunit тест инициализаируется в начале и отрабатывает ок, бразуер открывается 1
[OneTimeSetUp]
public void Init()
{
driver = new WebDriver().Driver;
}
Specflow тест запускается посредством Nunit и отрабатывает тоже ок, но за одним исключением
Инициализация драйвера
[BeforeScenario]
public void Init()
{
driver = new WebDriver().Driver;
}
Но в текущем случае, запускается сперва 1 экземпляр браузера, а затем второй, в котором тест отрабатывает
Собственно, как я понял дело в аннотациях перед тестом [BeforeScenario],[Before] всяко пробовал, но почему то результат один
Думаю, если вы уберете аннотацию [OneTimeSetup]
то два броузера не будут запускаться. Это чисто NUnit’ овская вещь. Для SpecFlow лучше перед сценарием запускать броузер и закрывать его после сценария. Для NUnit тоже, есть аннотации [SetUp]
, [TearDown]
.
убирал, оставлял только [BeforeScenario] или [Before]
прикольно, нашел зависимость, у меня 2 файла feature и 2 класса с нимим связанных
в обоих классах стоит [Binding], собственно запускаю 1 тест, но он видимо для всех указанных [Binding] запускает браузер.
Добавил 3й класс, запустились 3 браузера.
Тогда другой вопрос, как при запуске 1 теста запускать 1 браузер с учетом выявленной проблемы? конкретно в каждом классе отдельно инициализировать и закрывать драйвер?
При использовании общего класса инициализации и закрытия драйвера получается проблема.
Я бы сделал отдельный Hooks.cs
для Scenario from Features, а классические NUnit тесты пускай наследуются как обычно. Тогда для классических тестов и для сценариев будет своя система запуска. Вообще, если видеть проект, его структуру текущую, то легче сказать.
Всю структуру сложно скинуть, могу только чуть описать
Есть 1 файл feature там 2 сценария Given, When, Then
Каждый класс по сценарию начинается с
[Binding]
public class Test : BaseTest
{
Given
When
Then}
В самом BaseTest инициализация
public void Init()
{
driver = new WebDriver().Driver;
}
Из за того, что в начале каждого класса у меня [Binding] он для каждого теста инициализирует браузер.
Получается запускаем пачку из 2х тестов,
прогон теста 1 - запуск 2х браузеров
прогоне теста 2 - запуск 2х браузеров
Может я чего неверно делаю, не знаю
Nunit тесты вообще не трогаю.
Еще момент, как я понимаю SpecFlow ищет все аннотации [Binding] в классах проекта и для каждого из них срабатывает аннотация [BeforeScenario] или что то путаю?
- Сделай класс
Hooks
который будет наследовать от BaseTest.
- Добавь ему аннотацию `[Binding].
- Добавь property -
private readonly IObjectContainer _objectContainer;
- Добавь два метода -
[BeforeScenario]
public void Init()
{
driver = new WebDriver().Driver;
_objectContainer.RegisterInstanceAs(_driver);
}
[AfterScenario]
public void Init()
{
driver.close()// закрытие броузера
}
- Steps классы не должны наследовать от BaseTest класса.
- Верхушка степ класса должна быть похожей на это:
[Binding]
public class CommonSteps
{
private readonly Driver _driver;
public CommonSteps(Driver driver)
{
commonWebElementsPageObject = new CommonWebElementsPageObject(driver);
_driver = driver;
}
В этом случае у тебя будет организована Dependency Injection, а броузер будет открываться один раз.
1 лайк