Skip to content

Instantly share code, notes, and snippets.

@PramodKumarYadav
Last active December 16, 2020 14:24
Show Gist options
  • Save PramodKumarYadav/f7d7c50de5e6080432ab78d9f2237bca to your computer and use it in GitHub Desktop.
Save PramodKumarYadav/f7d7c50de5e6080432ab78d9f2237bca to your computer and use it in GitHub Desktop.
Create webdriver
// Details on how to run test scripts with different browsers from maven command line (and thus from CI)
// https://seleniumjava.com/2017/05/21/how-to-run-scripts-in-a-specific-browser-with-maven/amp/
// Driver should work with whatever browser passed to them (either via CI, CMD line or in rare cases - from tests(not recommended way)
// Thus browser is abstracted outside driver class.
// Driver constructor makes sure that it can work with both cases (both with default browser or when browser is passed to it)
package org.epo.apollo.webdriver;
import com.typesafe.config.Config;
import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.opera.OperaDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriver;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.service.DriverService;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import static java.lang.Boolean.parseBoolean;
import static org.epo.apollo.TestConfig.getConfig;
import static org.epo.apollo.webdriver.Options.*;
// Note: For executing in containers, the option MUST be set to headless. Else driver fails,
// So do not pass the headless parameter as false when choosing container as option.
public class DriverFactory {
Config config = getConfig();
String browser = config.getString("browser").toLowerCase();
public WebDriver createDriver() {
WebDriver driver;
boolean remote = parseBoolean(config.getString("remote"));
if (remote == true){
driver = createRemoteWebDriver();
}else{
driver = createWebDriver();
}
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
return driver;
}
private WebDriver createRemoteWebDriver() {
Proxy proxy = new Proxy();
proxy.setHttpProxy(config.getString("proxyAddress"));
proxy.setSslProxy(config.getString("proxyAddress"));
WebDriver remoteWebDriver = null;
try {
URL remoteUrl = new URL(config.getString("remoteUrl"));
switch (browser) {
case "firefox":
remoteWebDriver = new RemoteWebDriver(remoteUrl, getFirefoxOptions());
case "edge":
//ToDo
case "ie":
//ToDo
case "opera":
remoteWebDriver = new RemoteWebDriver(remoteUrl, getOperaOptions());
case "phantom":
//ToDo
default:
remoteWebDriver = new RemoteWebDriver(remoteUrl, getChromeOptions());
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
return remoteWebDriver;
}
private WebDriver createWebDriver() {
WebDriverManager.globalConfig().setProxy(config.getString("proxyAddress"));
switch (browser) {
case "firefox":
WebDriverManager.firefoxdriver().setup();
return new FirefoxDriver(getFirefoxOptions());
case "edge":
WebDriverManager.edgedriver().setup();
return new EdgeDriver();
case "ie":
WebDriverManager.iedriver().setup();
return new InternetExplorerDriver();
case "opera":
WebDriverManager.operadriver().setup();
return new OperaDriver();
case "phantom":
WebDriverManager.phantomjs().setup();
return new PhantomJSDriver();
default:
WebDriverManager.chromedriver().setup();
// https://stackoverflow.com/questions/52975287/selenium-chromedriver-disable-logging-or-redirect-it-java
// To get rid of selenium logs (where set seleniumLogLevel = SEVERE OR say INFO) in properties
java.util.logging.Logger.getLogger("org.openqa.selenium").setLevel(Level.parse(config.getString("seleniumLogLevel")));
// To get rid of chrome driver logs (where set silentDriverLogs = true or false) in properties. Other levels: ERROR, WARN, DEBUG, FATAL are not supported.
System.setProperty("webdriver.chrome.silentOutput", config.getString("silentDriverLogs"));
return new ChromeDriver(getChromeOptions());
// Another way using service (just fyi)
// DriverService.Builder serviceBuilder = new ChromeDriverService.Builder().withSilent(parseBoolean(config.getString("silentDriverLogs")));
// ChromeDriverService service = (ChromeDriverService)serviceBuilder.build();
// return new ChromeDriver(service, getChromeOptions());
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment