diff --git a/src/main/java/io/swaglabs/portal/qa/commons/WebBasePage.java b/src/main/java/io/swaglabs/portal/qa/commons/WebBasePage.java index d13b862..910ebbf 100644 --- a/src/main/java/io/swaglabs/portal/qa/commons/WebBasePage.java +++ b/src/main/java/io/swaglabs/portal/qa/commons/WebBasePage.java @@ -4,11 +4,15 @@ import com.microsoft.playwright.Page; import io.swaglabs.portal.qa.constants.WebPortalConstants; import io.swaglabs.portal.qa.exceptions.WebPageException; +import io.swaglabs.portal.qa.listeners.WebTestListeners; import io.swaglabs.portal.qa.locators.Locators; import io.swaglabs.portal.qa.screenshotsmanager.ElementScreenshotStrategy; import io.swaglabs.portal.qa.screenshotsmanager.ScreenshotContext; +import org.testng.ITestResult; +import org.testng.Reporter; import java.util.Objects; +import java.util.function.Consumer; public abstract class WebBasePage { @@ -58,4 +62,36 @@ protected void takeElementScreenshot(Locator locator, String fileName) { ScreenshotContext screenshotContext = new ScreenshotContext(new ElementScreenshotStrategy(locator)); screenshotContext.captureScreenshot(basePage, ELEMENT_SCREENSHOT_FILE_LOCATION + fileName + WebPortalConstants.IMAGE_FORMAT); } + + protected void switchToNewTabAndRun(Page newTabPage, Consumer actionsInNewTab) { + Page originalPage = this.basePage; + Locators originalLocators = this.locators; + try { + // Update to new tab context + this.basePage = newTabPage; + this.locators = new Locators(newTabPage); + WebTestListeners.setPage(newTabPage); + actionsInNewTab.accept(this); // Perform operations in new tab + } catch (Exception testException) { + // Capture screenshot of the new tab before any cleanup + if (newTabPage != null && !newTabPage.isClosed()) { + ITestResult currentTestResult = Reporter.getCurrentTestResult(); + if (currentTestResult != null) { + currentTestResult.setStatus(ITestResult.FAILURE); + currentTestResult.setThrowable(testException); + WebTestListeners listeners = new WebTestListeners(); + listeners.onTestFailure(currentTestResult); + } + } + throw testException; // Re-throw to maintain original behavior + } finally { + if (newTabPage != null && !newTabPage.isClosed()) { + newTabPage.close(); // Always close the new tab + } + WebTestListeners.setPage(originalPage); + // Revert to the original page and locator + this.basePage = originalPage; + this.locators = originalLocators; + } + } } \ No newline at end of file diff --git a/src/test/java/io/swaglabs/portal/qa/listeners/WebAnnotationTransformer.java b/src/main/java/io/swaglabs/portal/qa/listeners/WebAnnotationTransformer.java similarity index 100% rename from src/test/java/io/swaglabs/portal/qa/listeners/WebAnnotationTransformer.java rename to src/main/java/io/swaglabs/portal/qa/listeners/WebAnnotationTransformer.java diff --git a/src/test/java/io/swaglabs/portal/qa/listeners/WebTestListeners.java b/src/main/java/io/swaglabs/portal/qa/listeners/WebTestListeners.java similarity index 100% rename from src/test/java/io/swaglabs/portal/qa/listeners/WebTestListeners.java rename to src/main/java/io/swaglabs/portal/qa/listeners/WebTestListeners.java diff --git a/src/main/java/io/swaglabs/portal/qa/utils/PerformanceUtils.java b/src/main/java/io/swaglabs/portal/qa/utils/PerformanceUtils.java index e96571f..d4a7025 100644 --- a/src/main/java/io/swaglabs/portal/qa/utils/PerformanceUtils.java +++ b/src/main/java/io/swaglabs/portal/qa/utils/PerformanceUtils.java @@ -46,6 +46,7 @@ public static void evaluateDomContentLoadTime(Page page, String methodName) { log.info("DOM Content Loaded Time for the method: {} is: {} ms.", methodName, domContentLoadTime); } + @SuppressWarnings("unchecked") private static Map getPerformanceMetrics(Page page) { Objects.requireNonNull(page, "Page cannot be null!"); return (Map) page.evaluate(PERFORMANCE_JS_SCRIPT);