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());