Last active
December 16, 2020 14:24
-
-
Save PramodKumarYadav/f7d7c50de5e6080432ab78d9f2237bca to your computer and use it in GitHub Desktop.
Create webdriver
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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