selenium - NUnit Specflow cómo compartir una instancia de clase para todas las pruebas
(1)
Estoy usando Specflow con NUnit y Selenium y quiero compartir la instancia del controlador en todas las pruebas. Puedo hacer esto hasta el nivel de función con FeatureContext pero no puedo ver nada para todas las pruebas. Soy consciente de que probablemente este no sea el camino correcto, pero quiero saber si hay un camino.
Por favor, ayuda con los ejemplos.
Gracias
Hay algunas formas de hacer esto. La mayoría están cubiertos en esta página
Lo que probablemente haría personalmente es definir una clase
SeleniumContext
y requerir esta clase en todos mis constructores de clases Step, luego decirle al IOC de SpecFlow que use la misma instancia en cada escenario:
Primero cree la clase para contener la instancia del controlador de selenio
public class SeleniumContext
{
public SeleniumContext()
{
//create the selenium context
WebDriver = new ...create the flavour of web driver you want
}
public IWebDriver WebDriver{get; private set;}
}
luego configure el COI para devolver la misma instancia cada vez
[Binding]
public class BeforeAllTests
{
private readonly IObjectContainer objectContainer;
private static SeleniumContext seleniumContext ;
public BeforeAllTests(IObjectContainer container)
{
this.objectContainer = container;
}
[BeforeTestRun]
public static void RunBeforeAllTests()
{
seleniumContext = new SeleniumContext();
}
[BeforeScenario]
public void RunBeforeScenario()
{
objectContainer.RegisterInstanceAs<SeleniumContext>(seleniumContext );
}
}
Luego, asegúrese de que sus clases de pasos siempre soliciten el contexto en sus constructores (debe hacerlo en cada clase de pasos que tenga)
[Bindings]
public class MySteps
{
private SeleniumContext seleniumContext;
public MyClass(SeleniumContext seleniumContext)
{
//save the context so you can use it in your tests
this.seleniumContext = seleniumContext;
}
//then just use the seleniumContext.WebDriver in your tests
}
alternativamente, si ya está almacenando la instancia en el contexto de la característica, puede usar el
BeforeFeature
para guardar la misma instancia:
[Binding]
public class BeforeAllTests
{
private static WebDriver webDriver;
[BeforeTestRun]
public static void RunBeforeAllTests()
{
webDriver = new WebDriver();
}
[BeforeFeature]
public static void RunBeforeFeature()
{
FeatureContext["WebDriver"] = webDriver;
}
}