Создайте новый класс, который обернет ваш веб-драйвер, и передайте его вашим определениям шагов. Этот класс предоставит метод для перезапуска браузера. Поскольку все другие определения шагов должны быть переданы этой обертке, они всегда должны получать веб-драйвер от этой обертки, что исключает необходимость перерегистрации его в BoDi.
public class WebDriverManager
{
private IWebDriver driver;
public IWebDriver Driver
{
get
{
if (driver == null)
{
driver = new [Chrome|Firefox]Driver(...);
}
return driver;
}
}
public void RestartBrowser()
{
driver.Quite();
driver.Dispose();
driver = null;
}
}
и регистрации его в BoDi:
[Binding]
public class SpecFlowSteps
{
private IObjectContainer container;
public SpecFlowSteps(IObjectContainer container)
{
this.container = container;
}
[BeforeScenario]
public void RegisterWebDriverManager()
{
var manager = new WebDriverManager();
container.Register(manager);
}
}
И пример использования в ваших определениях шагов:
[Binding]
public class YourSteps
{
private WebDriverManager driverManager;
private IWebDriver Driver => driverManager.Driver;
public YourSteps(WebDriverManager driverManager)
{
this.driverManager = driverManager;
}
[When(@"I restart the browser")]
public void WhenIRestartTheBrowser()
{
// Or whatever you call the step
driverManager.RestartBrowser();
}
}