package ch.vorburger.webdriver.runner.core.junit.sugar;
import org.junit.After;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized.Parameter;
import org.openqa.selenium.WebDriver;
import ch.vorburger.webdriver.runner.core.WebDriverProvider;
import ch.vorburger.webdriver.runner.core.junit.WebDriverRunner;
/**
* Abstract convenience test base class.
* With appropriate annotations, and WebDriver available to subclasses.
*
* Sub classes must define the JUnit Parameterized Parameters like this:
* <pre> @Parameters(name = "{0}")
* public static Iterable<<Object[]> webDriverProvidersAndNameData() {
* Iterable<WebDriverProvider> providers = config.getWebDriverProviders();
* return new ParameterizedParameters(providers).webDriverProvidersAndNameData();
* }</pre>
*
* This is just "sugar" - in case e.g. your in-house WD framework already has a
* similar base class, you do not have to use this one of course, and you can just
* copy/pasted (or adapt to your needs) the boilerplate code and annotations below.
*
* @author Michael Vorburger
*/
@RunWith(WebDriverRunner.class)
public abstract class AbstractWebDriverTest {
// Field injected @Parameter preferable over Constructor injection, because Constructor with super would have to be repeated in each test class
// NOTE: Until (if) https://github.com/junit-team/junit/pull/737 makes it in, this HAS to be public (cannot be protected)
@Parameter(value=0) public String webDriverProviderName;
@Parameter(value=1) public WebDriverProvider webDriverProvider;
protected WebDriver w;
@Before public void beforeTest() throws Exception {
w = webDriverProvider.getNewWebDriver();
}
@After public void afterTest() {
w.quit();
}
}