Skip to content

Commit 4c85663

Browse files
Improved threading.
1 parent d4cfd92 commit 4c85663

2 files changed

Lines changed: 34 additions & 22 deletions

File tree

src/main/java/io/swaglabs/portal/qa/browsermanager/BrowserManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
public class BrowserManager implements IBrowserManager<Page> {
1111

1212
@Override
13-
public Page getBrowserPage(Playwright playwright) {
13+
public synchronized Page getBrowserPage(Playwright playwright) {
1414
boolean isHeadless = "headless".equals(WebPortalConstants.RUN_MODE);
1515
BrowserContext browserContext = new BrowserFactory().createBrowser().createSession(playwright, isHeadless);
1616
Objects.requireNonNull(browserContext, "Playwright Browser Context is null!");

src/test/java/io/swaglabs/portal/qa/commons/WebBaseTest.java

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import org.testng.annotations.BeforeSuite;
1616

1717
import java.lang.reflect.Method;
18-
import java.util.Objects;
1918

2019
@Slf4j
2120
public abstract class WebBaseTest {
@@ -38,34 +37,47 @@ public void init(Method method) {
3837
log.info("Browser has been set.");
3938
WebTestListeners.setPage(page.get());
4039
if (isChromiumBrowser()) {
41-
CdpUtils.initializeCdpSession(page.get());
42-
CdpUtils.enableCdpSession();
43-
CdpUtils.sendCommand(CdpCommands.NETWORK_ENABLE.getDescription());
44-
CdpUtils.logErrorResponses();
45-
CdpUtils.sendCommand(CdpCommands.CONSOLE_ENABLE.getDescription());
46-
CdpUtils.logConsoleErrors();
47-
CdpUtils.sendCommand(CdpCommands.RUNTIME_ENABLE.getDescription());
48-
CdpUtils.logUncaughtJavascriptErrors();
49-
CdpUtils.logUncaughtConsoleErrors();
50-
CdpUtils.sendCommand(CdpCommands.PAGE_ENABLE.getDescription());
51-
CdpUtils.logPageLoadCompletion();
52-
CdpUtils.logPageNavigatedWithinDocument();
40+
initializeCdpSession(page.get());
5341
}
42+
trackPerformanceMetrics(method);
43+
}
44+
45+
private void initializeCdpSession(Page page) {
46+
CdpUtils.initializeCdpSession(page);
47+
CdpUtils.enableCdpSession();
48+
CdpUtils.sendCommand(CdpCommands.NETWORK_ENABLE.getDescription());
49+
CdpUtils.logErrorResponses();
50+
CdpUtils.sendCommand(CdpCommands.CONSOLE_ENABLE.getDescription());
51+
CdpUtils.logConsoleErrors();
52+
CdpUtils.sendCommand(CdpCommands.RUNTIME_ENABLE.getDescription());
53+
CdpUtils.logUncaughtJavascriptErrors();
54+
CdpUtils.logUncaughtConsoleErrors();
55+
CdpUtils.sendCommand(CdpCommands.PAGE_ENABLE.getDescription());
56+
CdpUtils.logPageLoadCompletion();
57+
CdpUtils.logPageNavigatedWithinDocument();
58+
}
59+
60+
private void trackPerformanceMetrics(Method method) {
5461
PerformanceUtils.evaluatePageLoadTime(page.get(), method.getName());
5562
PerformanceUtils.evaluateDomContentLoadTime(page.get(), method.getName());
5663
}
5764

5865
@AfterMethod(alwaysRun = true)
5966
public void destroy() {
60-
if (isChromiumBrowser()) {
61-
CdpUtils.destroyCdpSession();
67+
try {
68+
if (isChromiumBrowser()) {
69+
CdpUtils.destroyCdpSession();
70+
}
71+
browserManager.destroyBrowserPage(page.get());
72+
} catch (Exception e) {
73+
log.error("Cleanup failed: ", e);
74+
} finally {
75+
page.remove();
76+
if (PLAYWRIGHT.get() != null) {
77+
PLAYWRIGHT.get().close();
78+
PLAYWRIGHT.remove();
79+
}
6280
}
63-
browserManager.destroyBrowserPage(page.get());
64-
page.remove();
65-
Objects.requireNonNull(PLAYWRIGHT.get(), "Playwright is null!");
66-
PLAYWRIGHT.get().close();
67-
PLAYWRIGHT.remove();
68-
log.info("Browser has been destroyed.");
6981
}
7082

7183
private boolean isChromiumBrowser() {

0 commit comments

Comments
 (0)