From 73e7f0156b2b76bfe56fd8ede905ea5f3bb6d1d9 Mon Sep 17 00:00:00 2001 From: Mariusz Kowalski Date: Thu, 16 Mar 2023 13:58:00 +0100 Subject: [PATCH] Version 2023.03.16: Fix browser names, better handle setup and teardown exceptions --- .../mrchecker-cli-module/pom.xml | 6 ++-- .../mrchecker-core-module/pom.xml | 4 +-- .../test/core/TestExecutionObserver.java | 12 ++++++-- .../mrchecker-database-module/pom.xml | 6 ++-- .../mrchecker-mobile-module/pom.xml | 8 ++--- .../mrchecker-playwright-module/pom.xml | 6 ++-- .../mrchecker-security-module/pom.xml | 6 ++-- .../mrchecker-selenium-module/pom.xml | 6 ++-- .../runtime/RuntimeParametersSelenium.java | 15 ++-------- .../core/newDrivers/DriverManager.java | 29 +++++++++++++++---- .../base/runtime/RuntimeParametersTest.java | 13 --------- .../mrchecker-webapi-module/pom.xml | 6 ++-- mrchecker-framework-modules/pom.xml | 2 +- 13 files changed, 61 insertions(+), 58 deletions(-) diff --git a/mrchecker-framework-modules/mrchecker-cli-module/pom.xml b/mrchecker-framework-modules/mrchecker-cli-module/pom.xml index c791338a..29ec09f8 100644 --- a/mrchecker-framework-modules/mrchecker-cli-module/pom.xml +++ b/mrchecker-framework-modules/mrchecker-cli-module/pom.xml @@ -6,11 +6,11 @@ mrchecker-test-framework com.capgemini.mrchecker - 2023.03.10 + 2023.03.16 mrchecker-cli-module - 2023.03.10 + 2023.03.16 jar MrChecker - CLI - Module MrChecker CLI Module supports: @@ -60,7 +60,7 @@ ${project.groupId} mrchecker-core-module - 2023.03.10 + 2023.03.16 diff --git a/mrchecker-framework-modules/mrchecker-core-module/pom.xml b/mrchecker-framework-modules/mrchecker-core-module/pom.xml index 91588df2..f2b4d830 100644 --- a/mrchecker-framework-modules/mrchecker-core-module/pom.xml +++ b/mrchecker-framework-modules/mrchecker-core-module/pom.xml @@ -7,11 +7,11 @@ mrchecker-test-framework com.capgemini.mrchecker - 2023.03.10 + 2023.03.16 mrchecker-core-module - 2023.03.10 + 2023.03.16 jar MrChecker - Test core - Module MrChecker Test Framework Core is responsible for: diff --git a/mrchecker-framework-modules/mrchecker-core-module/src/main/java/com/capgemini/mrchecker/test/core/TestExecutionObserver.java b/mrchecker-framework-modules/mrchecker-core-module/src/main/java/com/capgemini/mrchecker/test/core/TestExecutionObserver.java index 522b574c..76f17172 100644 --- a/mrchecker-framework-modules/mrchecker-core-module/src/main/java/com/capgemini/mrchecker/test/core/TestExecutionObserver.java +++ b/mrchecker-framework-modules/mrchecker-core-module/src/main/java/com/capgemini/mrchecker/test/core/TestExecutionObserver.java @@ -81,7 +81,11 @@ public void beforeTestExecution(ExtensionContext context) { try { validateTestClassAndCallHook(context, BaseTest::setUp); } catch (Throwable throwable) { - forEachObserver(ITestObserver::onSetupFailure); + try { + handleExecutionException(context, throwable, "setup", ITestObserver::onSetupFailure); + } catch (Throwable e) { + throw new RuntimeException(e); + } throw throwable; } } @@ -95,7 +99,11 @@ public void afterTestExecution(ExtensionContext context) { try { validateTestClassAndCallHook(context, BaseTest::tearDown); } catch (Throwable throwable) { - forEachObserver(ITestObserver::onTeardownFailure); + try { + handleExecutionException(context, throwable, "teardown", ITestObserver::onTeardownFailure); + } catch (Throwable e) { + throw new RuntimeException(e); + } throw throwable; } } diff --git a/mrchecker-framework-modules/mrchecker-database-module/pom.xml b/mrchecker-framework-modules/mrchecker-database-module/pom.xml index 57f0f35f..b7b12c7c 100644 --- a/mrchecker-framework-modules/mrchecker-database-module/pom.xml +++ b/mrchecker-framework-modules/mrchecker-database-module/pom.xml @@ -6,11 +6,11 @@ mrchecker-test-framework com.capgemini.mrchecker - 2023.03.10 + 2023.03.16 mrchecker-database-module - 2023.03.10 + 2023.03.16 jar MrChecker - Database - Module MrChecker Database Module: @@ -80,7 +80,7 @@ ${project.groupId} mrchecker-core-module - 2023.03.10 + 2023.03.16 diff --git a/mrchecker-framework-modules/mrchecker-mobile-module/pom.xml b/mrchecker-framework-modules/mrchecker-mobile-module/pom.xml index aa52c3a6..0f521736 100644 --- a/mrchecker-framework-modules/mrchecker-mobile-module/pom.xml +++ b/mrchecker-framework-modules/mrchecker-mobile-module/pom.xml @@ -7,11 +7,11 @@ mrchecker-test-framework com.capgemini.mrchecker - 2023.03.10 + 2023.03.16 mrchecker-mobile-module - 2023.03.10 + 2023.03.16 jar MrChecker - Mobile - Module MrChecker Test Framework name supports: @@ -52,12 +52,12 @@ ${project.groupId} mrchecker-core-module - 2023.03.10 + 2023.03.16 ${project.groupId} mrchecker-selenium-module - 2023.03.10 + 2023.03.16 diff --git a/mrchecker-framework-modules/mrchecker-playwright-module/pom.xml b/mrchecker-framework-modules/mrchecker-playwright-module/pom.xml index 127afb68..a7ca1406 100644 --- a/mrchecker-framework-modules/mrchecker-playwright-module/pom.xml +++ b/mrchecker-framework-modules/mrchecker-playwright-module/pom.xml @@ -7,11 +7,11 @@ mrchecker-test-framework com.capgemini.mrchecker - 2023.03.10 + 2023.03.16 mrchecker-playwright-module - 2023.03.10 + 2023.03.16 jar MrChecker - Playwright - Module MrChecker Test Framework Playwright @@ -68,7 +68,7 @@ ${project.groupId} mrchecker-core-module - 2023.03.10 + 2023.03.16 diff --git a/mrchecker-framework-modules/mrchecker-security-module/pom.xml b/mrchecker-framework-modules/mrchecker-security-module/pom.xml index 9b3f37ae..34334e9c 100644 --- a/mrchecker-framework-modules/mrchecker-security-module/pom.xml +++ b/mrchecker-framework-modules/mrchecker-security-module/pom.xml @@ -7,11 +7,11 @@ mrchecker-test-framework com.capgemini.mrchecker - 2023.03.10 + 2023.03.16 mrchecker-security-module - 2023.03.10 + 2023.03.16 jar MrChecker - Security - Module MrChecker Test Framework Security supports: @@ -63,7 +63,7 @@ ${project.groupId} mrchecker-core-module - 2023.03.10 + 2023.03.16 diff --git a/mrchecker-framework-modules/mrchecker-selenium-module/pom.xml b/mrchecker-framework-modules/mrchecker-selenium-module/pom.xml index 516a8a23..88206c43 100644 --- a/mrchecker-framework-modules/mrchecker-selenium-module/pom.xml +++ b/mrchecker-framework-modules/mrchecker-selenium-module/pom.xml @@ -7,11 +7,11 @@ mrchecker-test-framework com.capgemini.mrchecker - 2023.03.10 + 2023.03.16 mrchecker-selenium-module - 2023.03.10 + 2023.03.16 jar MrChecker - Selenium - Module MrChecker Test Framework Selenium supports: @@ -101,7 +101,7 @@ ${project.groupId} mrchecker-core-module - 2023.03.10 + 2023.03.16 diff --git a/mrchecker-framework-modules/mrchecker-selenium-module/src/main/java/com/capgemini/mrchecker/selenium/core/base/runtime/RuntimeParametersSelenium.java b/mrchecker-framework-modules/mrchecker-selenium-module/src/main/java/com/capgemini/mrchecker/selenium/core/base/runtime/RuntimeParametersSelenium.java index 2b147952..64b1b955 100644 --- a/mrchecker-framework-modules/mrchecker-selenium-module/src/main/java/com/capgemini/mrchecker/selenium/core/base/runtime/RuntimeParametersSelenium.java +++ b/mrchecker-framework-modules/mrchecker-selenium-module/src/main/java/com/capgemini/mrchecker/selenium/core/base/runtime/RuntimeParametersSelenium.java @@ -17,23 +17,14 @@ * @author MBABIARZ */ public enum RuntimeParametersSelenium implements IRuntimeParameters { - BROWSER("browser", "chrome") { - protected void setValue() { - super.setValue(); - paramValue = paramValue.toLowerCase(); - if (paramValue.equals(INVALID_IE_NAME)) - paramValue = VALID_IE_NAME; - } - }, + BROWSER("browser", "chrome"), BROWSER_VERSION("browserVersion", ""), SELENIUM_GRID("seleniumGrid", ""), OS("os", ""), BROWSER_OPTIONS("browserOptions", "") { public Map getValues() { return Arrays.stream(getValue().split(BROWSER_OPTIONS_DELIMITER_REGEX)) - .filter(i -> !i.isEmpty()) // remove - // empty - // inputs + .filter(i -> !i.trim().isEmpty()) // remove empty inputs .map(i -> i.split(BROWSER_OPTIONS_KEY_VALUE_DELIMITER_REGEX, TOKENS_LIMIT)) // split to key, value. // Not more than one time .map(i -> new String[]{i[0], (i.length == 1) ? "" : i[1]}) // if value is empty, set empty text @@ -42,8 +33,6 @@ public Map getValues() { }, HEADLESS("headless", "false"); - public static final String VALID_IE_NAME = "internet explorer"; - public static final String INVALID_IE_NAME = "ie"; private static final int TOKENS_LIMIT = 2; private static final String BROWSER_OPTIONS_KEY_VALUE_DELIMITER_REGEX = "="; private static final String BROWSER_OPTIONS_DELIMITER_REGEX = ";"; diff --git a/mrchecker-framework-modules/mrchecker-selenium-module/src/main/java/com/capgemini/mrchecker/selenium/core/newDrivers/DriverManager.java b/mrchecker-framework-modules/mrchecker-selenium-module/src/main/java/com/capgemini/mrchecker/selenium/core/newDrivers/DriverManager.java index cfd7216e..8b1e5631 100644 --- a/mrchecker-framework-modules/mrchecker-selenium-module/src/main/java/com/capgemini/mrchecker/selenium/core/newDrivers/DriverManager.java +++ b/mrchecker-framework-modules/mrchecker-selenium-module/src/main/java/com/capgemini/mrchecker/selenium/core/newDrivers/DriverManager.java @@ -29,8 +29,11 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.time.Duration; +import java.util.Arrays; import java.util.HashMap; import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; public class DriverManager { private static final ThreadLocal DRIVERS = new ThreadLocal<>(); @@ -339,6 +342,8 @@ private static void setBrowserName(DesiredCapabilities capabilities, MutableCapa capabilities.setCapability(FirefoxOptions.FIREFOX_OPTIONS, options); break; case IE: + capabilities.setCapability(InternetExplorerOptions.IE_OPTIONS, options); + break; default: throw new IllegalStateException("Unsupported browser: " + browserType); } @@ -472,26 +477,22 @@ private static void download(BrowserType browserType wdm = WebDriverManager.getInstance(ChromeDriver.class); driverPath = DriverManager.propertiesSelenium.getSeleniumChrome(); driverVersion = DriverManager.propertiesSelenium.getChromeDriverVersion().trim(); - //System.setProperty("webdriver.chrome.driver", driverPath); break; case EDGE: wdm = WebDriverManager.getInstance(EdgeDriver.class); driverPath = DriverManager.propertiesSelenium.getSeleniumEdge(); driverVersion = DriverManager.propertiesSelenium.getEdgeDriverVersion().trim(); - //System.setProperty("webdriver.edge.driver", browserPath); break; case FIREFOX: wdm = WebDriverManager.getInstance(FirefoxDriver.class); driverPath = DriverManager.propertiesSelenium.getSeleniumFirefox(); driverVersion = DriverManager.propertiesSelenium.getGeckoDriverVersion().trim(); - //System.setProperty("webdriver.gecko.driver", browserPath); System.setProperty("webdriver.firefox.logfile", "logs\\firefox_logs.txt"); break; case IE: wdm = WebDriverManager.getInstance(InternetExplorerDriver.class); driverPath = DriverManager.propertiesSelenium.getSeleniumIE(); driverVersion = DriverManager.propertiesSelenium.getInternetExplorerDriverVersion().trim(); - //System.setProperty("webdriver.ie.driver", browserPath); break; default: throw new IllegalStateException("Unsupported browser: " + browserType); @@ -560,7 +561,25 @@ public static BrowserType get(String browserName) { return browserType; } } - throw new IllegalStateException("Unsupported browser: " + browserName); + //Names not included in Selenium 4 (W3C standard) but still in use + switch (browserName.toLowerCase()) { + case "edge": + case "msedge": + return EDGE; + case "ie": + return IE; + } + + throw new IllegalStateException("Unsupported browser name: " + browserName + "\nSupported browsers names: " + getValidBrowsers()); + } + + public static Set getValidBrowsers() { + Set browsers = Arrays.stream(values()).map(browser -> browser.getBrowser().browserName()).collect(Collectors.toSet()); + //Names not included in Selenium 4 (W3C standard) but still in use + browsers.add("edge"); + browsers.add("msedge"); + browsers.add("ie"); + return browsers; } } } \ No newline at end of file diff --git a/mrchecker-framework-modules/mrchecker-selenium-module/src/test/java/com/capgemini/mrchecker/selenium/unit/base/runtime/RuntimeParametersTest.java b/mrchecker-framework-modules/mrchecker-selenium-module/src/test/java/com/capgemini/mrchecker/selenium/unit/base/runtime/RuntimeParametersTest.java index 3754c56d..c8778124 100644 --- a/mrchecker-framework-modules/mrchecker-selenium-module/src/test/java/com/capgemini/mrchecker/selenium/unit/base/runtime/RuntimeParametersTest.java +++ b/mrchecker-framework-modules/mrchecker-selenium-module/src/test/java/com/capgemini/mrchecker/selenium/unit/base/runtime/RuntimeParametersTest.java @@ -12,8 +12,6 @@ import java.util.Map; import java.util.function.Consumer; -import static com.capgemini.mrchecker.selenium.core.base.runtime.RuntimeParametersSelenium.INVALID_IE_NAME; -import static com.capgemini.mrchecker.selenium.core.base.runtime.RuntimeParametersSelenium.VALID_IE_NAME; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; import static org.hamcrest.core.IsEqual.equalTo; @@ -99,17 +97,6 @@ public void shouldGetReturnDefaultBrowserValueWhenNoSystemProperty() { assertThat(browserValue, is(equalTo(DEFAULT_BROWSER_VALUE))); } - @Test - public void shouldGetValidIEName() { - System.setProperty("browser", INVALID_IE_NAME); - - refreshAllParameters(); - String browserValue = RuntimeParametersSelenium.BROWSER.getValue(); - - assertThat(browserValue, is(equalTo(VALID_IE_NAME))); - - } - @Test public void shouldBrowserOptionBeBoolean() { shouldBrowserOptionBeOfClass("true", Boolean.class); diff --git a/mrchecker-framework-modules/mrchecker-webapi-module/pom.xml b/mrchecker-framework-modules/mrchecker-webapi-module/pom.xml index 14c32af7..d7b094ed 100644 --- a/mrchecker-framework-modules/mrchecker-webapi-module/pom.xml +++ b/mrchecker-framework-modules/mrchecker-webapi-module/pom.xml @@ -7,11 +7,11 @@ mrchecker-test-framework com.capgemini.mrchecker - 2023.03.10 + 2023.03.16 mrchecker-webapi-module - 2023.03.10 + 2023.03.16 jar MrChecker - WebApi - Module @@ -80,7 +80,7 @@ ${project.groupId} mrchecker-core-module - 2023.03.10 + 2023.03.16 diff --git a/mrchecker-framework-modules/pom.xml b/mrchecker-framework-modules/pom.xml index 22728447..71b4e2b8 100644 --- a/mrchecker-framework-modules/pom.xml +++ b/mrchecker-framework-modules/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.capgemini.mrchecker mrchecker-test-framework - 2023.03.10 + 2023.03.16 MrChecker MrChecker Test Framework is an automated testing framework for functional testing of web applications, native mobile apps, webservices and database.