package pl.webtest;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.commons.lang3.StringUtils;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.BrowserType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.safari.SafariDriver;
import org.openqa.selenium.support.events.EventFiringWebDriver;
/**
* Factory class to instantiate a WebDriver object.
*
* It returns an instance of the driver (local invocation) or an instance of RemoteWebDriver
*/
public class WebDriverFactory {
private String browser;
/**
* WebDriver constructor
*
* @param browser (required) name of the browser or the grid hub URL
*/
public WebDriverFactory(String browser) {
this.browser = browser;
}
/**
* Create @code WebDriver
* @param capability desired capability
* @return @code WebDriver
*/
public WebDriver createDriver(DesiredCapabilities capability) {
WebDriver webDriver = null;
if (StringUtils.startsWith(browser, "http://") || StringUtils.startsWith(browser, "https://")) {
// Create Remote WebDriver
try {
webDriver = new RemoteWebDriver(new URL(browser), capability);
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
} else {
// Create local webdriver
if (BrowserType.CHROME.equalsIgnoreCase(browser)) {
webDriver = new ChromeDriver(capability);
} else if (BrowserType.FIREFOX.equalsIgnoreCase(browser)) {
webDriver = new FirefoxDriver(capability);
} else if (BrowserType.IE.equalsIgnoreCase(browser)) {
webDriver = new InternetExplorerDriver(capability);
} else if (BrowserType.SAFARI.equalsIgnoreCase(browser)) {
webDriver = new SafariDriver(capability);
} else if (BrowserType.HTMLUNIT.equalsIgnoreCase(browser)) {
webDriver = new HtmlUnitDriver(capability);
/*
IPhoneDriver nad AndroidDriver are deprecated
If you are looking to use WebDriver with iOS mobile Safari and are currently testing only on simulators
please have a look at ios-driver (http://ios-driver.github.io/ios-driver/) or appium (http://appium.io/)
} else if (BrowserType.IPHONE.equals(browserName)) {
webDriver = new IPhoneDriver(capability);
} else if (BrowserType.ANDROID.equals(browserName)) {
webDriver = new AndroidDriver(capability);
*/
} else {
throw new RuntimeException("Unsupported browser: " + browser);
}
}
if(Config.WEBDRIVER_EVENT_LOGGING) {
// Wrap the webdriver with logging event listener
webDriver = new EventFiringWebDriver(webDriver).register(new LoggingWebDriverEventListener());
}
return webDriver;
}
}