44import com .microsoft .playwright .Page ;
55import io .swaglabs .portal .qa .constants .WebPortalConstants ;
66import io .swaglabs .portal .qa .exceptions .WebPageException ;
7+ import io .swaglabs .portal .qa .listeners .WebTestListeners ;
78import io .swaglabs .portal .qa .locators .Locators ;
89import io .swaglabs .portal .qa .screenshotsmanager .ElementScreenshotStrategy ;
910import io .swaglabs .portal .qa .screenshotsmanager .ScreenshotContext ;
11+ import org .testng .ITestResult ;
12+ import org .testng .Reporter ;
1013
1114import java .util .Objects ;
15+ import java .util .function .Consumer ;
1216
1317public abstract class WebBasePage {
1418
@@ -58,4 +62,36 @@ protected void takeElementScreenshot(Locator locator, String fileName) {
5862 ScreenshotContext screenshotContext = new ScreenshotContext (new ElementScreenshotStrategy (locator ));
5963 screenshotContext .captureScreenshot (basePage , ELEMENT_SCREENSHOT_FILE_LOCATION + fileName + WebPortalConstants .IMAGE_FORMAT );
6064 }
65+
66+ protected void switchToNewTabAndRun (Page newTabPage , Consumer <WebBasePage > actionsInNewTab ) {
67+ Page originalPage = this .basePage ;
68+ Locators originalLocators = this .locators ;
69+ try {
70+ // Update to new tab context
71+ this .basePage = newTabPage ;
72+ this .locators = new Locators (newTabPage );
73+ WebTestListeners .setPage (newTabPage );
74+ actionsInNewTab .accept (this ); // Perform operations in new tab
75+ } catch (Exception testException ) {
76+ // Capture screenshot of the new tab before any cleanup
77+ if (newTabPage != null && !newTabPage .isClosed ()) {
78+ ITestResult currentTestResult = Reporter .getCurrentTestResult ();
79+ if (currentTestResult != null ) {
80+ currentTestResult .setStatus (ITestResult .FAILURE );
81+ currentTestResult .setThrowable (testException );
82+ WebTestListeners listeners = new WebTestListeners ();
83+ listeners .onTestFailure (currentTestResult );
84+ }
85+ }
86+ throw testException ; // Re-throw to maintain original behavior
87+ } finally {
88+ if (newTabPage != null && !newTabPage .isClosed ()) {
89+ newTabPage .close (); // Always close the new tab
90+ }
91+ WebTestListeners .setPage (originalPage );
92+ // Revert to the original page and locator
93+ this .basePage = originalPage ;
94+ this .locators = originalLocators ;
95+ }
96+ }
6197}
0 commit comments