package com.redheap.selenium.junit; import com.redheap.selenium.page.Page; import java.util.logging.Logger; import org.junit.rules.ExternalResource; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebDriverException; public class PageProvider<P extends Page> extends ExternalResource { private final Class<P> cls; private final String url; private final WebDriver driver; private static final Logger logger = Logger.getLogger(WebDriverResource.class.getName()); public PageProvider(Class<P> cls, String url, WebDriver driver) { this.cls = cls; this.url = url; this.driver = driver; } @Override protected void after() { clearCookies(); } public P goHome() { clearCookies(); // navigate to homepage logger.fine("navigating to " + url + "..."); driver.get(url); return createPage(cls); } protected void clearCookies() { // clear session cookie before each test so we start with a clean session logger.fine("delete all cookies"); driver.manage().deleteAllCookies(); } protected P createPage(Class<P> cls) { try { return cls.getConstructor(WebDriver.class).newInstance(driver); } catch (Exception e) { throw new WebDriverException(e.getCause() != null ? e.getCause() : e); } } }