mirror of
https://github.com/burakkaygusuz/selenium-4-grid-k8s-docker.git
synced 2021-06-27 00:03:24 +03:00
General refactoring to initializing the web drivers
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user