General refactoring to initializing the web drivers

This commit is contained in:
Burak Kaygusuz
2021-03-16 08:23:49 +03:00
parent 8dc67416c0
commit 45de398ab6
4 changed files with 85 additions and 77 deletions

View File

@@ -1,13 +1,12 @@
package com.burakkaygusuz;
import com.burakkaygusuz.config.DriverFactory;
import com.burakkaygusuz.config.DriverType;
import com.burakkaygusuz.enums.Browsers;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.parallel.Execution;
import org.junit.jupiter.api.parallel.ExecutionMode;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
@@ -21,10 +20,10 @@ public class BaseTest {
public static final List<DriverFactory> webDriverThreadPool = Collections.synchronizedList(new ArrayList<>());
public static ThreadLocal<DriverFactory> driverFactoryThread;
private static final Logger log = LogManager.getLogger(BaseTest.class.getName());
private static final Logger logger = LogManager.getLogger(BaseTest.class.getName());
public RemoteWebDriver driver;
public WebDriverWait wait;
protected RemoteWebDriver driver;
protected WebDriverWait wait;
@BeforeAll
public static void setUp() {
@@ -37,16 +36,16 @@ public class BaseTest {
@BeforeEach
public void beforeEach(TestInfo testInfo) {
log.info(String.format("Test: %s started", testInfo.getDisplayName()));
logger.info(String.format("Test: %s started", testInfo.getDisplayName()));
}
@AfterEach
public void afterEach(TestInfo testInfo) {
log.info(String.format("Test: %s finished", testInfo.getDisplayName()));
logger.info(String.format("Test: %s finished", testInfo.getDisplayName()));
}
public static RemoteWebDriver getWebDriver(DriverType driverType, DesiredCapabilities capabilities) {
return driverFactoryThread.get().getWebDriver(driverType, capabilities);
public static RemoteWebDriver getWebDriver(Browsers browser) {
return driverFactoryThread.get().getWebDriver(browser);
}
public static WebDriverWait getDriverWait(RemoteWebDriver driver) {

View File

@@ -1,48 +1,50 @@
package com.burakkaygusuz.config;
import com.burakkaygusuz.enums.Browsers;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.time.Duration;
import java.util.Scanner;
import static com.burakkaygusuz.config.DriverType.*;
public class DriverFactory {
private static final Logger log = LogManager.getLogger(DriverFactory.class.getName());
private static WebDriverWait wait;
private RemoteWebDriver driver;
private static final Logger logger = LogManager.getLogger(DriverFactory.class.getName());
protected static WebDriverWait wait;
protected RemoteWebDriver driver;
private static final String HUB_URL = getHubUrl();
public RemoteWebDriver getWebDriver(DriverType driverType, DesiredCapabilities capabilities) {
public RemoteWebDriver getWebDriver(Browsers browser) {
if (driver == null) {
try {
switch (driverType) {
switch (browser) {
case CHROME:
driver = DriverType.CHROME.getDriverWithOptions(new URL(HUB_URL), capabilities);
driver = CHROME.getDriver(HUB_URL);
break;
case FIREFOX:
driver = DriverType.FIREFOX.getDriverWithOptions(new URL(HUB_URL), capabilities);
driver = FIREFOX.getDriver(HUB_URL);
break;
case EDGE:
driver = DriverType.EDGE.getDriverWithOptions(new URL(HUB_URL), capabilities);
driver = EDGE.getDriver(HUB_URL);
default:
throw new IllegalStateException(String.format("An unexpected driver has been attempted to init: \n %s", driverType.toString()));
throw new IllegalStateException(String.format("An unexpected driver has been attempted to init: \n %s", browser.toString()));
}
} catch (MalformedURLException e) {
log.error(String.format("Malformed URL has occurred: \n %s", ExceptionUtils.getStackTrace(e)));
} catch (Exception e) {
logger.error(String.format("An unexpected error has occurred: \n %s", ExceptionUtils.getMessage(e)));
}
}
log.info(String.format("%s driver initialized", driverType.toString().toUpperCase()));
logger.info(String.format("Browser : %s", driver.getCapabilities().getBrowserName()));
logger.info(String.format("Version : %s", driver.getCapabilities().getBrowserVersion()));
return driver;
}

View File

@@ -8,89 +8,98 @@ import org.openqa.selenium.edge.EdgeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.AbstractDriverOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
public enum DriverType implements DriverOptions {
public enum DriverType {
CHROME {
@Override
public RemoteWebDriver getDriverWithOptions(URL url, DesiredCapabilities capabilities) {
System.setProperty(ChromeDriverService.CHROME_DRIVER_SILENT_OUTPUT_PROPERTY, "true");
public RemoteWebDriver getDriver(String url) throws MalformedURLException {
return new RemoteWebDriver(new URL(url), CHROME.getOptions());
}
@Override
public ChromeOptions getOptions() {
Logger.getLogger("org.openqa.selenium").setLevel(Level.SEVERE);
Map<String, Object> prefs = new HashMap<>();
prefs.put("profile.default_content_setting_values.notifications", 1);
final ChromeOptions options = new ChromeOptions();
final ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setCapability(ChromeDriverService.CHROME_DRIVER_SILENT_OUTPUT_PROPERTY, "true");
chromeOptions.setCapability(ChromeDriverService.CHROME_DRIVER_VERBOSE_LOG_PROPERTY, "true");
chromeOptions.setAcceptInsecureCerts(true);
chromeOptions.setHeadless(true);
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
chromeOptions.addArguments("enable-automation");
chromeOptions.addArguments("disable-translate");
chromeOptions.addArguments("--disable-gpu");
chromeOptions.addArguments("--start-maximized");
chromeOptions.setExperimentalOption("prefs", prefs);
options.addArguments("enable-automation");
options.addArguments("--start-maximized");
options.addArguments("--window-size=1920,1080");
options.addArguments("--disable-gpu");
options.addArguments("disable-translate");
options.setHeadless(true);
options.setAcceptInsecureCerts(true);
options.setPageLoadStrategy(PageLoadStrategy.NORMAL);
options.setExperimentalOption("prefs", prefs);
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
return new RemoteWebDriver(url, capabilities);
return chromeOptions;
}
},
FIREFOX {
@Override
public RemoteWebDriver getDriverWithOptions(URL url, DesiredCapabilities capabilities) {
public RemoteWebDriver getDriver(String url) throws MalformedURLException {
return new RemoteWebDriver(new URL(url), FIREFOX.getOptions());
}
@Override
public FirefoxOptions getOptions() {
Logger.getLogger("org.openqa.selenium").setLevel(Level.SEVERE);
final FirefoxOptions options = new FirefoxOptions();
final FirefoxProfile profile = new FirefoxProfile();
final FirefoxOptions firefoxOptions = new FirefoxOptions();
final FirefoxProfile firefoxProfile = new FirefoxProfile();
profile.setPreference(FirefoxDriver.SystemProperty.DRIVER_USE_MARIONETTE, true);
firefoxProfile.setPreference(FirefoxDriver.SystemProperty.DRIVER_USE_MARIONETTE, true);
options.setAcceptInsecureCerts(true);
options.addPreference("dom.webnotifications.enabled", false);
options.addPreference("gfx.direct2d.disabled", true);
options.addPreference("layers.acceleration.disabled", true);
options.setPageLoadStrategy(PageLoadStrategy.NORMAL);
options.setHeadless(true);
options.setProfile(profile);
firefoxOptions.setAcceptInsecureCerts(true);
firefoxOptions.addPreference("dom.webnotifications.enabled", false);
firefoxOptions.addPreference("gfx.direct2d.disabled", true);
firefoxOptions.addPreference("layers.acceleration.disabled", true);
firefoxOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
firefoxOptions.setHeadless(true);
firefoxOptions.setProfile(firefoxProfile);
capabilities.setCapability(FirefoxOptions.FIREFOX_OPTIONS, options);
return new RemoteWebDriver(url, capabilities);
return firefoxOptions;
}
},
EDGE {
@Override
public RemoteWebDriver getDriverWithOptions(URL url, DesiredCapabilities capabilities) {
System.setProperty(EdgeDriverService.EDGE_DRIVER_SILENT_OUTPUT_PROPERTY, "true");
Logger.getLogger("org.openqa.selenium").setLevel(Level.SEVERE);
public RemoteWebDriver getDriver(String url) throws MalformedURLException {
return new RemoteWebDriver(new URL(url), EDGE.getOptions());
}
final EdgeOptions options = new EdgeOptions();
@Override
public EdgeOptions getOptions() {
final EdgeOptions edgeOptions = new EdgeOptions();
options.setAcceptInsecureCerts(true);
options.addArguments("disable-gpu");
options.setHeadless(true);
options.setPageLoadStrategy(PageLoadStrategy.NORMAL);
edgeOptions.setCapability(EdgeDriverService.EDGE_DRIVER_SILENT_OUTPUT_PROPERTY, "true");
edgeOptions.setCapability(EdgeDriverService.EDGE_DRIVER_VERBOSE_LOG_PROPERTY, "true");
edgeOptions.addArguments("--start-maximized");
edgeOptions.addArguments("disable-gpu");
edgeOptions.setHeadless(true);
edgeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
edgeOptions.setAcceptInsecureCerts(true);
capabilities.setCapability(EdgeOptions.CAPABILITY, options);
return new RemoteWebDriver(url, capabilities);
return edgeOptions;
}
};
@Override
public String toString() {
return super.toString().toLowerCase();
}
public abstract RemoteWebDriver getDriver(String url) throws MalformedURLException;
public abstract AbstractDriverOptions<?> getOptions();
}

View File

@@ -1,13 +1,12 @@
package com.burakkaygusuz.tests;
import com.burakkaygusuz.BaseTest;
import com.burakkaygusuz.config.DriverType;
import com.burakkaygusuz.enums.Browsers;
import com.burakkaygusuz.pages.HomePage;
import com.burakkaygusuz.pages.SeleniumPage;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;
import static com.burakkaygusuz.pages.HomePage.getHomePage;
@@ -18,11 +17,10 @@ import static org.junit.jupiter.api.Assertions.*;
public class SeleniumPageTests extends BaseTest {
@ParameterizedTest(name = "#{index} - Run with => {0}")
@EnumSource(value = DriverType.class, names = {"CHROME", "FIREFOX", "EDGE"})
public void getSeleniumWikiPage(DriverType driverType) {
@EnumSource(value = Browsers.class, names = {"CHROME", "FIREFOX", "EDGE"})
public void getSeleniumWikiPage(Browsers browser) {
DesiredCapabilities capabilities = new DesiredCapabilities();
driver = getWebDriver(driverType, capabilities);
driver = getWebDriver(browser);
wait = getDriverWait(driver);
final HomePage homePage = getHomePage(driver);