From e2f55be8aa468612a9fe6e1b5a792367f81035ca Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk Date: Fri, 13 Dec 2024 10:40:23 +0100 Subject: [PATCH 1/2] [#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 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 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 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 methodKeepBrowserOpenAnnotations = getAnnotations(method, KeepBrowserOpen.class); List 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 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 Date: Fri, 13 Dec 2024 10:43:39 +0100 Subject: [PATCH 2/2] [#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()); + } }