From e2f55be8aa468612a9fe6e1b5a792367f81035ca Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk Date: Fri, 13 Dec 2024 10:40:23 +0100 Subject: [PATCH 1/5] [#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/5] [#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 1f5282b3b0950ed258fe733265339cb1556df275 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk Date: Tue, 17 Dec 2024 16:29:18 +0100 Subject: [PATCH 3/5] [#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 65ce0703861322b259e4d34acd1649fd2e3b9d56 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk Date: Wed, 18 Dec 2024 14:49:22 +0100 Subject: [PATCH 4/5] [#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 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 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 methodKeepBrowserOpenAnnotations = getAnnotations(method, KeepBrowserOpen.class); List 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()); + } + + private BrowserMethodData addKeepBrowserOpenInformation(String browserTag, Method method) + { + BrowserMethodData browserMethodData = addKeepBrowserOpenInformationForBeforeOrAfter(browserTag, method); boolean junit5 = method.getAnnotation(NeodymiumTest.class) != null; List 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 computeRandomBrowsers(final Method method, final List 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 getAfterMethodsWithTestBrowser() { return afterMethodsWithTestBrowser; } + + public void setStartBrowserOnSetUp(boolean startBrowserOnSetUp) + { + this.startBrowserOnSetUp = startBrowserOnSetUp; + } + + public void setStartBrowserOnCleanUp(boolean startBrowserOnCleanUp) + { + this.startBrowserOnCleanUp = startBrowserOnCleanUp; + } + + public void setAfterMethodsWithTestBrowser(List afterMethodsWithTestBrowser) + { + this.afterMethodsWithTestBrowser = afterMethodsWithTestBrowser; + } } From 5acfe022ed2cfd6fadd3fdeb5c0c7bbff6813a32 Mon Sep 17 00:00:00 2001 From: Olha Omelianchuk Date: Wed, 18 Dec 2024 14:51:25 +0100 Subject: [PATCH 5/5] [#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)