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);
}
}
}