Skip to content

Commit 4874534

Browse files
Refactord the Browser Management and created Screenshots Utils class.
1 parent 7af52d8 commit 4874534

16 files changed

Lines changed: 108 additions & 57 deletions

File tree

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package io.swaglabs.portal.qa.browsermanager;
22

3+
import io.swaglabs.portal.qa.constants.WebPortalConstants;
4+
35
public class BrowserFactory {
46

5-
public IBrowser createBrowser(String browserName) {
6-
return switch (BrowserName.fromString(browserName)) {
7+
public IBrowser createBrowser() {
8+
return switch (BrowserName.fromString(WebPortalConstants.BROWSER)) {
79
case FIREFOX -> new FirefoxBrowser();
810
case WEBKIT -> new WebkitBrowser();
911
case MS_EDGE -> new MsEdgeBrowser();

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,8 @@ public class BrowserManager implements IBrowserManager<Page> {
1111

1212
@Override
1313
public Page getBrowserPage(Playwright playwright) {
14-
String browserName = WebPortalConstants.BROWSER;
15-
String runMode = WebPortalConstants.RUN_MODE;
16-
boolean isHeadless = runMode.equals("headless");
17-
BrowserContext browserContext = new BrowserFactory().createBrowser(browserName).createSession(playwright, isHeadless);
14+
boolean isHeadless = "headless".equals(WebPortalConstants.RUN_MODE);
15+
BrowserContext browserContext = new BrowserFactory().createBrowser().createSession(playwright, isHeadless);
1816
Objects.requireNonNull(browserContext, "Playwright Browser Context is null!");
1917
return browserContext.newPage();
2018
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package io.swaglabs.portal.qa.browsermanager;
22

3-
import io.swaglabs.portal.qa.exceptions.UtilsException;
3+
import io.swaglabs.portal.qa.exceptions.WebUtilsException;
44
import lombok.AllArgsConstructor;
55
import lombok.Getter;
66

@@ -20,6 +20,6 @@ public enum BrowserName {
2020
public static BrowserName fromString(String browserName) {
2121
return Arrays.stream(BrowserName.values())
2222
.filter(browserType -> browserType.getBrowserType().equalsIgnoreCase(browserName))
23-
.findFirst().orElseThrow(() -> new UtilsException("Unknown browser: " + browserName));
23+
.findFirst().orElseThrow(() -> new WebUtilsException("Unknown browser: " + browserName));
2424
}
2525
}

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,9 @@ public class ChromeBrowser implements IBrowser {
1010

1111
@Override
1212
public BrowserContext createSession(Playwright playwright, boolean isHeadless) {
13-
return playwright.chromium().launch(new BrowserType.LaunchOptions()
14-
.setHeadless(isHeadless))
15-
.newContext(new Browser.NewContextOptions()
16-
.setViewportSize(WebPortalConstants.SCREEN_WIDTH, WebPortalConstants.SCREEN_HEIGHT)
17-
.setTimezoneId(WebPortalConstants.TIME_ZONE));
13+
BrowserType.LaunchOptions chromeLaunchOptions = WebPortalConstants.BROWSER_LAUNCH_OPTIONS.setHeadless(isHeadless);
14+
return playwright.chromium().launch(chromeLaunchOptions).newContext(new Browser.NewContextOptions()
15+
.setViewportSize(WebPortalConstants.SCREEN_WIDTH, WebPortalConstants.SCREEN_HEIGHT)
16+
.setTimezoneId(WebPortalConstants.TIME_ZONE));
1817
}
1918
}

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,9 @@
99
public class FirefoxBrowser implements IBrowser {
1010
@Override
1111
public BrowserContext createSession(Playwright playwright, boolean isHeadless) {
12-
return playwright.firefox().launch(new BrowserType.LaunchOptions()
13-
.setHeadless(isHeadless))
14-
.newContext(new Browser.NewContextOptions()
15-
.setViewportSize(WebPortalConstants.SCREEN_WIDTH, WebPortalConstants.SCREEN_HEIGHT)
16-
.setTimezoneId(WebPortalConstants.TIME_ZONE));
12+
BrowserType.LaunchOptions firefoxLaunchOptions = WebPortalConstants.BROWSER_LAUNCH_OPTIONS.setHeadless(isHeadless);
13+
return playwright.firefox().launch(firefoxLaunchOptions).newContext(new Browser.NewContextOptions()
14+
.setViewportSize(WebPortalConstants.SCREEN_WIDTH, WebPortalConstants.SCREEN_HEIGHT)
15+
.setTimezoneId(WebPortalConstants.TIME_ZONE));
1716
}
1817
}

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@
99
public class MsEdgeBrowser implements IBrowser {
1010
@Override
1111
public BrowserContext createSession(Playwright playwright, boolean isHeadless) {
12-
return playwright.chromium().launch(new BrowserType.LaunchOptions()
13-
.setHeadless(isHeadless).setChannel(BrowserName.MS_EDGE.getBrowserType()))
14-
.newContext(new Browser.NewContextOptions()
15-
.setViewportSize(WebPortalConstants.SCREEN_WIDTH, WebPortalConstants.SCREEN_HEIGHT)
16-
.setTimezoneId(WebPortalConstants.TIME_ZONE));
12+
BrowserType.LaunchOptions msedgeLaunchOptions = WebPortalConstants.BROWSER_LAUNCH_OPTIONS
13+
.setHeadless(isHeadless)
14+
.setChannel(BrowserName.MS_EDGE.getBrowserType());
15+
return playwright.chromium().launch(msedgeLaunchOptions).newContext(new Browser.NewContextOptions()
16+
.setViewportSize(WebPortalConstants.SCREEN_WIDTH, WebPortalConstants.SCREEN_HEIGHT)
17+
.setTimezoneId(WebPortalConstants.TIME_ZONE));
1718
}
1819
}

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,9 @@
99
public class WebkitBrowser implements IBrowser {
1010
@Override
1111
public BrowserContext createSession(Playwright playwright, boolean isHeadless) {
12-
return playwright.webkit().launch(new BrowserType.LaunchOptions()
13-
.setHeadless(isHeadless))
14-
.newContext(new Browser.NewContextOptions()
15-
.setViewportSize(WebPortalConstants.SCREEN_WIDTH, WebPortalConstants.SCREEN_HEIGHT)
16-
.setTimezoneId(WebPortalConstants.TIME_ZONE));
12+
BrowserType.LaunchOptions webkitLaunchOptions = new BrowserType.LaunchOptions().setHeadless(isHeadless);
13+
return playwright.webkit().launch(webkitLaunchOptions).newContext(new Browser.NewContextOptions()
14+
.setViewportSize(WebPortalConstants.SCREEN_WIDTH, WebPortalConstants.SCREEN_HEIGHT)
15+
.setTimezoneId(WebPortalConstants.TIME_ZONE));
1716
}
1817
}

src/main/java/io/swaglabs/portal/qa/commons/WebBasePage.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,13 @@
22

33
import com.microsoft.playwright.Locator;
44
import com.microsoft.playwright.Page;
5-
import io.swaglabs.portal.qa.constants.WebPortalConstants;
65
import io.swaglabs.portal.qa.exceptions.WebPageException;
76
import io.swaglabs.portal.qa.locators.Locators;
8-
import io.swaglabs.portal.qa.screenshotsmanager.ElementScreenshotStrategy;
9-
import io.swaglabs.portal.qa.screenshotsmanager.ScreenshotContext;
107

118
import java.util.Objects;
129

1310
public abstract class WebBasePage {
1411

15-
private static final String ELEMENT_SCREENSHOT_FILE_LOCATION = WebPortalConstants.SCREENSHOT_FILE_LOCATION + "/elements/"
16-
+ WebPortalConstants.BROWSER + "_" + WebPortalConstants.RUN_MODE + "_Element_";
1712
protected Page basePage;
1813
protected Locators locators;
1914

@@ -53,9 +48,4 @@ private String extractText(Locator locator, String errorMessage) {
5348
Objects.requireNonNull(locator, errorMessage);
5449
return locator.textContent().trim();
5550
}
56-
57-
protected void takeElementScreenshot(Locator locator, String fileName) {
58-
ScreenshotContext screenshotContext = new ScreenshotContext(new ElementScreenshotStrategy(locator));
59-
screenshotContext.captureScreenshot(basePage, ELEMENT_SCREENSHOT_FILE_LOCATION + fileName + WebPortalConstants.IMAGE_FORMAT);
60-
}
6151
}

src/main/java/io/swaglabs/portal/qa/constants/WebPortalConstants.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
package io.swaglabs.portal.qa.constants;
22

3+
import com.microsoft.playwright.BrowserType;
4+
import io.swaglabs.portal.qa.screenshotsmanager.ScreenshotContext;
5+
import io.swaglabs.portal.qa.screenshotsmanager.ScreenshotsUtils;
36
import io.swaglabs.portal.qa.utils.WebConfigLoader;
47
import lombok.AccessLevel;
58
import lombok.NoArgsConstructor;
69

10+
import java.util.List;
11+
712
@NoArgsConstructor(access = AccessLevel.PRIVATE)
813
public final class WebPortalConstants {
914

@@ -18,9 +23,18 @@ public final class WebPortalConstants {
1823
public static final String BROWSER = System.getProperty("browser");
1924
public static final String TIME_ZONE = "Asia/Kolkata";
2025

26+
// Web Browser resolution
2127
public static final int SCREEN_WIDTH = 1920;
2228
public static final int SCREEN_HEIGHT = 1080;
2329

2430
public static final String SCREENSHOT_FILE_LOCATION = "./target/screenshots/";
2531
public static final String IMAGE_FORMAT = ".png";
32+
33+
// Browser Type Launch Options Config
34+
public static final BrowserType.LaunchOptions BROWSER_LAUNCH_OPTIONS = new BrowserType.LaunchOptions()
35+
.setArgs(List.of("--window-position=0,0"));
36+
37+
// SCREENSHOT STRATEGIES
38+
public static final ScreenshotsUtils SCREENSHOTS_UTILS = ScreenshotsUtils.getInstance();
39+
public static final ScreenshotContext FULL_PAGE_SCREENSHOT = SCREENSHOTS_UTILS.getFullPageScreenshotContext();
2640
}

src/main/java/io/swaglabs/portal/qa/exceptions/UtilsException.java

Lines changed: 0 additions & 8 deletions
This file was deleted.

0 commit comments

Comments
 (0)