From e759fb715f0b442525eb359096ff4d56f663ad52 Mon Sep 17 00:00:00 2001 From: RobertAvemarg <jan.robert.avemarg@gmail.com> Date: Thu, 12 Dec 2024 16:26:52 +0100 Subject: [PATCH 01/24] updated Allure Cucumber jvm --- .gitignore | 3 +++ pom.xml | 30 +++++++++++++++--------------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index b7004e0e..e5199cac 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,6 @@ temp-*.properties embeddedLocalProxySelfSignedRootCertificate.p12 /bin/ /allure-results/ + +# intellij project directory +.idea diff --git a/pom.xml b/pom.xml index 8f87f85b..a77d1dca 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>com.xceptance</groupId> <artifactId>neodymium-library</artifactId> - <version>5.1.1</version> + <version>5.1.2</version> <name>neodymium-library</name> <url>https://github.com/Xceptance/neodymium-library</url> @@ -260,19 +260,19 @@ <dependencies> <dependency> - <groupId>com.assertthat</groupId> - <artifactId>selenium-shutterbug</artifactId> - <version>1.6</version> - <exclusions> - <exclusion> - <groupId>org.seleniumhq.selenium</groupId> - <artifactId>selenium-java</artifactId> + <groupId>com.assertthat</groupId> + <artifactId>selenium-shutterbug</artifactId> + <version>1.6</version> + <exclusions> + <exclusion> + <groupId>org.seleniumhq.selenium</groupId> + <artifactId>selenium-java</artifactId> </exclusion> - <exclusion> - <groupId>org.apache.httpcomponents.client5</groupId> - <artifactId>httpclient5</artifactId> - </exclusion> - </exclusions> + <exclusion> + <groupId>org.apache.httpcomponents.client5</groupId> + <artifactId>httpclient5</artifactId> + </exclusion> + </exclusions> </dependency> <dependency> <groupId>xyz.rogfam</groupId> @@ -347,8 +347,8 @@ </dependency> <dependency> <groupId>io.qameta.allure</groupId> - <artifactId>allure-cucumber6-jvm</artifactId> - <version>2.13.6</version> + <artifactId>allure-cucumber7-jvm</artifactId> + <version>2.29.1</version> </dependency> <dependency> <groupId>io.qameta.allure</groupId> From e2f55be8aa468612a9fe6e1b5a792367f81035ca Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Fri, 13 Dec 2024 10:40:23 +0100 Subject: [PATCH 02/24] [#322] fix browser isn't started for after if test is in different class --- .../neodymium/common/browser/BrowserAfterRunner.java | 3 ++- .../neodymium/common/browser/BrowserBeforeRunner.java | 3 ++- .../neodymium/common/browser/BrowserData.java | 10 ++++++---- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/xceptance/neodymium/common/browser/BrowserAfterRunner.java b/src/main/java/com/xceptance/neodymium/common/browser/BrowserAfterRunner.java index d7a5e840..257c095d 100644 --- a/src/main/java/com/xceptance/neodymium/common/browser/BrowserAfterRunner.java +++ b/src/main/java/com/xceptance/neodymium/common/browser/BrowserAfterRunner.java @@ -33,7 +33,8 @@ public void run(Supplier<Throwable> afterMethodInvocation, Method after, boolean // if browserConfiguration is null, the browser should not be started for this method and browserTag and // browserRunner are therefore not required - BrowserMethodData browserTag = browserConfiguration != null ? BrowserData.addKeepBrowserOpenInformation(browserConfiguration.getBrowserTag(), after) + BrowserMethodData browserTag = browserConfiguration != null ? BrowserData.addKeepBrowserOpenInformation(browserConfiguration.getBrowserTag(), + after.getDeclaringClass(), after) : null; BrowserRunner browserRunner = browserTag != null ? new BrowserRunner(browserTag, after.getName()) : null; diff --git a/src/main/java/com/xceptance/neodymium/common/browser/BrowserBeforeRunner.java b/src/main/java/com/xceptance/neodymium/common/browser/BrowserBeforeRunner.java index 6a25fe99..26e950d0 100644 --- a/src/main/java/com/xceptance/neodymium/common/browser/BrowserBeforeRunner.java +++ b/src/main/java/com/xceptance/neodymium/common/browser/BrowserBeforeRunner.java @@ -34,7 +34,8 @@ public void run(Supplier<Throwable> beforeMethodInvocation, Method before, boole // if browserConfiguration is null, the browser should not be started for this method and browserTag and // browserRunner are therefore not required - BrowserMethodData browserTag = browserConfiguration != null ? BrowserData.addKeepBrowserOpenInformation(browserConfiguration.getBrowserTag(), before) + BrowserMethodData browserTag = browserConfiguration != null ? BrowserData.addKeepBrowserOpenInformation(browserConfiguration.getBrowserTag(), + before.getDeclaringClass(), before) : null; BrowserRunner browserRunner = browserTag != null ? new BrowserRunner(browserTag, before.getName()) : null; diff --git a/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java b/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java index f4e1db35..a2011b75 100644 --- a/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java +++ b/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java @@ -32,11 +32,14 @@ public class BrowserData extends Data private List<RandomBrowsers> classRandomBrowsersAnnotation; + private Class<?> testClass; + private static final String SYSTEM_PROPERTY_BROWSERDEFINITION = "browserdefinition"; public BrowserData(Class<?> testClass) { this(); + this.testClass = testClass; initClassAnnotationsFor(testClass); } @@ -198,15 +201,15 @@ else if (!classRandomBrowsersAnnotation.isEmpty() && methodBrowsers.isEmpty()) { return browsers.stream() .filter(browserTag -> systemBrowserFilter.contains(browserTag)) - .map(browserTag -> addKeepBrowserOpenInformation(browserTag, testMethod)) + .map(browserTag -> addKeepBrowserOpenInformation(browserTag, testClass, testMethod)) .collect(Collectors.toList()); } return browsers.stream() - .map(browserTag -> addKeepBrowserOpenInformation(browserTag, testMethod)) + .map(browserTag -> addKeepBrowserOpenInformation(browserTag, testClass, testMethod)) .collect(Collectors.toList()); } - public static BrowserMethodData addKeepBrowserOpenInformation(String browserTag, Method method) + public static BrowserMethodData addKeepBrowserOpenInformation(String browserTag, Class<?> testClass, Method method) { List<KeepBrowserOpen> methodKeepBrowserOpenAnnotations = getAnnotations(method, KeepBrowserOpen.class); List<KeepBrowserOpen> classKeepBrowserOpenAnnotations = getAnnotations(method.getDeclaringClass(), KeepBrowserOpen.class); @@ -244,7 +247,6 @@ public static BrowserMethodData addKeepBrowserOpenInformation(String browserTag, } } boolean junit5 = method.getAnnotation(NeodymiumTest.class) != null; - Class<?> testClass = method.getDeclaringClass(); List<Method> afterMethodsWithTestBrowser = List.of(testClass.getMethods()).stream() .filter(classMethod -> (junit5 ? classMethod.getAnnotation(AfterEach.class) : classMethod.getAnnotation(After.class)) != null) From 1d97081abaace76ba1fbb30776121d72606af274 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Fri, 13 Dec 2024 10:43:39 +0100 Subject: [PATCH 03/24] [#322] add unit tests --- .../browser/inheritance/BrowserChildTest.java | 33 +++++++++++++++++++ .../browser/inheritance/BrowserParent.java | 11 ++++++- .../browser/inheritance/BrowserChildTest.java | 33 +++++++++++++++++++ .../browser/inheritance/BrowserParent.java | 12 ++++++- 4 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserChildTest.java create mode 100644 src/test/java/com/xceptance/neodymium/junit5/testclasses/browser/inheritance/BrowserChildTest.java diff --git a/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserChildTest.java b/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserChildTest.java new file mode 100644 index 00000000..82352952 --- /dev/null +++ b/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserChildTest.java @@ -0,0 +1,33 @@ +package com.xceptance.neodymium.junit4.testclasses.browser.inheritance; + +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.xceptance.neodymium.junit4.tests.NeodymiumWebDriverTest; +import com.xceptance.neodymium.util.Neodymium; + +public class BrowserChildTest extends BrowserParent +{ + @Before + public void before() + { + Assert.assertNotNull("No browser started for @Before method", Neodymium.getDriver()); + NeodymiumWebDriverTest.assertWebDriverAlive(Neodymium.getDriver()); + } + + @Test + public void test() + { + Assert.assertNotNull("No browser started for @Test method", Neodymium.getDriver()); + NeodymiumWebDriverTest.assertWebDriverAlive(Neodymium.getDriver()); + } + + @After + public void after() + { + Assert.assertNotNull("No browser started for @After method", Neodymium.getDriver()); + NeodymiumWebDriverTest.assertWebDriverAlive(Neodymium.getDriver()); + } +} diff --git a/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserParent.java b/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserParent.java index 612151af..778f041e 100644 --- a/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserParent.java +++ b/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserParent.java @@ -1,14 +1,23 @@ package com.xceptance.neodymium.junit4.testclasses.browser.inheritance; +import org.junit.Assert; import org.junit.runner.RunWith; import com.xceptance.neodymium.common.browser.Browser; import com.xceptance.neodymium.junit4.NeodymiumRunner; +import com.xceptance.neodymium.junit5.NeodymiumTest; +import com.xceptance.neodymium.junit5.tests.NeodymiumWebDriverTest; +import com.xceptance.neodymium.util.Neodymium; @Browser("Chrome_1024x768") @Browser("Chrome_1500x1000") @RunWith(NeodymiumRunner.class) public abstract class BrowserParent { - + @NeodymiumTest + public void testParent() + { + Assert.assertNotNull(Neodymium.getDriver()); + NeodymiumWebDriverTest.assertWebDriverAlive(Neodymium.getDriver()); + } } diff --git a/src/test/java/com/xceptance/neodymium/junit5/testclasses/browser/inheritance/BrowserChildTest.java b/src/test/java/com/xceptance/neodymium/junit5/testclasses/browser/inheritance/BrowserChildTest.java new file mode 100644 index 00000000..6765b2e1 --- /dev/null +++ b/src/test/java/com/xceptance/neodymium/junit5/testclasses/browser/inheritance/BrowserChildTest.java @@ -0,0 +1,33 @@ +package com.xceptance.neodymium.junit5.testclasses.browser.inheritance; + +import org.junit.Assert; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; + +import com.xceptance.neodymium.junit5.NeodymiumTest; +import com.xceptance.neodymium.junit5.tests.NeodymiumWebDriverTest; +import com.xceptance.neodymium.util.Neodymium; + +public class BrowserChildTest extends BrowserParent +{ + @BeforeEach + public void before() + { + Assert.assertNotNull("No browser started for @BeforeEach method", Neodymium.getDriver()); + NeodymiumWebDriverTest.assertWebDriverAlive(Neodymium.getDriver()); + } + + @NeodymiumTest + public void test() + { + Assert.assertNotNull("No browser started for @NeodymiumTest method", Neodymium.getDriver()); + NeodymiumWebDriverTest.assertWebDriverAlive(Neodymium.getDriver()); + } + + @AfterEach + public void after() + { + Assert.assertNotNull("No browser started for @AfterEach method", Neodymium.getDriver()); + NeodymiumWebDriverTest.assertWebDriverAlive(Neodymium.getDriver()); + } +} diff --git a/src/test/java/com/xceptance/neodymium/junit5/testclasses/browser/inheritance/BrowserParent.java b/src/test/java/com/xceptance/neodymium/junit5/testclasses/browser/inheritance/BrowserParent.java index 56f47867..d25c0d3d 100644 --- a/src/test/java/com/xceptance/neodymium/junit5/testclasses/browser/inheritance/BrowserParent.java +++ b/src/test/java/com/xceptance/neodymium/junit5/testclasses/browser/inheritance/BrowserParent.java @@ -1,10 +1,20 @@ package com.xceptance.neodymium.junit5.testclasses.browser.inheritance; +import org.junit.Assert; + import com.xceptance.neodymium.common.browser.Browser; +import com.xceptance.neodymium.junit5.NeodymiumTest; +import com.xceptance.neodymium.junit5.tests.NeodymiumWebDriverTest; +import com.xceptance.neodymium.util.Neodymium; @Browser("Chrome_1024x768") @Browser("Chrome_1500x1000") public abstract class BrowserParent { - + @NeodymiumTest + public void testParent() + { + Assert.assertNotNull(Neodymium.getDriver()); + NeodymiumWebDriverTest.assertWebDriverAlive(Neodymium.getDriver()); + } } From 99666f4662e32e7ee973898aa3cef804b9e5d413 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Tue, 17 Dec 2024 15:10:07 +0100 Subject: [PATCH 04/24] [#330] Improvement: Stabilize unit tests --- pom.xml | 12 +- .../neodymium/util/AllureAddons.java | 21 +- .../FixedRandomnessOfRandomBrowser.java | 4 +- .../tests/BrowserstackProxyErrorTest.java | 7 +- .../junit4/tests/BrowserstackProxyTest.java | 7 +- .../junit4/tests/BrowserstackTest.java | 7 +- .../tests/BrowserstackProxyErrorTest.java | 8 +- .../junit5/tests/BrowserstackProxyTest.java | 7 +- .../junit5/tests/BrowserstackTest.java | 9 +- .../neodymium/util/AllureAddonsTest.java | 8 +- .../neodymium/util/LighthouseUtilsTest.java | 215 ++++++------------ 11 files changed, 136 insertions(+), 169 deletions(-) diff --git a/pom.xml b/pom.xml index 8f87f85b..4b81e919 100644 --- a/pom.xml +++ b/pom.xml @@ -204,17 +204,9 @@ <artifactId>maven-surefire-plugin</artifactId> <configuration> <includes> - <include> - com/xceptance/neodymium/junit4/tests/**/*Test.java</include> - </includes> - <includes> - <include> - com/xceptance/neodymium/util/**/*Test.java</include> + <include> com/xceptance/neodymium/junit4/tests/**/*Test.java</include> + <include> com/xceptance/neodymium/util/**/*Test.java</include> </includes> - <excludes> - <exclude> - com/xceptance/neodymium/junit4/tests/visual/**/*Test.java</exclude> - </excludes> </configuration> <dependencies> <dependency> diff --git a/src/main/java/com/xceptance/neodymium/util/AllureAddons.java b/src/main/java/com/xceptance/neodymium/util/AllureAddons.java index 80760ca7..bea945d6 100644 --- a/src/main/java/com/xceptance/neodymium/util/AllureAddons.java +++ b/src/main/java/com/xceptance/neodymium/util/AllureAddons.java @@ -6,6 +6,7 @@ import java.io.InputStream; import java.nio.channels.FileChannel; import java.nio.channels.FileLock; +import java.nio.channels.OverlappingFileLockException; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; import java.util.HashMap; @@ -273,7 +274,14 @@ public static synchronized void addEnvironmentInformation(ImmutableMap<String, S { Selenide.sleep(100); } - lock = FileChannel.open(Paths.get(getEnvFile().getAbsolutePath()), StandardOpenOption.APPEND).tryLock(); + try + { + lock = FileChannel.open(Paths.get(getEnvFile().getAbsolutePath()), StandardOpenOption.APPEND).tryLock(); + } + catch (OverlappingFileLockException e) + { + LOGGER.debug(getEnvFile() + " is already locked"); + } retries++; } while (retries < MAX_RETRY_COUNT && lock == null); @@ -444,12 +452,13 @@ else if (key.equals(entry.getKey())) { LOGGER.warn("Could not acquire Filelock in time. Failed to add information about enviroment to Allure report"); } - }catch(ParserConfigurationException|TransformerException|SAXException| + } + catch (ParserConfigurationException | TransformerException | SAXException | - IOException e) - { - LOGGER.warn("Failed to add information about environment to Allure report", e); - } + IOException e) + { + LOGGER.warn("Failed to add information about environment to Allure report", e); + } } /** diff --git a/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/FixedRandomnessOfRandomBrowser.java b/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/FixedRandomnessOfRandomBrowser.java index 7d052bfb..0b491030 100644 --- a/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/FixedRandomnessOfRandomBrowser.java +++ b/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/FixedRandomnessOfRandomBrowser.java @@ -12,8 +12,8 @@ import com.xceptance.neodymium.junit4.NeodymiumRunner; import com.xceptance.neodymium.util.Neodymium; -//@Browser("Chrome_1024x768") -//@Browser("Chrome_1500x1000") +@Browser("Chrome_1024x768") +@Browser("Chrome_1500x1000") @Browser("FF_1024x768") @Browser("FF_1500x1000") @RandomBrowsers(2) diff --git a/src/test/java/com/xceptance/neodymium/junit4/tests/BrowserstackProxyErrorTest.java b/src/test/java/com/xceptance/neodymium/junit4/tests/BrowserstackProxyErrorTest.java index 0788a644..9fe2abec 100644 --- a/src/test/java/com/xceptance/neodymium/junit4/tests/BrowserstackProxyErrorTest.java +++ b/src/test/java/com/xceptance/neodymium/junit4/tests/BrowserstackProxyErrorTest.java @@ -11,6 +11,7 @@ import org.junit.runner.JUnitCore; import org.junit.runner.Result; +import com.xceptance.neodymium.common.browser.configuration.MultibrowserConfiguration; import com.xceptance.neodymium.junit4.testclasses.multibrowser.BrowserstackHomePageTest; import com.xceptance.neodymium.util.TestConfiguration; @@ -42,9 +43,13 @@ public static void beforeClass() throws IOException properties2.put("browserprofile.Safari_Browserstack.browserName", "Safari"); properties2.put("browserprofile.Safari_Browserstack.version", "14.0"); properties2.put("browserprofile.Safari_Browserstack.testEnvironment", "browserstack"); - File tempConfigFile2 = new File("./config/dev-browser.properties"); + File tempConfigFile2 = File.createTempFile("BrowserstackProxyErrorTest", "", new File("./config/")); writeMapToPropertiesFile(properties2, tempConfigFile2); tempFiles.add(tempConfigFile2); + + // this line is important as we initialize the config from the temporary file we created above + MultibrowserConfiguration.clearAllInstances(); + MultibrowserConfiguration.getInstance(tempConfigFile2.getPath()); } @Test diff --git a/src/test/java/com/xceptance/neodymium/junit4/tests/BrowserstackProxyTest.java b/src/test/java/com/xceptance/neodymium/junit4/tests/BrowserstackProxyTest.java index d419a41d..c7415186 100644 --- a/src/test/java/com/xceptance/neodymium/junit4/tests/BrowserstackProxyTest.java +++ b/src/test/java/com/xceptance/neodymium/junit4/tests/BrowserstackProxyTest.java @@ -11,6 +11,7 @@ import org.junit.runner.JUnitCore; import org.junit.runner.Result; +import com.xceptance.neodymium.common.browser.configuration.MultibrowserConfiguration; import com.xceptance.neodymium.junit4.testclasses.multibrowser.BrowserstackHomePageTest; import com.xceptance.neodymium.util.TestConfiguration; @@ -42,9 +43,13 @@ public static void beforeClass() throws IOException properties2.put("browserprofile.Safari_Browserstack.browserName", "Safari"); properties2.put("browserprofile.Safari_Browserstack.version", "14.0"); properties2.put("browserprofile.Safari_Browserstack.testEnvironment", "browserstack"); - File tempConfigFile2 = new File("./config/dev-browser.properties"); + File tempConfigFile2 = File.createTempFile("BrowserstackProxyTest", "", new File("./config/")); writeMapToPropertiesFile(properties2, tempConfigFile2); tempFiles.add(tempConfigFile2); + + // this line is important as we initialize the config from the temporary file we created above + MultibrowserConfiguration.clearAllInstances(); + MultibrowserConfiguration.getInstance(tempConfigFile2.getPath()); } @Test diff --git a/src/test/java/com/xceptance/neodymium/junit4/tests/BrowserstackTest.java b/src/test/java/com/xceptance/neodymium/junit4/tests/BrowserstackTest.java index 70b34bf9..df2b2fac 100644 --- a/src/test/java/com/xceptance/neodymium/junit4/tests/BrowserstackTest.java +++ b/src/test/java/com/xceptance/neodymium/junit4/tests/BrowserstackTest.java @@ -11,6 +11,7 @@ import org.junit.runner.JUnitCore; import org.junit.runner.Result; +import com.xceptance.neodymium.common.browser.configuration.MultibrowserConfiguration; import com.xceptance.neodymium.junit4.testclasses.multibrowser.BrowserstackHomePageTest; import com.xceptance.neodymium.util.TestConfiguration; @@ -36,9 +37,13 @@ public static void beforeClass() throws IOException properties2.put("browserprofile.Safari_Browserstack.browserName", "Safari"); properties2.put("browserprofile.Safari_Browserstack.version", "14.0"); properties2.put("browserprofile.Safari_Browserstack.testEnvironment", "browserstack"); - File tempConfigFile2 = new File("./config/dev-browser.properties"); + File tempConfigFile2 = File.createTempFile("BrowserstackTest", "", new File("./config/")); writeMapToPropertiesFile(properties2, tempConfigFile2); tempFiles.add(tempConfigFile2); + + // this line is important as we initialize the config from the temporary file we created above + MultibrowserConfiguration.clearAllInstances(); + MultibrowserConfiguration.getInstance(tempConfigFile2.getPath()); } @Test diff --git a/src/test/java/com/xceptance/neodymium/junit5/tests/BrowserstackProxyErrorTest.java b/src/test/java/com/xceptance/neodymium/junit5/tests/BrowserstackProxyErrorTest.java index 4ead2a45..0223a70f 100644 --- a/src/test/java/com/xceptance/neodymium/junit5/tests/BrowserstackProxyErrorTest.java +++ b/src/test/java/com/xceptance/neodymium/junit5/tests/BrowserstackProxyErrorTest.java @@ -9,6 +9,7 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import com.xceptance.neodymium.common.browser.configuration.MultibrowserConfiguration; import com.xceptance.neodymium.junit5.testclasses.multibrowser.BrowserstackHomePageTest; import com.xceptance.neodymium.junit5.tests.utils.NeodymiumTestExecutionSummary; import com.xceptance.neodymium.util.TestConfiguration; @@ -41,9 +42,14 @@ public static void beforeClass() throws IOException properties2.put("browserprofile.Safari_Browserstack.browserName", "Safari"); properties2.put("browserprofile.Safari_Browserstack.version", "14.0"); properties2.put("browserprofile.Safari_Browserstack.testEnvironment", "browserstack"); - File tempConfigFile2 = new File("./config/dev-browser.properties"); + + File tempConfigFile2 = File.createTempFile("BrowserstackProxyErrorTest", "", new File("./config/")); writeMapToPropertiesFile(properties2, tempConfigFile2); tempFiles.add(tempConfigFile2); + + // this line is important as we initialize the config from the temporary file we created above + MultibrowserConfiguration.clearAllInstances(); + MultibrowserConfiguration.getInstance(tempConfigFile2.getPath()); } @Test diff --git a/src/test/java/com/xceptance/neodymium/junit5/tests/BrowserstackProxyTest.java b/src/test/java/com/xceptance/neodymium/junit5/tests/BrowserstackProxyTest.java index fa44525d..58a341f5 100644 --- a/src/test/java/com/xceptance/neodymium/junit5/tests/BrowserstackProxyTest.java +++ b/src/test/java/com/xceptance/neodymium/junit5/tests/BrowserstackProxyTest.java @@ -9,6 +9,7 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import com.xceptance.neodymium.common.browser.configuration.MultibrowserConfiguration; import com.xceptance.neodymium.junit5.testclasses.multibrowser.BrowserstackHomePageTest; import com.xceptance.neodymium.junit5.tests.utils.NeodymiumTestExecutionSummary; import com.xceptance.neodymium.util.TestConfiguration; @@ -41,9 +42,13 @@ public static void beforeClass() throws IOException properties2.put("browserprofile.Safari_Browserstack.browserName", "Safari"); properties2.put("browserprofile.Safari_Browserstack.version", "14.0"); properties2.put("browserprofile.Safari_Browserstack.testEnvironment", "browserstack"); - File tempConfigFile2 = new File("./config/dev-browser.properties"); + File tempConfigFile2 = File.createTempFile("BrowserstackProxyTest", "", new File("./config/")); writeMapToPropertiesFile(properties2, tempConfigFile2); tempFiles.add(tempConfigFile2); + + // this line is important as we initialize the config from the temporary file we created above + MultibrowserConfiguration.clearAllInstances(); + MultibrowserConfiguration.getInstance(tempConfigFile2.getPath()); } @Test diff --git a/src/test/java/com/xceptance/neodymium/junit5/tests/BrowserstackTest.java b/src/test/java/com/xceptance/neodymium/junit5/tests/BrowserstackTest.java index 751c1692..9755fee6 100644 --- a/src/test/java/com/xceptance/neodymium/junit5/tests/BrowserstackTest.java +++ b/src/test/java/com/xceptance/neodymium/junit5/tests/BrowserstackTest.java @@ -9,6 +9,7 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import com.xceptance.neodymium.common.browser.configuration.MultibrowserConfiguration; import com.xceptance.neodymium.junit5.testclasses.multibrowser.BrowserstackHomePageTest; import com.xceptance.neodymium.junit5.tests.utils.NeodymiumTestExecutionSummary; import com.xceptance.neodymium.util.TestConfiguration; @@ -24,7 +25,7 @@ public static void beforeClass() throws IOException properties1.put("browserprofile.testEnvironment.browserstack.url", "https://hub-cloud.browserstack.com/wd/hub"); properties1.put("browserprofile.testEnvironment.browserstack.username", CONFIGURATION.browserstackUsername()); properties1.put("browserprofile.testEnvironment.browserstack.password", CONFIGURATION.browserstackAccessKey()); - + File tempConfigFile1 = new File("./config/credentials.properties"); writeMapToPropertiesFile(properties1, tempConfigFile1); tempFiles.add(tempConfigFile1); @@ -36,9 +37,13 @@ public static void beforeClass() throws IOException properties2.put("browserprofile.Safari_Browserstack.browserName", "Safari"); properties2.put("browserprofile.Safari_Browserstack.version", "14.0"); properties2.put("browserprofile.Safari_Browserstack.testEnvironment", "browserstack"); - File tempConfigFile2 = new File("./config/dev-browser.properties"); + File tempConfigFile2 = File.createTempFile("BrowserstackTest", "", new File("./config/")); writeMapToPropertiesFile(properties2, tempConfigFile2); tempFiles.add(tempConfigFile2); + + // this line is important as we initialize the config from the temporary file we created above + MultibrowserConfiguration.clearAllInstances(); + MultibrowserConfiguration.getInstance(tempConfigFile2.getPath()); } @Test diff --git a/src/test/java/com/xceptance/neodymium/util/AllureAddonsTest.java b/src/test/java/com/xceptance/neodymium/util/AllureAddonsTest.java index 1f66a897..424d9f48 100644 --- a/src/test/java/com/xceptance/neodymium/util/AllureAddonsTest.java +++ b/src/test/java/com/xceptance/neodymium/util/AllureAddonsTest.java @@ -108,7 +108,7 @@ public void TestAllureAddEnvironmentInformation() throws Exception AllureAddons.addEnvironmentInformation(map6, EnvironmentInfoMode.ADD); this.validateEnvironmentFile(expectedFileContentList); - + // ignore value ImmutableMap<String, String> map7 = ImmutableMap.<String, String> builder() .put("d", @@ -141,7 +141,7 @@ public void TestAllureAddEnvironmentInformation() throws Exception private File getEnvFile() { File allureResultsDir = AllureAddons.getAllureResultsFolder(); - return new File(allureResultsDir.getAbsoluteFile() + File.separator + "environment.xml"); + return new File(allureResultsDir.getAbsoluteFile() + File.separator + "environment-test.xml"); } private void validateEnvironmentFile(List<Entry<String, String>> list) throws Exception @@ -151,10 +151,10 @@ private void validateEnvironmentFile(List<Entry<String, String>> list) throws Ex Document doc = docBuilder.parse(getEnvFile()); Node environment = doc.getDocumentElement(); - Assert.assertEquals("Wrong root node name in environments.xml", "environment", environment.getNodeName()); + Assert.assertEquals("Wrong root node name in environments-test.xml", "environment-test", environment.getNodeName()); NodeList childNodes = environment.getChildNodes(); - Assert.assertEquals("Wrong number of params in environments.xml", list.size(), childNodes.getLength()); + Assert.assertEquals("Wrong number of params in environments-test.xml", list.size(), childNodes.getLength()); List<NameValuePair> params = new ArrayList<NameValuePair>(); for (int i = 0; i < childNodes.getLength(); i++) diff --git a/src/test/java/com/xceptance/neodymium/util/LighthouseUtilsTest.java b/src/test/java/com/xceptance/neodymium/util/LighthouseUtilsTest.java index 3aa1e56c..4df2327d 100644 --- a/src/test/java/com/xceptance/neodymium/util/LighthouseUtilsTest.java +++ b/src/test/java/com/xceptance/neodymium/util/LighthouseUtilsTest.java @@ -1,19 +1,24 @@ package com.xceptance.neodymium.util; import java.io.BufferedReader; +import java.io.IOException; import java.io.InputStreamReader; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; import com.codeborne.selenide.Selenide; import com.xceptance.neodymium.common.browser.Browser; -import com.xceptance.neodymium.junit5.NeodymiumTest; +import com.xceptance.neodymium.junit4.NeodymiumRunner; +@RunWith(NeodymiumRunner.class) @Browser("Chrome_headless") public class LighthouseUtilsTest { - @NeodymiumTest + @Test public void testLighthouseUtilsHappyPath() throws Exception { Neodymium.configuration().setProperty("neodymium.lighthouse.assert.thresholdScore.performance", "0.5"); @@ -21,67 +26,14 @@ public void testLighthouseUtilsHappyPath() throws Exception Neodymium.configuration().setProperty("neodymium.lighthouse.assert.thresholdScore.bestPractices", "0.5"); Neodymium.configuration().setProperty("neodymium.lighthouse.assert.thresholdScore.seo", "0.5"); - Class<LighthouseUtils> clazz = LighthouseUtils.class; - Method runProcess = clazz.getDeclaredMethod("runProcess", String[].class); - runProcess.setAccessible(true); - Process p = null; - - if (System.getProperty("os.name").toLowerCase().contains("win")) - { - Neodymium.configuration() - .setProperty("neodymium.lighthouse.binaryPath", - "echo {\"categories\": {\"performance\": {\"score\": 0.5}, \"accessibility\": {\"score\": 0.5}, \"best-practices\": {\"score\": 0.5}, \"seo\": {\"score\": 0.5}}} > target/lighthouseUtilsReport.report.json | echo makeCommentWork #"); - p = (Process) runProcess.invoke(null, new Object[] - { - new String[] - { - "cmd.exe", "/c", "echo fabricatedHtml > target/lighthouseUtilsReport.report.html" - } - }); - } - else if (System.getProperty("os.name").toLowerCase().contains("linux") || System.getProperty("os.name").toLowerCase().contains("mac")) - { - try - { - Neodymium.configuration() - .setProperty("neodymium.lighthouse.binaryPath", - "echo {\"categories\": {\"performance\": {\"score\": 0.5}, \"accessibility\": {\"score\": 0.5}, \"best-practices\": {\"score\": 0.5}, \"seo\": {\"score\": 0.5}}} > target/lighthouseUtilsReport.report.json"); - p = (Process) runProcess.invoke(null, new Object[] - { - new String[] - { - "sh", "-c", "echo fabricatedHtml > target/lighthouseUtilsReport.report.html" - } - }); - } - catch (Exception e) - { - p = (Process) runProcess.invoke(null, new Object[] - { - new String[] - { - "echo fabricatedHtml > target/lighthouseUtilsReport.report.html" - } - }); - } - } - else - { - throw new Exception("your current operation system is not supported, please use Windows, Linux or MacOS"); - } - - BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream())); - while (r.readLine() != null) - { - continue; - } + mockLighthouseBinary(); Selenide.open("https://blog.xceptance.com/"); LighthouseUtils.createLightHouseReport("lighthouseUtilsReport"); } - @NeodymiumTest + @Test public void testLighthouseUtilsPerformanceException() throws Exception { Neodymium.configuration().setProperty("neodymium.lighthouse.assert.thresholdScore.performance", "0.51"); @@ -89,22 +41,7 @@ public void testLighthouseUtilsPerformanceException() throws Exception Neodymium.configuration().setProperty("neodymium.lighthouse.assert.thresholdScore.bestPractices", "0.5"); Neodymium.configuration().setProperty("neodymium.lighthouse.assert.thresholdScore.seo", "0.5"); - if (System.getProperty("os.name").toLowerCase().contains("win")) - { - Neodymium.configuration() - .setProperty("neodymium.lighthouse.binaryPath", - "echo {\"categories\": {\"performance\": {\"score\": 0.5}, \"accessibility\": {\"score\": 0.5}, \"best-practices\": {\"score\": 0.5}, \"seo\": {\"score\": 0.5}}} > target/lighthouseUtilsReport.report.json | echo makeCommentWork #"); - } - else if (System.getProperty("os.name").toLowerCase().contains("linux") || System.getProperty("os.name").toLowerCase().contains("mac")) - { - Neodymium.configuration() - .setProperty("neodymium.lighthouse.binaryPath", - "echo {\"categories\": {\"performance\": {\"score\": 0.5}, \"accessibility\": {\"score\": 0.5}, \"best-practices\": {\"score\": 0.5}, \"seo\": {\"score\": 0.5}}} > target/lighthouseUtilsReport.report.json"); - } - else - { - throw new Exception("your current operation system is not supported, please use Windows, Linux or MacOS"); - } + mockLighthouseBinary(); Selenide.open("https://blog.xceptance.com/"); @@ -120,31 +57,14 @@ else if (System.getProperty("os.name").toLowerCase().contains("linux") || System } } - @NeodymiumTest + @Test public void testLighthouseUtilsAccessibilityException() throws Exception { Neodymium.configuration().setProperty("neodymium.lighthouse.assert.thresholdScore.performance", "0.5"); Neodymium.configuration().setProperty("neodymium.lighthouse.assert.thresholdScore.accessibility", "0.51"); Neodymium.configuration().setProperty("neodymium.lighthouse.assert.thresholdScore.bestPractices", "0.5"); Neodymium.configuration().setProperty("neodymium.lighthouse.assert.thresholdScore.seo", "0.5"); - - if (System.getProperty("os.name").toLowerCase().contains("win")) - { - Neodymium.configuration() - .setProperty("neodymium.lighthouse.binaryPath", - "echo {\"categories\": {\"performance\": {\"score\": 0.5}, \"accessibility\": {\"score\": 0.5}, \"best-practices\": {\"score\": 0.5}, \"seo\": {\"score\": 0.5}}} > target/lighthouseUtilsReport.report.json | echo makeCommentWork #"); - } - else if (System.getProperty("os.name").toLowerCase().contains("linux") || System.getProperty("os.name").toLowerCase().contains("mac")) - { - Neodymium.configuration() - .setProperty("neodymium.lighthouse.binaryPath", - "echo {\"categories\": {\"performance\": {\"score\": 0.5}, \"accessibility\": {\"score\": 0.5}, \"best-practices\": {\"score\": 0.5}, \"seo\": {\"score\": 0.5}}} > target/lighthouseUtilsReport.report.json"); - } - else - { - throw new Exception("your current operation system is not supported, please use Windows, Linux or MacOS"); - } - + mockLighthouseBinary(); Selenide.open("https://blog.xceptance.com/"); try @@ -159,31 +79,14 @@ else if (System.getProperty("os.name").toLowerCase().contains("linux") || System } } - @NeodymiumTest + @Test public void testLighthouseUtilsBestPracticesException() throws Exception { Neodymium.configuration().setProperty("neodymium.lighthouse.assert.thresholdScore.performance", "0.5"); Neodymium.configuration().setProperty("neodymium.lighthouse.assert.thresholdScore.accessibility", "0.5"); Neodymium.configuration().setProperty("neodymium.lighthouse.assert.thresholdScore.bestPractices", "0.51"); Neodymium.configuration().setProperty("neodymium.lighthouse.assert.thresholdScore.seo", "0.5"); - - if (System.getProperty("os.name").toLowerCase().contains("win")) - { - Neodymium.configuration() - .setProperty("neodymium.lighthouse.binaryPath", - "echo {\"categories\": {\"performance\": {\"score\": 0.5}, \"accessibility\": {\"score\": 0.5}, \"best-practices\": {\"score\": 0.5}, \"seo\": {\"score\": 0.5}}} > target/lighthouseUtilsReport.report.json | echo makeCommentWork #"); - } - else if (System.getProperty("os.name").toLowerCase().contains("linux") || System.getProperty("os.name").toLowerCase().contains("mac")) - { - Neodymium.configuration() - .setProperty("neodymium.lighthouse.binaryPath", - "echo {\"categories\": {\"performance\": {\"score\": 0.5}, \"accessibility\": {\"score\": 0.5}, \"best-practices\": {\"score\": 0.5}, \"seo\": {\"score\": 0.5}}} > target/lighthouseUtilsReport.report.json"); - } - else - { - throw new Exception("your current operation system is not supported, please use Windows, Linux or MacOS"); - } - + mockLighthouseBinary(); Selenide.open("https://blog.xceptance.com/"); try @@ -198,7 +101,7 @@ else if (System.getProperty("os.name").toLowerCase().contains("linux") || System } } - @NeodymiumTest + @Test public void testLighthouseUtilsSeoException() throws Exception { Neodymium.configuration().setProperty("neodymium.lighthouse.assert.thresholdScore.performance", "0.5"); @@ -206,22 +109,7 @@ public void testLighthouseUtilsSeoException() throws Exception Neodymium.configuration().setProperty("neodymium.lighthouse.assert.thresholdScore.bestPractices", "0.5"); Neodymium.configuration().setProperty("neodymium.lighthouse.assert.thresholdScore.seo", "0.51"); - if (System.getProperty("os.name").toLowerCase().contains("win")) - { - Neodymium.configuration() - .setProperty("neodymium.lighthouse.binaryPath", - "echo {\"categories\": {\"performance\": {\"score\": 0.5}, \"accessibility\": {\"score\": 0.5}, \"best-practices\": {\"score\": 0.5}, \"seo\": {\"score\": 0.5}}} > target/lighthouseUtilsReport.report.json | echo makeCommentWork #"); - } - else if (System.getProperty("os.name").toLowerCase().contains("linux") || System.getProperty("os.name").toLowerCase().contains("mac")) - { - Neodymium.configuration() - .setProperty("neodymium.lighthouse.binaryPath", - "echo {\"categories\": {\"performance\": {\"score\": 0.5}, \"accessibility\": {\"score\": 0.5}, \"best-practices\": {\"score\": 0.5}, \"seo\": {\"score\": 0.5}}} > target/lighthouseUtilsReport.report.json"); - } - else - { - throw new Exception("your current operation system is not supported, please use Windows, Linux or MacOS"); - } + mockLighthouseBinary(); Selenide.open("https://blog.xceptance.com/"); @@ -237,32 +125,79 @@ else if (System.getProperty("os.name").toLowerCase().contains("linux") || System } } - @NeodymiumTest + @Test public void testLighthouseUtilsBinNotFound() throws Exception { + mockLighthouseBinary(); + Selenide.open("https://blog.xceptance.com/"); + + try + { + LighthouseUtils.createLightHouseReport("lighthouseUtilsReport"); + } + catch (Exception e) + { + Assert.assertTrue("the compared error messages doesn't match", + e.getMessage().contains("please install lighthouse and add it to the PATH or enter the correct lighthouse binary location")); + } + } + + private void mockLighthouseBinary() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, Exception, IOException + { + Class<LighthouseUtils> clazz = LighthouseUtils.class; + Method runProcess = clazz.getDeclaredMethod("runProcess", String[].class); + runProcess.setAccessible(true); + Process p = null; + if (System.getProperty("os.name").toLowerCase().contains("win")) { - Neodymium.configuration().setProperty("neodymium.lighthouse.binaryPath", "programmWhichIsDefinitelyNotInstalled"); + Neodymium.configuration() + .setProperty("neodymium.lighthouse.binaryPath", + "echo {\"categories\": {\"performance\": {\"score\": 0.5}, \"accessibility\": {\"score\": 0.5}, \"best-practices\": {\"score\": 0.5}, \"seo\": {\"score\": 0.5}}} > target/lighthouseUtilsReport.report.json | echo makeCommentWork #"); + p = (Process) runProcess.invoke(null, new Object[] + { + new String[] + { + "cmd.exe", "/c", "echo fabricatedHtml > target/lighthouseUtilsReport.report.html" + } + }); } else if (System.getProperty("os.name").toLowerCase().contains("linux") || System.getProperty("os.name").toLowerCase().contains("mac")) { - Neodymium.configuration().setProperty("neodymium.lighthouse.binaryPath", "programmWhichIsDefinitelyNotInstalled"); + try + { + Neodymium.configuration() + .setProperty("neodymium.lighthouse.binaryPath", + "echo {\"categories\": {\"performance\": {\"score\": 0.5}, \"accessibility\": {\"score\": 0.5}, \"best-practices\": {\"score\": 0.5}, \"seo\": {\"score\": 0.5}}} > target/lighthouseUtilsReport.report.json"); + p = (Process) runProcess.invoke(null, new Object[] + { + new String[] + { + "sh", "-c", "echo fabricatedHtml > target/lighthouseUtilsReport.report.html" + } + }); + } + catch (Exception e) + { + p = (Process) runProcess.invoke(null, new Object[] + { + new String[] + { + "echo fabricatedHtml > target/lighthouseUtilsReport.report.html" + } + }); + } } else { throw new Exception("your current operation system is not supported, please use Windows, Linux or MacOS"); } - Selenide.open("https://blog.xceptance.com/"); - - try - { - LighthouseUtils.createLightHouseReport("lighthouseUtilsReport"); - } - catch (Exception e) + BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream())); + while (r.readLine() != null) { - Assert.assertTrue("the compared error messages doesn't match", - e.getMessage().contains("please install lighthouse and add it to the PATH or enter the correct lighthouse binary location")); + continue; } } + } \ No newline at end of file From 1f5282b3b0950ed258fe733265339cb1556df275 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Tue, 17 Dec 2024 16:29:18 +0100 Subject: [PATCH 05/24] [#322] fix for junit-4 --- .../com/xceptance/neodymium/common/browser/BrowserData.java | 1 + .../neodymium/junit4/statement/browser/BrowserStatement.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java b/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java index a2011b75..9febeaed 100644 --- a/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java +++ b/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java @@ -45,6 +45,7 @@ public BrowserData(Class<?> testClass) public void initClassAnnotationsFor(Class<?> testClass) { + this.testClass = testClass; classRandomBrowsersAnnotation = getAnnotations(testClass, RandomBrowsers.class); if (getAnnotations(testClass, SuppressBrowsers.class).isEmpty()) diff --git a/src/main/java/com/xceptance/neodymium/junit4/statement/browser/BrowserStatement.java b/src/main/java/com/xceptance/neodymium/junit4/statement/browser/BrowserStatement.java index 740b768b..d97cc1b9 100644 --- a/src/main/java/com/xceptance/neodymium/junit4/statement/browser/BrowserStatement.java +++ b/src/main/java/com/xceptance/neodymium/junit4/statement/browser/BrowserStatement.java @@ -65,7 +65,7 @@ public void evaluate() throws Throwable { if (!param.isStartBrowserOnCleanUp() && Neodymium.getWebDriverStateContainer() != null) { - new BrowserRunner().teardown(testFailed, param, Neodymium.getWebDriverStateContainer()); + browserRunner.teardown(testFailed, param, Neodymium.getWebDriverStateContainer()); } } } From 20796550b10622f97798ec14dd2470c02dffc7c7 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Wed, 18 Dec 2024 10:33:26 +0100 Subject: [PATCH 06/24] try to fix AllureAddonsTest --- .../xceptance/neodymium/util/AllureAddonsTest.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/xceptance/neodymium/util/AllureAddonsTest.java b/src/test/java/com/xceptance/neodymium/util/AllureAddonsTest.java index 424d9f48..4bc4ce94 100644 --- a/src/test/java/com/xceptance/neodymium/util/AllureAddonsTest.java +++ b/src/test/java/com/xceptance/neodymium/util/AllureAddonsTest.java @@ -10,13 +10,18 @@ import org.junit.Assert; import org.junit.jupiter.api.Test; +import org.junit.runner.RunWith; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import com.google.common.collect.ImmutableMap; +import com.xceptance.neodymium.common.browser.SuppressBrowsers; +import com.xceptance.neodymium.junit4.NeodymiumRunner; import com.xceptance.neodymium.util.AllureAddons.EnvironmentInfoMode; +@RunWith(NeodymiumRunner.class) +@SuppressBrowsers public class AllureAddonsTest { @Test @@ -141,7 +146,7 @@ public void TestAllureAddEnvironmentInformation() throws Exception private File getEnvFile() { File allureResultsDir = AllureAddons.getAllureResultsFolder(); - return new File(allureResultsDir.getAbsoluteFile() + File.separator + "environment-test.xml"); + return new File(allureResultsDir.getAbsoluteFile() + File.separator + "environment.xml"); } private void validateEnvironmentFile(List<Entry<String, String>> list) throws Exception @@ -151,10 +156,10 @@ private void validateEnvironmentFile(List<Entry<String, String>> list) throws Ex Document doc = docBuilder.parse(getEnvFile()); Node environment = doc.getDocumentElement(); - Assert.assertEquals("Wrong root node name in environments-test.xml", "environment-test", environment.getNodeName()); + Assert.assertEquals("Wrong root node name in environments-test.xml", "environment", environment.getNodeName()); NodeList childNodes = environment.getChildNodes(); - Assert.assertEquals("Wrong number of params in environments-test.xml", list.size(), childNodes.getLength()); + Assert.assertEquals("Wrong number of params in environments.xml", list.size(), childNodes.getLength()); List<NameValuePair> params = new ArrayList<NameValuePair>(); for (int i = 0; i < childNodes.getLength(); i++) From 682a04060684f140e329b3fb0f58e50e720c3e22 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Wed, 18 Dec 2024 11:09:08 +0100 Subject: [PATCH 07/24] [#330] fix AllureSelenideListenerTest --- .../CucumberValidateAllureSelenideListenerIsActive.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/xceptance/neodymium/junit4/testclasses/cucumber/CucumberValidateAllureSelenideListenerIsActive.java b/src/test/java/com/xceptance/neodymium/junit4/testclasses/cucumber/CucumberValidateAllureSelenideListenerIsActive.java index 032faa89..367941c1 100644 --- a/src/test/java/com/xceptance/neodymium/junit4/testclasses/cucumber/CucumberValidateAllureSelenideListenerIsActive.java +++ b/src/test/java/com/xceptance/neodymium/junit4/testclasses/cucumber/CucumberValidateAllureSelenideListenerIsActive.java @@ -7,7 +7,14 @@ import io.cucumber.junit.CucumberOptions; @RunWith(NeodymiumCucumberRunner.class) -@CucumberOptions(features = "src/test/resources/com/xceptance/neodymium/junit4/testclasses/cucumber/CucumberValidateAllureSelenideListenerIsActive.feature", glue = "com/xceptance/neodymium/junit4/testclasses/cucumber", plugin = "null_summary") +@CucumberOptions(features = "src/test/resources/com/xceptance/neodymium/junit4/testclasses/cucumber/CucumberValidateAllureSelenideListenerIsActive.feature", glue = "com/xceptance/neodymium/junit4/testclasses/cucumber", plugin = +{ + // Plugins for generating additional JSON and XML reports. + // Is equivalent to cucumber.plugin in cucumber.properties. + // The plugin for generating an html report is included in the cucumber.properties file for all test cases. + "json:target/cucumber-report/cucumber.json", + "junit:target/cucumber-report/cucumber.xml" +}) public class CucumberValidateAllureSelenideListenerIsActive { } From 495cd6ccc352edd580465ed17fa564040a6e8087 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Wed, 18 Dec 2024 11:22:12 +0100 Subject: [PATCH 08/24] [#330] try to stabilize DownloadFilesExecutorTest --- .../testclasses/webDriver/DownloadFilesInDifferentWays.java | 2 +- .../neodymium/junit4/tests/DownloadFilesExecutorTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java b/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java index 9fb19721..47426954 100644 --- a/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java +++ b/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java @@ -57,7 +57,7 @@ public void downloadOnFormSubmission() $(".fc-cta-consent").click(); $("#fileSelector").uploadFile(new File("src/test/resources/2020-in-one-picture.png")); $("button[aria-label='COMBINED']").shouldBe(enabled, Duration.ofMillis(9000)); - $("button[aria-label='COMBINED']").scrollIntoView(true).click(); + $("button[aria-label='COMBINED']").scrollIntoView("{block: 'center'}").click(); waitForFileDownloading(); validateFilePresentInDownloadHistory(); } diff --git a/src/test/java/com/xceptance/neodymium/junit4/tests/DownloadFilesExecutorTest.java b/src/test/java/com/xceptance/neodymium/junit4/tests/DownloadFilesExecutorTest.java index f4d15627..10aa4257 100644 --- a/src/test/java/com/xceptance/neodymium/junit4/tests/DownloadFilesExecutorTest.java +++ b/src/test/java/com/xceptance/neodymium/junit4/tests/DownloadFilesExecutorTest.java @@ -27,7 +27,7 @@ public static void beforeClass() throws IOException properties.put("browserprofile.chrome_download.browser", "chrome"); // needed to enable validation of chrome://downloads/ page - properties.put("browserprofile.chrome_download.headless", "false"); + properties.put("browserprofile.chrome_download.headless", "true"); properties.put("browserprofile.chrome_download.downloadDirectory", "target"); properties.put("browserprofile.firefox_download.name", "firefox_download"); From 712b95f87f78222e8fceedd20d26c8304b4f90c6 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Wed, 18 Dec 2024 12:17:01 +0100 Subject: [PATCH 09/24] [#330] improve stability of DownloadFilesExecutorTest --- .../testclasses/webDriver/DownloadFilesInDifferentWays.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java b/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java index 47426954..d742fa51 100644 --- a/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java +++ b/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java @@ -3,6 +3,7 @@ import static com.codeborne.selenide.Condition.attribute; import static com.codeborne.selenide.Condition.enabled; import static com.codeborne.selenide.Condition.exactText; +import static com.codeborne.selenide.Condition.exist; import static com.codeborne.selenide.Selenide.$; import static com.codeborne.selenide.Selenide.$$; @@ -41,7 +42,7 @@ public void downloadViaLink() { fileName = new File("target/02_2020-Java_aktuell-Autor-Rene_Schwietzke-High-Performance-Java-Hinter-den-Kulissen-von-Java.pdf"); Selenide.open("https://blog.xceptance.com/2020/02/28/ijug-magazin-java-aktuell-high-performance-java/"); - $(".alignright.is-resized").scrollIntoView(true).click(); + $(".alignright.is-resized").scrollIntoView("{block: 'center'}").click(); waitForFileDownloading(); validateFilePresentInDownloadHistory(); } @@ -92,7 +93,8 @@ private void validateFilePresentInDownloadHistory() if (Neodymium.getBrowserName().contains("chrome")) { Selenide.open("chrome://downloads/"); - $$(Selectors.shadowCss("#title-area", "downloads-manager", "#downloadsList downloads-item")).findBy(exactText(fileName.getName())).parent() + $$(Selectors.shadowCss("#title-area", "downloads-manager", "#downloadsList downloads-item")).findBy(exactText(fileName.getName())) + .should(exist, Duration.ofMillis(9000)).parent() .find(".description[role='gridcell']") .shouldHave(attribute("hidden")); } From 2bd3f972b68bf66b5cdf7a8b85afca7d57131608 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Wed, 18 Dec 2024 12:42:14 +0100 Subject: [PATCH 10/24] [#330] add sysouts to investigate failure of DownloadFilesInDifferentWays --- .../testclasses/webDriver/DownloadFilesInDifferentWays.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java b/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java index d742fa51..30332a86 100644 --- a/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java +++ b/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java @@ -93,6 +93,10 @@ private void validateFilePresentInDownloadHistory() if (Neodymium.getBrowserName().contains("chrome")) { Selenide.open("chrome://downloads/"); + System.out.println($$(Selectors.shadowCss("#title-area", "downloads-manager", + "#downloadsList downloads-item")).size()); + $$(Selectors.shadowCss("#title-area", "downloads-manager", + "#downloadsList downloads-item")).asDynamicIterable().forEach(element -> System.out.println(element.getText())); $$(Selectors.shadowCss("#title-area", "downloads-manager", "#downloadsList downloads-item")).findBy(exactText(fileName.getName())) .should(exist, Duration.ofMillis(9000)).parent() .find(".description[role='gridcell']") From 65ce0703861322b259e4d34acd1649fd2e3b9d56 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Wed, 18 Dec 2024 14:49:22 +0100 Subject: [PATCH 11/24] [#322] improve code structure --- .../common/browser/BrowserAfterRunner.java | 4 ++-- .../common/browser/BrowserBeforeRunner.java | 4 ++-- .../neodymium/common/browser/BrowserData.java | 22 ++++++++++++++----- .../common/browser/BrowserMethodData.java | 15 +++++++++++++ 4 files changed, 35 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/xceptance/neodymium/common/browser/BrowserAfterRunner.java b/src/main/java/com/xceptance/neodymium/common/browser/BrowserAfterRunner.java index 257c095d..ea207851 100644 --- a/src/main/java/com/xceptance/neodymium/common/browser/BrowserAfterRunner.java +++ b/src/main/java/com/xceptance/neodymium/common/browser/BrowserAfterRunner.java @@ -33,8 +33,8 @@ public void run(Supplier<Throwable> afterMethodInvocation, Method after, boolean // if browserConfiguration is null, the browser should not be started for this method and browserTag and // browserRunner are therefore not required - BrowserMethodData browserTag = browserConfiguration != null ? BrowserData.addKeepBrowserOpenInformation(browserConfiguration.getBrowserTag(), - after.getDeclaringClass(), after) + BrowserMethodData browserTag = browserConfiguration != null ? BrowserData.addKeepBrowserOpenInformationForBeforeOrAfter(browserConfiguration.getBrowserTag(), + after) : null; BrowserRunner browserRunner = browserTag != null ? new BrowserRunner(browserTag, after.getName()) : null; diff --git a/src/main/java/com/xceptance/neodymium/common/browser/BrowserBeforeRunner.java b/src/main/java/com/xceptance/neodymium/common/browser/BrowserBeforeRunner.java index 26e950d0..a1b928d3 100644 --- a/src/main/java/com/xceptance/neodymium/common/browser/BrowserBeforeRunner.java +++ b/src/main/java/com/xceptance/neodymium/common/browser/BrowserBeforeRunner.java @@ -34,8 +34,8 @@ public void run(Supplier<Throwable> beforeMethodInvocation, Method before, boole // if browserConfiguration is null, the browser should not be started for this method and browserTag and // browserRunner are therefore not required - BrowserMethodData browserTag = browserConfiguration != null ? BrowserData.addKeepBrowserOpenInformation(browserConfiguration.getBrowserTag(), - before.getDeclaringClass(), before) + BrowserMethodData browserTag = browserConfiguration != null ? BrowserData.addKeepBrowserOpenInformationForBeforeOrAfter(browserConfiguration.getBrowserTag(), + before) : null; BrowserRunner browserRunner = browserTag != null ? new BrowserRunner(browserTag, before.getName()) : null; diff --git a/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java b/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java index 9febeaed..672baa11 100644 --- a/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java +++ b/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java @@ -39,7 +39,6 @@ public class BrowserData extends Data public BrowserData(Class<?> testClass) { this(); - this.testClass = testClass; initClassAnnotationsFor(testClass); } @@ -202,15 +201,15 @@ else if (!classRandomBrowsersAnnotation.isEmpty() && methodBrowsers.isEmpty()) { return browsers.stream() .filter(browserTag -> systemBrowserFilter.contains(browserTag)) - .map(browserTag -> addKeepBrowserOpenInformation(browserTag, testClass, testMethod)) + .map(browserTag -> addKeepBrowserOpenInformation(browserTag, testMethod)) .collect(Collectors.toList()); } return browsers.stream() - .map(browserTag -> addKeepBrowserOpenInformation(browserTag, testClass, testMethod)) + .map(browserTag -> addKeepBrowserOpenInformation(browserTag, testMethod)) .collect(Collectors.toList()); } - public static BrowserMethodData addKeepBrowserOpenInformation(String browserTag, Class<?> testClass, Method method) + public static BrowserMethodData addKeepBrowserOpenInformationForBeforeOrAfter(String browserTag, Method method) { List<KeepBrowserOpen> methodKeepBrowserOpenAnnotations = getAnnotations(method, KeepBrowserOpen.class); List<KeepBrowserOpen> classKeepBrowserOpenAnnotations = getAnnotations(method.getDeclaringClass(), KeepBrowserOpen.class); @@ -247,6 +246,13 @@ public static BrowserMethodData addKeepBrowserOpenInformation(String browserTag, keepOpenOnFailure = false; } } + + return new BrowserMethodData(browserTag, keepOpen, keepOpenOnFailure, false, false, new ArrayList<Method>()); + } + + private BrowserMethodData addKeepBrowserOpenInformation(String browserTag, Method method) + { + BrowserMethodData browserMethodData = addKeepBrowserOpenInformationForBeforeOrAfter(browserTag, method); boolean junit5 = method.getAnnotation(NeodymiumTest.class) != null; List<Method> afterMethodsWithTestBrowser = List.of(testClass.getMethods()).stream() .filter(classMethod -> (junit5 ? classMethod.getAnnotation(AfterEach.class) @@ -254,7 +260,8 @@ public static BrowserMethodData addKeepBrowserOpenInformation(String browserTag, .collect(Collectors.toList()); if (!(Neodymium.configuration().startNewBrowserForSetUp() && Neodymium.configuration().startNewBrowserForCleanUp())) { - return new BrowserMethodData(browserTag, keepOpen, keepOpenOnFailure, false, false, afterMethodsWithTestBrowser); + browserMethodData.setAfterMethodsWithTestBrowser(afterMethodsWithTestBrowser); + return browserMethodData; } boolean separateBrowserForSetupRequired = false; @@ -287,7 +294,10 @@ public static BrowserMethodData addKeepBrowserOpenInformation(String browserTag, separateBrowserForCleanupRequired = afterMethodsWithTestBrowser.isEmpty() && !afterMethods.isEmpty(); } - return new BrowserMethodData(browserTag, keepOpen, keepOpenOnFailure, separateBrowserForSetupRequired, separateBrowserForCleanupRequired, afterMethodsWithTestBrowser); + browserMethodData.setStartBrowserOnSetUp(separateBrowserForSetupRequired); + browserMethodData.setStartBrowserOnCleanUp(separateBrowserForCleanupRequired); + browserMethodData.setAfterMethodsWithTestBrowser(afterMethodsWithTestBrowser); + return browserMethodData; } private List<String> computeRandomBrowsers(final Method method, final List<RandomBrowsers> randomBrowsersAnnotation, diff --git a/src/main/java/com/xceptance/neodymium/common/browser/BrowserMethodData.java b/src/main/java/com/xceptance/neodymium/common/browser/BrowserMethodData.java index ce1b7bee..de88581e 100644 --- a/src/main/java/com/xceptance/neodymium/common/browser/BrowserMethodData.java +++ b/src/main/java/com/xceptance/neodymium/common/browser/BrowserMethodData.java @@ -58,4 +58,19 @@ public List<Method> getAfterMethodsWithTestBrowser() { return afterMethodsWithTestBrowser; } + + public void setStartBrowserOnSetUp(boolean startBrowserOnSetUp) + { + this.startBrowserOnSetUp = startBrowserOnSetUp; + } + + public void setStartBrowserOnCleanUp(boolean startBrowserOnCleanUp) + { + this.startBrowserOnCleanUp = startBrowserOnCleanUp; + } + + public void setAfterMethodsWithTestBrowser(List<Method> afterMethodsWithTestBrowser) + { + this.afterMethodsWithTestBrowser = afterMethodsWithTestBrowser; + } } From 5acfe022ed2cfd6fadd3fdeb5c0c7bbff6813a32 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Wed, 18 Dec 2024 14:51:25 +0100 Subject: [PATCH 12/24] [#322] fix tests --- .../testclasses/browser/inheritance/BrowserParent.java | 4 ++-- .../neodymium/junit4/tests/BrowserStatementTest.java | 5 +++-- .../neodymium/junit5/tests/BrowserStatementTest.java | 5 +++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserParent.java b/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserParent.java index 778f041e..4954c0db 100644 --- a/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserParent.java +++ b/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserParent.java @@ -1,11 +1,11 @@ package com.xceptance.neodymium.junit4.testclasses.browser.inheritance; import org.junit.Assert; +import org.junit.Test; import org.junit.runner.RunWith; import com.xceptance.neodymium.common.browser.Browser; import com.xceptance.neodymium.junit4.NeodymiumRunner; -import com.xceptance.neodymium.junit5.NeodymiumTest; import com.xceptance.neodymium.junit5.tests.NeodymiumWebDriverTest; import com.xceptance.neodymium.util.Neodymium; @@ -14,7 +14,7 @@ @RunWith(NeodymiumRunner.class) public abstract class BrowserParent { - @NeodymiumTest + @Test public void testParent() { Assert.assertNotNull(Neodymium.getDriver()); diff --git a/src/test/java/com/xceptance/neodymium/junit4/tests/BrowserStatementTest.java b/src/test/java/com/xceptance/neodymium/junit4/tests/BrowserStatementTest.java index 9d2c3fc6..b6fe7bbe 100644 --- a/src/test/java/com/xceptance/neodymium/junit4/tests/BrowserStatementTest.java +++ b/src/test/java/com/xceptance/neodymium/junit4/tests/BrowserStatementTest.java @@ -476,11 +476,12 @@ public void testBrowserOverwrittingInheritance() throws Throwable { String[] expected = new String[] { - "test :: Browser Chrome_1024x768" + "test :: Browser Chrome_1024x768", + "testParent :: Browser Chrome_1024x768" }; checkDescription(BrowserOverwrittingChild.class, expected); Result result = JUnitCore.runClasses(BrowserOverwrittingChild.class); - checkPass(result, 1, 0); + checkPass(result, 2, 0); } private void checkChrome(BrowserConfiguration config) diff --git a/src/test/java/com/xceptance/neodymium/junit5/tests/BrowserStatementTest.java b/src/test/java/com/xceptance/neodymium/junit5/tests/BrowserStatementTest.java index c2bb1e40..1fb692cc 100644 --- a/src/test/java/com/xceptance/neodymium/junit5/tests/BrowserStatementTest.java +++ b/src/test/java/com/xceptance/neodymium/junit5/tests/BrowserStatementTest.java @@ -458,11 +458,12 @@ public void testBrowserOverwrittingInheritance() throws Throwable { String[] expected = new String[] { - "test :: Browser Chrome_1024x768" + "test :: Browser Chrome_1024x768", + "testParent :: Browser Chrome_1024x768" }; checkDescription(BrowserOverwrittingChild.class, expected); NeodymiumTestExecutionSummary summary = run(BrowserOverwrittingChild.class); - checkPass(summary, 1, 0); + checkPass(summary, 2, 0); } private void checkChrome(BrowserConfiguration config) From ce41fe66d6446f73db1a8674e4b558d2a720a54f Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Wed, 18 Dec 2024 15:37:49 +0100 Subject: [PATCH 13/24] [#330] try to fix DownloadFilesInDifferentWays test --- .../testclasses/webDriver/DownloadFilesInDifferentWays.java | 2 +- .../testclasses/webDriver/DownloadFilesInDifferentWays.java | 2 +- .../neodymium/junit5/tests/DownloadFilesExecutorTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java b/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java index 30332a86..f6d08f14 100644 --- a/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java +++ b/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java @@ -42,7 +42,7 @@ public void downloadViaLink() { fileName = new File("target/02_2020-Java_aktuell-Autor-Rene_Schwietzke-High-Performance-Java-Hinter-den-Kulissen-von-Java.pdf"); Selenide.open("https://blog.xceptance.com/2020/02/28/ijug-magazin-java-aktuell-high-performance-java/"); - $(".alignright.is-resized").scrollIntoView("{block: 'center'}").click(); + $(".alignright.is-resized").scrollIntoView(true).click(); waitForFileDownloading(); validateFilePresentInDownloadHistory(); } diff --git a/src/test/java/com/xceptance/neodymium/junit5/testclasses/webDriver/DownloadFilesInDifferentWays.java b/src/test/java/com/xceptance/neodymium/junit5/testclasses/webDriver/DownloadFilesInDifferentWays.java index aaa0ada1..9f6974a1 100644 --- a/src/test/java/com/xceptance/neodymium/junit5/testclasses/webDriver/DownloadFilesInDifferentWays.java +++ b/src/test/java/com/xceptance/neodymium/junit5/testclasses/webDriver/DownloadFilesInDifferentWays.java @@ -54,7 +54,7 @@ public void downloadOnFormSubmission() $(".fc-cta-consent").click(); $("#fileSelector").uploadFile(new File("src/test/resources/2020-in-one-picture.png")); $("button[aria-label='COMBINED']").shouldBe(enabled); - $("button[aria-label='COMBINED']").scrollIntoView(true).click(); + $("button[aria-label='COMBINED']").scrollIntoView("{block: 'center'}").click(); waitForFileDownloading(); validateFilePresentInDownloadHistory(); } diff --git a/src/test/java/com/xceptance/neodymium/junit5/tests/DownloadFilesExecutorTest.java b/src/test/java/com/xceptance/neodymium/junit5/tests/DownloadFilesExecutorTest.java index a9d24fb5..ea45f715 100644 --- a/src/test/java/com/xceptance/neodymium/junit5/tests/DownloadFilesExecutorTest.java +++ b/src/test/java/com/xceptance/neodymium/junit5/tests/DownloadFilesExecutorTest.java @@ -26,7 +26,7 @@ public static void beforeClass() throws IOException properties.put("browserprofile.chrome_download.browser", "chrome"); // needed to enable validation of chrome://downloads/ page - properties.put("browserprofile.chrome_download.headless", "false"); + properties.put("browserprofile.chrome_download.headless", "true"); properties.put("browserprofile.chrome_download.downloadDirectory", "target"); properties.put("browserprofile.firefox_download.name", "firefox_download"); From 452b5c80dca31d2ef7dabd1ea985f8a07ac2e775 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Wed, 18 Dec 2024 15:46:43 +0100 Subject: [PATCH 14/24] [#330] fix DownloadFilesExecutorTest --- .../testclasses/webDriver/DownloadFilesInDifferentWays.java | 5 ----- .../neodymium/junit4/tests/DownloadFilesExecutorTest.java | 2 +- .../neodymium/junit5/tests/DownloadFilesExecutorTest.java | 2 +- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java b/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java index f6d08f14..fe687bc1 100644 --- a/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java +++ b/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java @@ -92,11 +92,6 @@ private void validateFilePresentInDownloadHistory() { if (Neodymium.getBrowserName().contains("chrome")) { - Selenide.open("chrome://downloads/"); - System.out.println($$(Selectors.shadowCss("#title-area", "downloads-manager", - "#downloadsList downloads-item")).size()); - $$(Selectors.shadowCss("#title-area", "downloads-manager", - "#downloadsList downloads-item")).asDynamicIterable().forEach(element -> System.out.println(element.getText())); $$(Selectors.shadowCss("#title-area", "downloads-manager", "#downloadsList downloads-item")).findBy(exactText(fileName.getName())) .should(exist, Duration.ofMillis(9000)).parent() .find(".description[role='gridcell']") diff --git a/src/test/java/com/xceptance/neodymium/junit4/tests/DownloadFilesExecutorTest.java b/src/test/java/com/xceptance/neodymium/junit4/tests/DownloadFilesExecutorTest.java index 10aa4257..f4d15627 100644 --- a/src/test/java/com/xceptance/neodymium/junit4/tests/DownloadFilesExecutorTest.java +++ b/src/test/java/com/xceptance/neodymium/junit4/tests/DownloadFilesExecutorTest.java @@ -27,7 +27,7 @@ public static void beforeClass() throws IOException properties.put("browserprofile.chrome_download.browser", "chrome"); // needed to enable validation of chrome://downloads/ page - properties.put("browserprofile.chrome_download.headless", "true"); + properties.put("browserprofile.chrome_download.headless", "false"); properties.put("browserprofile.chrome_download.downloadDirectory", "target"); properties.put("browserprofile.firefox_download.name", "firefox_download"); diff --git a/src/test/java/com/xceptance/neodymium/junit5/tests/DownloadFilesExecutorTest.java b/src/test/java/com/xceptance/neodymium/junit5/tests/DownloadFilesExecutorTest.java index ea45f715..a9d24fb5 100644 --- a/src/test/java/com/xceptance/neodymium/junit5/tests/DownloadFilesExecutorTest.java +++ b/src/test/java/com/xceptance/neodymium/junit5/tests/DownloadFilesExecutorTest.java @@ -26,7 +26,7 @@ public static void beforeClass() throws IOException properties.put("browserprofile.chrome_download.browser", "chrome"); // needed to enable validation of chrome://downloads/ page - properties.put("browserprofile.chrome_download.headless", "true"); + properties.put("browserprofile.chrome_download.headless", "false"); properties.put("browserprofile.chrome_download.downloadDirectory", "target"); properties.put("browserprofile.firefox_download.name", "firefox_download"); From 5a14f40f5b3dd10c36203e2ec91ad80fc5f1b135 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Wed, 18 Dec 2024 15:48:27 +0100 Subject: [PATCH 15/24] [#330] remove util tests for junit-5 as included and written in junit-4 --- pom.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/pom.xml b/pom.xml index ae0103e3..0a533f59 100644 --- a/pom.xml +++ b/pom.xml @@ -230,8 +230,6 @@ <includes> <include> com/xceptance/neodymium/junit5/tests/**/*Test.java</include> - <include> - com/xceptance/neodymium/util/**/*Test.java</include> </includes> </configuration> </plugin> From e13db354c7a11d35c62c304de017f7811b8701b5 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Thu, 19 Dec 2024 17:26:34 +0100 Subject: [PATCH 16/24] [#330] open chrome downloads history --- .../testclasses/webDriver/DownloadFilesInDifferentWays.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java b/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java index fe687bc1..e140db4e 100644 --- a/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java +++ b/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java @@ -92,6 +92,7 @@ private void validateFilePresentInDownloadHistory() { if (Neodymium.getBrowserName().contains("chrome")) { + Selenide.open("chrome://downloads/"); $$(Selectors.shadowCss("#title-area", "downloads-manager", "#downloadsList downloads-item")).findBy(exactText(fileName.getName())) .should(exist, Duration.ofMillis(9000)).parent() .find(".description[role='gridcell']") From 61c52c4019cf859e03948e6675e2d99b89e5c1eb Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Fri, 20 Dec 2024 11:09:14 +0100 Subject: [PATCH 17/24] [#330] improve test stability --- .../testclasses/webDriver/DownloadFilesInDifferentWays.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/xceptance/neodymium/junit5/testclasses/webDriver/DownloadFilesInDifferentWays.java b/src/test/java/com/xceptance/neodymium/junit5/testclasses/webDriver/DownloadFilesInDifferentWays.java index 9f6974a1..aaa0ada1 100644 --- a/src/test/java/com/xceptance/neodymium/junit5/testclasses/webDriver/DownloadFilesInDifferentWays.java +++ b/src/test/java/com/xceptance/neodymium/junit5/testclasses/webDriver/DownloadFilesInDifferentWays.java @@ -54,7 +54,7 @@ public void downloadOnFormSubmission() $(".fc-cta-consent").click(); $("#fileSelector").uploadFile(new File("src/test/resources/2020-in-one-picture.png")); $("button[aria-label='COMBINED']").shouldBe(enabled); - $("button[aria-label='COMBINED']").scrollIntoView("{block: 'center'}").click(); + $("button[aria-label='COMBINED']").scrollIntoView(true).click(); waitForFileDownloading(); validateFilePresentInDownloadHistory(); } From 6a6714952363f55704b5555a71ad235600ca4387 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Fri, 20 Dec 2024 11:52:04 +0100 Subject: [PATCH 18/24] [#330] try to stabilize DownloadFilesExecutorTest --- .../testclasses/webDriver/DownloadFilesInDifferentWays.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/xceptance/neodymium/junit5/testclasses/webDriver/DownloadFilesInDifferentWays.java b/src/test/java/com/xceptance/neodymium/junit5/testclasses/webDriver/DownloadFilesInDifferentWays.java index aaa0ada1..b67dbf2d 100644 --- a/src/test/java/com/xceptance/neodymium/junit5/testclasses/webDriver/DownloadFilesInDifferentWays.java +++ b/src/test/java/com/xceptance/neodymium/junit5/testclasses/webDriver/DownloadFilesInDifferentWays.java @@ -12,6 +12,7 @@ import org.junit.jupiter.api.AfterEach; +import com.codeborne.selenide.ClickOptions; import com.codeborne.selenide.Selectors; import com.codeborne.selenide.Selenide; import com.xceptance.neodymium.common.browser.Browser; @@ -54,7 +55,7 @@ public void downloadOnFormSubmission() $(".fc-cta-consent").click(); $("#fileSelector").uploadFile(new File("src/test/resources/2020-in-one-picture.png")); $("button[aria-label='COMBINED']").shouldBe(enabled); - $("button[aria-label='COMBINED']").scrollIntoView(true).click(); + $("button[aria-label='COMBINED']").click(ClickOptions.usingJavaScript()); waitForFileDownloading(); validateFilePresentInDownloadHistory(); } From 916ebfb064522f839a0824a3d1b3cb5535e11008 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Fri, 20 Dec 2024 12:07:29 +0100 Subject: [PATCH 19/24] [#330] try to stabilize DownloadFilesExecutorTest for junit4 --- .../testclasses/webDriver/DownloadFilesInDifferentWays.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java b/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java index e140db4e..3c7a8ed1 100644 --- a/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java +++ b/src/test/java/com/xceptance/neodymium/junit4/testclasses/webDriver/DownloadFilesInDifferentWays.java @@ -15,6 +15,7 @@ import org.junit.Test; import org.junit.runner.RunWith; +import com.codeborne.selenide.ClickOptions; import com.codeborne.selenide.Selectors; import com.codeborne.selenide.Selenide; import com.xceptance.neodymium.common.browser.Browser; @@ -58,7 +59,7 @@ public void downloadOnFormSubmission() $(".fc-cta-consent").click(); $("#fileSelector").uploadFile(new File("src/test/resources/2020-in-one-picture.png")); $("button[aria-label='COMBINED']").shouldBe(enabled, Duration.ofMillis(9000)); - $("button[aria-label='COMBINED']").scrollIntoView("{block: 'center'}").click(); + $("button[aria-label='COMBINED']").click(ClickOptions.usingJavaScript()); waitForFileDownloading(); validateFilePresentInDownloadHistory(); } From f5c8d53f7eaa6cad40a544ff9006105d8b0a6517 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Mon, 23 Dec 2024 16:44:59 +0100 Subject: [PATCH 20/24] Revert "Merge branch '322-bug-browser-is-not-started-for-after-method-if-its-declared-in-different-class-than-the-test-itself' into #330-improvement-stabilize-unit-tests" This reverts commit c72371020d996a8da9f798a3f4fc83e35f3d438c, reversing changes made to 2bd3f972b68bf66b5cdf7a8b85afca7d57131608. --- .../common/browser/BrowserAfterRunner.java | 4 ++-- .../common/browser/BrowserBeforeRunner.java | 4 ++-- .../neodymium/common/browser/BrowserData.java | 22 +++++-------------- .../common/browser/BrowserMethodData.java | 15 ------------- .../browser/inheritance/BrowserParent.java | 4 ++-- .../junit4/tests/BrowserStatementTest.java | 5 ++--- .../junit5/tests/BrowserStatementTest.java | 5 ++--- 7 files changed, 16 insertions(+), 43 deletions(-) diff --git a/src/main/java/com/xceptance/neodymium/common/browser/BrowserAfterRunner.java b/src/main/java/com/xceptance/neodymium/common/browser/BrowserAfterRunner.java index ea207851..257c095d 100644 --- a/src/main/java/com/xceptance/neodymium/common/browser/BrowserAfterRunner.java +++ b/src/main/java/com/xceptance/neodymium/common/browser/BrowserAfterRunner.java @@ -33,8 +33,8 @@ public void run(Supplier<Throwable> afterMethodInvocation, Method after, boolean // if browserConfiguration is null, the browser should not be started for this method and browserTag and // browserRunner are therefore not required - BrowserMethodData browserTag = browserConfiguration != null ? BrowserData.addKeepBrowserOpenInformationForBeforeOrAfter(browserConfiguration.getBrowserTag(), - after) + BrowserMethodData browserTag = browserConfiguration != null ? BrowserData.addKeepBrowserOpenInformation(browserConfiguration.getBrowserTag(), + after.getDeclaringClass(), after) : null; BrowserRunner browserRunner = browserTag != null ? new BrowserRunner(browserTag, after.getName()) : null; diff --git a/src/main/java/com/xceptance/neodymium/common/browser/BrowserBeforeRunner.java b/src/main/java/com/xceptance/neodymium/common/browser/BrowserBeforeRunner.java index a1b928d3..26e950d0 100644 --- a/src/main/java/com/xceptance/neodymium/common/browser/BrowserBeforeRunner.java +++ b/src/main/java/com/xceptance/neodymium/common/browser/BrowserBeforeRunner.java @@ -34,8 +34,8 @@ public void run(Supplier<Throwable> beforeMethodInvocation, Method before, boole // if browserConfiguration is null, the browser should not be started for this method and browserTag and // browserRunner are therefore not required - BrowserMethodData browserTag = browserConfiguration != null ? BrowserData.addKeepBrowserOpenInformationForBeforeOrAfter(browserConfiguration.getBrowserTag(), - before) + BrowserMethodData browserTag = browserConfiguration != null ? BrowserData.addKeepBrowserOpenInformation(browserConfiguration.getBrowserTag(), + before.getDeclaringClass(), before) : null; BrowserRunner browserRunner = browserTag != null ? new BrowserRunner(browserTag, before.getName()) : null; diff --git a/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java b/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java index 672baa11..9febeaed 100644 --- a/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java +++ b/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java @@ -39,6 +39,7 @@ public class BrowserData extends Data public BrowserData(Class<?> testClass) { this(); + this.testClass = testClass; initClassAnnotationsFor(testClass); } @@ -201,15 +202,15 @@ else if (!classRandomBrowsersAnnotation.isEmpty() && methodBrowsers.isEmpty()) { return browsers.stream() .filter(browserTag -> systemBrowserFilter.contains(browserTag)) - .map(browserTag -> addKeepBrowserOpenInformation(browserTag, testMethod)) + .map(browserTag -> addKeepBrowserOpenInformation(browserTag, testClass, testMethod)) .collect(Collectors.toList()); } return browsers.stream() - .map(browserTag -> addKeepBrowserOpenInformation(browserTag, testMethod)) + .map(browserTag -> addKeepBrowserOpenInformation(browserTag, testClass, testMethod)) .collect(Collectors.toList()); } - public static BrowserMethodData addKeepBrowserOpenInformationForBeforeOrAfter(String browserTag, Method method) + public static BrowserMethodData addKeepBrowserOpenInformation(String browserTag, Class<?> testClass, Method method) { List<KeepBrowserOpen> methodKeepBrowserOpenAnnotations = getAnnotations(method, KeepBrowserOpen.class); List<KeepBrowserOpen> classKeepBrowserOpenAnnotations = getAnnotations(method.getDeclaringClass(), KeepBrowserOpen.class); @@ -246,13 +247,6 @@ public static BrowserMethodData addKeepBrowserOpenInformationForBeforeOrAfter(St keepOpenOnFailure = false; } } - - return new BrowserMethodData(browserTag, keepOpen, keepOpenOnFailure, false, false, new ArrayList<Method>()); - } - - private BrowserMethodData addKeepBrowserOpenInformation(String browserTag, Method method) - { - BrowserMethodData browserMethodData = addKeepBrowserOpenInformationForBeforeOrAfter(browserTag, method); boolean junit5 = method.getAnnotation(NeodymiumTest.class) != null; List<Method> afterMethodsWithTestBrowser = List.of(testClass.getMethods()).stream() .filter(classMethod -> (junit5 ? classMethod.getAnnotation(AfterEach.class) @@ -260,8 +254,7 @@ private BrowserMethodData addKeepBrowserOpenInformation(String browserTag, Metho .collect(Collectors.toList()); if (!(Neodymium.configuration().startNewBrowserForSetUp() && Neodymium.configuration().startNewBrowserForCleanUp())) { - browserMethodData.setAfterMethodsWithTestBrowser(afterMethodsWithTestBrowser); - return browserMethodData; + return new BrowserMethodData(browserTag, keepOpen, keepOpenOnFailure, false, false, afterMethodsWithTestBrowser); } boolean separateBrowserForSetupRequired = false; @@ -294,10 +287,7 @@ private BrowserMethodData addKeepBrowserOpenInformation(String browserTag, Metho separateBrowserForCleanupRequired = afterMethodsWithTestBrowser.isEmpty() && !afterMethods.isEmpty(); } - browserMethodData.setStartBrowserOnSetUp(separateBrowserForSetupRequired); - browserMethodData.setStartBrowserOnCleanUp(separateBrowserForCleanupRequired); - browserMethodData.setAfterMethodsWithTestBrowser(afterMethodsWithTestBrowser); - return browserMethodData; + return new BrowserMethodData(browserTag, keepOpen, keepOpenOnFailure, separateBrowserForSetupRequired, separateBrowserForCleanupRequired, afterMethodsWithTestBrowser); } private List<String> computeRandomBrowsers(final Method method, final List<RandomBrowsers> randomBrowsersAnnotation, diff --git a/src/main/java/com/xceptance/neodymium/common/browser/BrowserMethodData.java b/src/main/java/com/xceptance/neodymium/common/browser/BrowserMethodData.java index de88581e..ce1b7bee 100644 --- a/src/main/java/com/xceptance/neodymium/common/browser/BrowserMethodData.java +++ b/src/main/java/com/xceptance/neodymium/common/browser/BrowserMethodData.java @@ -58,19 +58,4 @@ public List<Method> getAfterMethodsWithTestBrowser() { return afterMethodsWithTestBrowser; } - - public void setStartBrowserOnSetUp(boolean startBrowserOnSetUp) - { - this.startBrowserOnSetUp = startBrowserOnSetUp; - } - - public void setStartBrowserOnCleanUp(boolean startBrowserOnCleanUp) - { - this.startBrowserOnCleanUp = startBrowserOnCleanUp; - } - - public void setAfterMethodsWithTestBrowser(List<Method> afterMethodsWithTestBrowser) - { - this.afterMethodsWithTestBrowser = afterMethodsWithTestBrowser; - } } diff --git a/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserParent.java b/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserParent.java index 4954c0db..778f041e 100644 --- a/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserParent.java +++ b/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserParent.java @@ -1,11 +1,11 @@ package com.xceptance.neodymium.junit4.testclasses.browser.inheritance; import org.junit.Assert; -import org.junit.Test; import org.junit.runner.RunWith; import com.xceptance.neodymium.common.browser.Browser; import com.xceptance.neodymium.junit4.NeodymiumRunner; +import com.xceptance.neodymium.junit5.NeodymiumTest; import com.xceptance.neodymium.junit5.tests.NeodymiumWebDriverTest; import com.xceptance.neodymium.util.Neodymium; @@ -14,7 +14,7 @@ @RunWith(NeodymiumRunner.class) public abstract class BrowserParent { - @Test + @NeodymiumTest public void testParent() { Assert.assertNotNull(Neodymium.getDriver()); diff --git a/src/test/java/com/xceptance/neodymium/junit4/tests/BrowserStatementTest.java b/src/test/java/com/xceptance/neodymium/junit4/tests/BrowserStatementTest.java index b6fe7bbe..9d2c3fc6 100644 --- a/src/test/java/com/xceptance/neodymium/junit4/tests/BrowserStatementTest.java +++ b/src/test/java/com/xceptance/neodymium/junit4/tests/BrowserStatementTest.java @@ -476,12 +476,11 @@ public void testBrowserOverwrittingInheritance() throws Throwable { String[] expected = new String[] { - "test :: Browser Chrome_1024x768", - "testParent :: Browser Chrome_1024x768" + "test :: Browser Chrome_1024x768" }; checkDescription(BrowserOverwrittingChild.class, expected); Result result = JUnitCore.runClasses(BrowserOverwrittingChild.class); - checkPass(result, 2, 0); + checkPass(result, 1, 0); } private void checkChrome(BrowserConfiguration config) diff --git a/src/test/java/com/xceptance/neodymium/junit5/tests/BrowserStatementTest.java b/src/test/java/com/xceptance/neodymium/junit5/tests/BrowserStatementTest.java index 1fb692cc..c2bb1e40 100644 --- a/src/test/java/com/xceptance/neodymium/junit5/tests/BrowserStatementTest.java +++ b/src/test/java/com/xceptance/neodymium/junit5/tests/BrowserStatementTest.java @@ -458,12 +458,11 @@ public void testBrowserOverwrittingInheritance() throws Throwable { String[] expected = new String[] { - "test :: Browser Chrome_1024x768", - "testParent :: Browser Chrome_1024x768" + "test :: Browser Chrome_1024x768" }; checkDescription(BrowserOverwrittingChild.class, expected); NeodymiumTestExecutionSummary summary = run(BrowserOverwrittingChild.class); - checkPass(summary, 2, 0); + checkPass(summary, 1, 0); } private void checkChrome(BrowserConfiguration config) From 1d3948dddff4cd99c5546fc31b1def7414223398 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Mon, 23 Dec 2024 16:45:21 +0100 Subject: [PATCH 21/24] Revert "Merge branch '322-bug-browser-is-not-started-for-after-method-if-its-declared-in-different-class-than-the-test-itself' into #330-improvement-stabilize-unit-tests" This reverts commit ea61ddbca74e9b17a867a7a534a35fdeb9baa43a, reversing changes made to 77e0cb2b57d38b790c29197e71838f16dc5ce0f1. --- .../com/xceptance/neodymium/common/browser/BrowserData.java | 1 - .../neodymium/junit4/statement/browser/BrowserStatement.java | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java b/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java index 9febeaed..a2011b75 100644 --- a/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java +++ b/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java @@ -45,7 +45,6 @@ public BrowserData(Class<?> testClass) public void initClassAnnotationsFor(Class<?> testClass) { - this.testClass = testClass; classRandomBrowsersAnnotation = getAnnotations(testClass, RandomBrowsers.class); if (getAnnotations(testClass, SuppressBrowsers.class).isEmpty()) diff --git a/src/main/java/com/xceptance/neodymium/junit4/statement/browser/BrowserStatement.java b/src/main/java/com/xceptance/neodymium/junit4/statement/browser/BrowserStatement.java index d97cc1b9..740b768b 100644 --- a/src/main/java/com/xceptance/neodymium/junit4/statement/browser/BrowserStatement.java +++ b/src/main/java/com/xceptance/neodymium/junit4/statement/browser/BrowserStatement.java @@ -65,7 +65,7 @@ public void evaluate() throws Throwable { if (!param.isStartBrowserOnCleanUp() && Neodymium.getWebDriverStateContainer() != null) { - browserRunner.teardown(testFailed, param, Neodymium.getWebDriverStateContainer()); + new BrowserRunner().teardown(testFailed, param, Neodymium.getWebDriverStateContainer()); } } } From 5cca259fec5895e19b4f1e7f144480f7ddd8f711 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Mon, 23 Dec 2024 16:45:32 +0100 Subject: [PATCH 22/24] Revert "Merge remote-tracking branch 'origin/#319_update_Allure_Cucumber_jvm' into #330-improvement-stabilize-unit-tests" This reverts commit 77e0cb2b57d38b790c29197e71838f16dc5ce0f1, reversing changes made to 19c6a57d2747efb2f58d8be0d64703dab9e26c3c. --- .gitignore | 3 --- pom.xml | 30 +++++++++++++++--------------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index e5199cac..b7004e0e 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,3 @@ temp-*.properties embeddedLocalProxySelfSignedRootCertificate.p12 /bin/ /allure-results/ - -# intellij project directory -.idea diff --git a/pom.xml b/pom.xml index 0a533f59..23340d52 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>com.xceptance</groupId> <artifactId>neodymium-library</artifactId> - <version>5.1.2</version> + <version>5.1.1</version> <name>neodymium-library</name> <url>https://github.com/Xceptance/neodymium-library</url> @@ -250,19 +250,19 @@ <dependencies> <dependency> - <groupId>com.assertthat</groupId> - <artifactId>selenium-shutterbug</artifactId> - <version>1.6</version> - <exclusions> - <exclusion> - <groupId>org.seleniumhq.selenium</groupId> - <artifactId>selenium-java</artifactId> + <groupId>com.assertthat</groupId> + <artifactId>selenium-shutterbug</artifactId> + <version>1.6</version> + <exclusions> + <exclusion> + <groupId>org.seleniumhq.selenium</groupId> + <artifactId>selenium-java</artifactId> </exclusion> - <exclusion> - <groupId>org.apache.httpcomponents.client5</groupId> - <artifactId>httpclient5</artifactId> - </exclusion> - </exclusions> + <exclusion> + <groupId>org.apache.httpcomponents.client5</groupId> + <artifactId>httpclient5</artifactId> + </exclusion> + </exclusions> </dependency> <dependency> <groupId>xyz.rogfam</groupId> @@ -337,8 +337,8 @@ </dependency> <dependency> <groupId>io.qameta.allure</groupId> - <artifactId>allure-cucumber7-jvm</artifactId> - <version>2.29.1</version> + <artifactId>allure-cucumber6-jvm</artifactId> + <version>2.13.6</version> </dependency> <dependency> <groupId>io.qameta.allure</groupId> From fa68a51991d524916e288aca0faec3c22f6ea176 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk <o.omelianchuk@xceptance.net> Date: Mon, 23 Dec 2024 16:45:42 +0100 Subject: [PATCH 23/24] Revert "Merge branch '322-bug-browser-is-not-started-for-after-method-if-its-declared-in-different-class-than-the-test-itself' into #330-improvement-stabilize-unit-tests" This reverts commit 19c6a57d2747efb2f58d8be0d64703dab9e26c3c, reversing changes made to 99666f4662e32e7ee973898aa3cef804b9e5d413. --- .../common/browser/BrowserAfterRunner.java | 3 +- .../common/browser/BrowserBeforeRunner.java | 3 +- .../neodymium/common/browser/BrowserData.java | 10 +++--- .../browser/inheritance/BrowserChildTest.java | 33 ------------------- .../browser/inheritance/BrowserParent.java | 11 +------ .../browser/inheritance/BrowserChildTest.java | 33 ------------------- .../browser/inheritance/BrowserParent.java | 12 +------ 7 files changed, 8 insertions(+), 97 deletions(-) delete mode 100644 src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserChildTest.java delete mode 100644 src/test/java/com/xceptance/neodymium/junit5/testclasses/browser/inheritance/BrowserChildTest.java diff --git a/src/main/java/com/xceptance/neodymium/common/browser/BrowserAfterRunner.java b/src/main/java/com/xceptance/neodymium/common/browser/BrowserAfterRunner.java index 257c095d..d7a5e840 100644 --- a/src/main/java/com/xceptance/neodymium/common/browser/BrowserAfterRunner.java +++ b/src/main/java/com/xceptance/neodymium/common/browser/BrowserAfterRunner.java @@ -33,8 +33,7 @@ public void run(Supplier<Throwable> afterMethodInvocation, Method after, boolean // if browserConfiguration is null, the browser should not be started for this method and browserTag and // browserRunner are therefore not required - BrowserMethodData browserTag = browserConfiguration != null ? BrowserData.addKeepBrowserOpenInformation(browserConfiguration.getBrowserTag(), - after.getDeclaringClass(), after) + BrowserMethodData browserTag = browserConfiguration != null ? BrowserData.addKeepBrowserOpenInformation(browserConfiguration.getBrowserTag(), after) : null; BrowserRunner browserRunner = browserTag != null ? new BrowserRunner(browserTag, after.getName()) : null; diff --git a/src/main/java/com/xceptance/neodymium/common/browser/BrowserBeforeRunner.java b/src/main/java/com/xceptance/neodymium/common/browser/BrowserBeforeRunner.java index 26e950d0..6a25fe99 100644 --- a/src/main/java/com/xceptance/neodymium/common/browser/BrowserBeforeRunner.java +++ b/src/main/java/com/xceptance/neodymium/common/browser/BrowserBeforeRunner.java @@ -34,8 +34,7 @@ public void run(Supplier<Throwable> beforeMethodInvocation, Method before, boole // if browserConfiguration is null, the browser should not be started for this method and browserTag and // browserRunner are therefore not required - BrowserMethodData browserTag = browserConfiguration != null ? BrowserData.addKeepBrowserOpenInformation(browserConfiguration.getBrowserTag(), - before.getDeclaringClass(), before) + BrowserMethodData browserTag = browserConfiguration != null ? BrowserData.addKeepBrowserOpenInformation(browserConfiguration.getBrowserTag(), before) : null; BrowserRunner browserRunner = browserTag != null ? new BrowserRunner(browserTag, before.getName()) : null; diff --git a/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java b/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java index a2011b75..f4e1db35 100644 --- a/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java +++ b/src/main/java/com/xceptance/neodymium/common/browser/BrowserData.java @@ -32,14 +32,11 @@ public class BrowserData extends Data private List<RandomBrowsers> classRandomBrowsersAnnotation; - private Class<?> testClass; - private static final String SYSTEM_PROPERTY_BROWSERDEFINITION = "browserdefinition"; public BrowserData(Class<?> testClass) { this(); - this.testClass = testClass; initClassAnnotationsFor(testClass); } @@ -201,15 +198,15 @@ else if (!classRandomBrowsersAnnotation.isEmpty() && methodBrowsers.isEmpty()) { return browsers.stream() .filter(browserTag -> systemBrowserFilter.contains(browserTag)) - .map(browserTag -> addKeepBrowserOpenInformation(browserTag, testClass, testMethod)) + .map(browserTag -> addKeepBrowserOpenInformation(browserTag, testMethod)) .collect(Collectors.toList()); } return browsers.stream() - .map(browserTag -> addKeepBrowserOpenInformation(browserTag, testClass, testMethod)) + .map(browserTag -> addKeepBrowserOpenInformation(browserTag, testMethod)) .collect(Collectors.toList()); } - public static BrowserMethodData addKeepBrowserOpenInformation(String browserTag, Class<?> testClass, Method method) + public static BrowserMethodData addKeepBrowserOpenInformation(String browserTag, Method method) { List<KeepBrowserOpen> methodKeepBrowserOpenAnnotations = getAnnotations(method, KeepBrowserOpen.class); List<KeepBrowserOpen> classKeepBrowserOpenAnnotations = getAnnotations(method.getDeclaringClass(), KeepBrowserOpen.class); @@ -247,6 +244,7 @@ public static BrowserMethodData addKeepBrowserOpenInformation(String browserTag, } } boolean junit5 = method.getAnnotation(NeodymiumTest.class) != null; + Class<?> testClass = method.getDeclaringClass(); List<Method> afterMethodsWithTestBrowser = List.of(testClass.getMethods()).stream() .filter(classMethod -> (junit5 ? classMethod.getAnnotation(AfterEach.class) : classMethod.getAnnotation(After.class)) != null) diff --git a/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserChildTest.java b/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserChildTest.java deleted file mode 100644 index 82352952..00000000 --- a/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserChildTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.xceptance.neodymium.junit4.testclasses.browser.inheritance; - -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -import com.xceptance.neodymium.junit4.tests.NeodymiumWebDriverTest; -import com.xceptance.neodymium.util.Neodymium; - -public class BrowserChildTest extends BrowserParent -{ - @Before - public void before() - { - Assert.assertNotNull("No browser started for @Before method", Neodymium.getDriver()); - NeodymiumWebDriverTest.assertWebDriverAlive(Neodymium.getDriver()); - } - - @Test - public void test() - { - Assert.assertNotNull("No browser started for @Test method", Neodymium.getDriver()); - NeodymiumWebDriverTest.assertWebDriverAlive(Neodymium.getDriver()); - } - - @After - public void after() - { - Assert.assertNotNull("No browser started for @After method", Neodymium.getDriver()); - NeodymiumWebDriverTest.assertWebDriverAlive(Neodymium.getDriver()); - } -} diff --git a/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserParent.java b/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserParent.java index 778f041e..612151af 100644 --- a/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserParent.java +++ b/src/test/java/com/xceptance/neodymium/junit4/testclasses/browser/inheritance/BrowserParent.java @@ -1,23 +1,14 @@ package com.xceptance.neodymium.junit4.testclasses.browser.inheritance; -import org.junit.Assert; import org.junit.runner.RunWith; import com.xceptance.neodymium.common.browser.Browser; import com.xceptance.neodymium.junit4.NeodymiumRunner; -import com.xceptance.neodymium.junit5.NeodymiumTest; -import com.xceptance.neodymium.junit5.tests.NeodymiumWebDriverTest; -import com.xceptance.neodymium.util.Neodymium; @Browser("Chrome_1024x768") @Browser("Chrome_1500x1000") @RunWith(NeodymiumRunner.class) public abstract class BrowserParent { - @NeodymiumTest - public void testParent() - { - Assert.assertNotNull(Neodymium.getDriver()); - NeodymiumWebDriverTest.assertWebDriverAlive(Neodymium.getDriver()); - } + } diff --git a/src/test/java/com/xceptance/neodymium/junit5/testclasses/browser/inheritance/BrowserChildTest.java b/src/test/java/com/xceptance/neodymium/junit5/testclasses/browser/inheritance/BrowserChildTest.java deleted file mode 100644 index 6765b2e1..00000000 --- a/src/test/java/com/xceptance/neodymium/junit5/testclasses/browser/inheritance/BrowserChildTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.xceptance.neodymium.junit5.testclasses.browser.inheritance; - -import org.junit.Assert; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; - -import com.xceptance.neodymium.junit5.NeodymiumTest; -import com.xceptance.neodymium.junit5.tests.NeodymiumWebDriverTest; -import com.xceptance.neodymium.util.Neodymium; - -public class BrowserChildTest extends BrowserParent -{ - @BeforeEach - public void before() - { - Assert.assertNotNull("No browser started for @BeforeEach method", Neodymium.getDriver()); - NeodymiumWebDriverTest.assertWebDriverAlive(Neodymium.getDriver()); - } - - @NeodymiumTest - public void test() - { - Assert.assertNotNull("No browser started for @NeodymiumTest method", Neodymium.getDriver()); - NeodymiumWebDriverTest.assertWebDriverAlive(Neodymium.getDriver()); - } - - @AfterEach - public void after() - { - Assert.assertNotNull("No browser started for @AfterEach method", Neodymium.getDriver()); - NeodymiumWebDriverTest.assertWebDriverAlive(Neodymium.getDriver()); - } -} diff --git a/src/test/java/com/xceptance/neodymium/junit5/testclasses/browser/inheritance/BrowserParent.java b/src/test/java/com/xceptance/neodymium/junit5/testclasses/browser/inheritance/BrowserParent.java index d25c0d3d..56f47867 100644 --- a/src/test/java/com/xceptance/neodymium/junit5/testclasses/browser/inheritance/BrowserParent.java +++ b/src/test/java/com/xceptance/neodymium/junit5/testclasses/browser/inheritance/BrowserParent.java @@ -1,20 +1,10 @@ package com.xceptance.neodymium.junit5.testclasses.browser.inheritance; -import org.junit.Assert; - import com.xceptance.neodymium.common.browser.Browser; -import com.xceptance.neodymium.junit5.NeodymiumTest; -import com.xceptance.neodymium.junit5.tests.NeodymiumWebDriverTest; -import com.xceptance.neodymium.util.Neodymium; @Browser("Chrome_1024x768") @Browser("Chrome_1500x1000") public abstract class BrowserParent { - @NeodymiumTest - public void testParent() - { - Assert.assertNotNull(Neodymium.getDriver()); - NeodymiumWebDriverTest.assertWebDriverAlive(Neodymium.getDriver()); - } + } From c356ecb9c133290265e6275d25f8eb72f58aa0a2 Mon Sep 17 00:00:00 2001 From: RobertAvemarg <jan.robert.avemarg@gmail.com> Date: Tue, 28 Jan 2025 16:18:58 +0100 Subject: [PATCH 24/24] update locators for new website and minor fixes --- .../common/recording/TakeScreenshotsThread.java | 4 +++- .../multibrowser/BrowserstackHomePageTest.java | 14 +++++--------- .../multibrowser/BrowserstackHomePageTest.java | 14 +++++--------- ...RecordingTest.java => CustomRecordingTest.java} | 2 +- .../recording/automatic/RecordingDurationTest.java | 8 ++++---- 5 files changed, 18 insertions(+), 24 deletions(-) rename src/test/java/com/xceptance/neodymium/junit5/testclasses/recording/{AutomaticRecordingTest.java => CustomRecordingTest.java} (96%) diff --git a/src/main/java/com/xceptance/neodymium/common/recording/TakeScreenshotsThread.java b/src/main/java/com/xceptance/neodymium/common/recording/TakeScreenshotsThread.java index 9061aeb2..1aa1cdb6 100644 --- a/src/main/java/com/xceptance/neodymium/common/recording/TakeScreenshotsThread.java +++ b/src/main/java/com/xceptance/neodymium/common/recording/TakeScreenshotsThread.java @@ -6,10 +6,12 @@ import java.lang.reflect.InvocationTargetException; import java.util.Date; +import org.openqa.selenium.NoSuchSessionException; import org.openqa.selenium.NoSuchWindowException; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; +import org.openqa.selenium.remote.UnreachableBrowserException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -96,7 +98,7 @@ public synchronized void run() file.delete(); } - catch (NoSuchWindowException e) + catch (NoSuchWindowException | NoSuchSessionException | UnreachableBrowserException e) { // catching the exception prevents the video from failing } diff --git a/src/test/java/com/xceptance/neodymium/junit4/testclasses/multibrowser/BrowserstackHomePageTest.java b/src/test/java/com/xceptance/neodymium/junit4/testclasses/multibrowser/BrowserstackHomePageTest.java index 7bfaa723..05043e67 100644 --- a/src/test/java/com/xceptance/neodymium/junit4/testclasses/multibrowser/BrowserstackHomePageTest.java +++ b/src/test/java/com/xceptance/neodymium/junit4/testclasses/multibrowser/BrowserstackHomePageTest.java @@ -1,7 +1,6 @@ package com.xceptance.neodymium.junit4.testclasses.multibrowser; import static com.codeborne.selenide.CollectionCondition.sizeGreaterThan; -import static com.codeborne.selenide.Condition.exist; import static com.codeborne.selenide.Condition.matchText; import static com.codeborne.selenide.Condition.visible; import static com.codeborne.selenide.Selenide.$; @@ -30,10 +29,10 @@ public void testVisitingHomepage() Assert.assertTrue(Selenide.executeJavaScript("return navigator.userAgent.indexOf(\"Safari\")>-1;")); // short validation to check that the correct page was opened, should be moved to OpenHomePageFlow - $("#service-areas").should(exist); + // basic validation // Verifies the company Logo and name are visible. - $("#navigation .navbar-brand a[title=Home]").shouldBe(visible); + $("#navigation .navbar-brand a").shouldBe(visible); // Verifies the Navigation bar is visible $("#navigation .navbar-header ul.nav").shouldBe(visible); @@ -42,16 +41,13 @@ public void testVisitingHomepage() $$("#navigation .navbar-header ul.nav > li > a").shouldHave(sizeGreaterThan(0)); // Asserts the first headline is there. - $("#service-areas .landing-intro > h1").shouldBe(matchText("[A-Z].{3,}")); - - // Asserts the animated carousel is there. - $("#myCarousel").shouldBe(visible); + $("#main h1").shouldBe(matchText("[A-Z].{3,}")); // Verifies the "services" section is there. // Asserts there's at least 1 item in the list. - $$("#service-areas .container .thumbnail").shouldHave(sizeGreaterThan(0)); + $$("#main .row.strip a").shouldHave(sizeGreaterThan(0)); // Verifies the company button is there. - $$("#xlt-background .container p.lead > a.btn-primary").shouldHave(sizeGreaterThan(0)); + $$("p.lead > a").shouldHave(sizeGreaterThan(0)); } } diff --git a/src/test/java/com/xceptance/neodymium/junit5/testclasses/multibrowser/BrowserstackHomePageTest.java b/src/test/java/com/xceptance/neodymium/junit5/testclasses/multibrowser/BrowserstackHomePageTest.java index c68fd9cf..0465b7c5 100644 --- a/src/test/java/com/xceptance/neodymium/junit5/testclasses/multibrowser/BrowserstackHomePageTest.java +++ b/src/test/java/com/xceptance/neodymium/junit5/testclasses/multibrowser/BrowserstackHomePageTest.java @@ -1,7 +1,6 @@ package com.xceptance.neodymium.junit5.testclasses.multibrowser; import static com.codeborne.selenide.CollectionCondition.sizeGreaterThan; -import static com.codeborne.selenide.Condition.exist; import static com.codeborne.selenide.Condition.matchText; import static com.codeborne.selenide.Condition.visible; import static com.codeborne.selenide.Selenide.$; @@ -27,10 +26,10 @@ public void testVisitingHomepage() Assertions.assertTrue(() -> Selenide.executeJavaScript("return navigator.userAgent.indexOf(\"Safari\")>-1;")); // short validation to check that the correct page was opened, should be moved to OpenHomePageFlow - $("#service-areas").should(exist); + // basic validation // Verifies the company Logo and name are visible. - $("#navigation .navbar-brand a[title=Home]").shouldBe(visible); + $("#navigation .navbar-brand a").shouldBe(visible); // Verifies the Navigation bar is visible $("#navigation .navbar-header ul.nav").shouldBe(visible); @@ -39,16 +38,13 @@ public void testVisitingHomepage() $$("#navigation .navbar-header ul.nav > li > a").shouldHave(sizeGreaterThan(0)); // Asserts the first headline is there. - $("#service-areas .landing-intro > h1").shouldBe(matchText("[A-Z].{3,}")); - - // Asserts the animated carousel is there. - $("#myCarousel").shouldBe(visible); + $("#main h1").shouldBe(matchText("[A-Z].{3,}")); // Verifies the "services" section is there. // Asserts there's at least 1 item in the list. - $$("#service-areas .container .thumbnail").shouldHave(sizeGreaterThan(0)); + $$("#main .row.strip a").shouldHave(sizeGreaterThan(0)); // Verifies the company button is there. - $$("#xlt-background .container p.lead > a.btn-primary").shouldHave(sizeGreaterThan(0)); + $$("p.lead > a").shouldHave(sizeGreaterThan(0)); } } diff --git a/src/test/java/com/xceptance/neodymium/junit5/testclasses/recording/AutomaticRecordingTest.java b/src/test/java/com/xceptance/neodymium/junit5/testclasses/recording/CustomRecordingTest.java similarity index 96% rename from src/test/java/com/xceptance/neodymium/junit5/testclasses/recording/AutomaticRecordingTest.java rename to src/test/java/com/xceptance/neodymium/junit5/testclasses/recording/CustomRecordingTest.java index 6c9bb3ed..1a65185d 100644 --- a/src/test/java/com/xceptance/neodymium/junit5/testclasses/recording/AutomaticRecordingTest.java +++ b/src/test/java/com/xceptance/neodymium/junit5/testclasses/recording/CustomRecordingTest.java @@ -9,7 +9,7 @@ import com.xceptance.neodymium.junit5.NeodymiumTest; @Browser("Chrome_headless") -public class AutomaticRecordingTest +public class CustomRecordingTest { public static String uuid; diff --git a/src/test/java/com/xceptance/neodymium/junit5/tests/recording/automatic/RecordingDurationTest.java b/src/test/java/com/xceptance/neodymium/junit5/tests/recording/automatic/RecordingDurationTest.java index 377c38f8..e7163f5d 100644 --- a/src/test/java/com/xceptance/neodymium/junit5/tests/recording/automatic/RecordingDurationTest.java +++ b/src/test/java/com/xceptance/neodymium/junit5/tests/recording/automatic/RecordingDurationTest.java @@ -14,14 +14,14 @@ import com.xceptance.neodymium.common.recording.FilmTestExecution; import com.xceptance.neodymium.common.recording.config.RecordingConfigurations; -import com.xceptance.neodymium.junit5.testclasses.recording.AutomaticRecordingTest; +import com.xceptance.neodymium.junit5.testclasses.recording.CustomRecordingTest; import com.xceptance.neodymium.junit5.tests.AbstractNeodymiumTest; public class RecordingDurationTest extends AbstractNeodymiumTest { public double runTest(boolean isGif, String oneImagePerMilliseconds) throws IOException { - AutomaticRecordingTest.isGif = isGif; + CustomRecordingTest.isGif = isGif; String format = isGif ? "gif" : "video"; FilmTestExecution.clearThreadContexts(); Map<String, String> properties1 = new HashMap<>(); @@ -34,9 +34,9 @@ public double runTest(boolean isGif, String oneImagePerMilliseconds) throws IOEx writeMapToPropertiesFile(properties1, tempConfigFile1); ConfigFactory.setProperty(FilmTestExecution.TEMPORARY_CONFIG_FILE_PROPERTY_NAME, "file:" + fileLocation); tempFiles.add(tempConfigFile1); - run(AutomaticRecordingTest.class); + run(CustomRecordingTest.class); RecordingConfigurations config = isGif ? FilmTestExecution.getContextGif() : FilmTestExecution.getContextVideo(); - File recordingFile = new File(config.tempFolderToStoreRecording() + AutomaticRecordingTest.uuid + "." + config.format()); + File recordingFile = new File(config.tempFolderToStoreRecording() + CustomRecordingTest.uuid + "." + config.format()); recordingFile.deleteOnExit(); Assert.assertTrue("the recording file doesn't exist", recordingFile.exists()); ProcessBuilder pb = new ProcessBuilder("ffprobe", "-v", "error", "-show_entries", "format=duration", "-of", "default=noprint_wrappers=1:nokey=1", recordingFile.getAbsolutePath());