diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1de7d41..1e62b99 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,6 @@ name: Playwright Test Framework +env: + TZ: Asia/Kolkata on: workflow_dispatch: diff --git a/README.md b/README.md index 1d97f2c..d1624e3 100644 --- a/README.md +++ b/README.md @@ -15,10 +15,12 @@ Automated end-to-end testing framework built with Playwright and Java, tailored for scalability and maintainability, this framework covers critical test scenarios with robust assertions and clean, modular code. Perfect for those looking to speed up their test automation journey or enhance their Playwright skills! -Thanks to [The Pocket](https://github.com/The-Pocket/PocketFlow-Tutorial-Codebase-Knowledge) for beautifully generating an entire easy-to-understand tutorial for this GitHub Repo. +Thanks to [The Pocket](https://github.com/The-Pocket/PocketFlow-Tutorial-Codebase-Knowledge) for beautifully generating +an entire easy-to-understand tutorial for this GitHub Repo. Massive respect for creating such a wonderful tool. Simply Brilliant! ❤️ -You can read the entire tutorial [here](https://code2tutorial.com/tutorial/81c3753d-35c2-41fd-941c-34a1c851e80c/index.md). +You can read the entire +tutorial [here](https://code2tutorial.com/tutorial/81c3753d-35c2-41fd-941c-34a1c851e80c/index.md). # TEST ARCHITECTURE @@ -53,7 +55,6 @@ You can read the entire tutorial [here](https://code2tutorial.com/tutorial/81c37 Browser_Creation_Flow - # CHROME DEVTOOLS PROTOCOL IMPLEMENTATION EXPLAINED **1. Initialize the CDP Session** @@ -125,6 +126,8 @@ You can read the entire tutorial [here](https://code2tutorial.com/tutorial/81c37 | 4 | Firefox | Headless | `mvn clean test -Drunmode=headless -Dbrowser=firefox -Dgroups=SWAG_LABS_SMOKE,SWAG_LABS_REGRESSION,SWAG_LABS_E2E -Dthreads=3 -Ddataproviderthreadcount=3` | | 5 | Edge | Local | `mvn clean test -Dbrowser=msedge -Dgroups=SWAG_LABS_SMOKE,SWAG_LABS_REGRESSION,SWAG_LABS_E2E -Dthreads=3 -Ddataproviderthreadcount=3` | | 6 | Edge | Headless | `mvn clean test -Drunmode=headless -Dbrowser=msedge -Dgroups=SWAG_LABS_SMOKE,SWAG_LABS_REGRESSION,SWAG_LABS_E2E -Dthreads=3 -Ddataproviderthreadcount=3` | +| 7 | WebKit | Local | `mvn clean test -Dbrowser=webkit -Dgroups=SWAG_LABS_SMOKE,SWAG_LABS_REGRESSION,SWAG_LABS_E2E -Dthreads=3 -Ddataproviderthreadcount=3` | +| 8 | WebKit | Headless | `mvn clean test -Drunmode=headless -Dbrowser=webkit -Dgroups=SWAG_LABS_SMOKE,SWAG_LABS_REGRESSION,SWAG_LABS_E2E -Dthreads=3 -Ddataproviderthreadcount=3` | **NOTE**: These above commands (no testng.xml required) will run the tests in parallel with the specified thread count and with the respective groups and thread counts. diff --git a/src/main/java/io/swaglabs/portal/qa/browsermanager/ChromeBrowser.java b/src/main/java/io/swaglabs/portal/qa/browsermanager/ChromeBrowser.java index 811918a..40c7db8 100644 --- a/src/main/java/io/swaglabs/portal/qa/browsermanager/ChromeBrowser.java +++ b/src/main/java/io/swaglabs/portal/qa/browsermanager/ChromeBrowser.java @@ -13,6 +13,7 @@ public BrowserContext createSession(Playwright playwright, boolean isHeadless) { return playwright.chromium().launch(new BrowserType.LaunchOptions() .setHeadless(isHeadless)) .newContext(new Browser.NewContextOptions() - .setViewportSize(WebPortalConstants.SCREEN_WIDTH, WebPortalConstants.SCREEN_HEIGHT)); + .setViewportSize(WebPortalConstants.SCREEN_WIDTH, WebPortalConstants.SCREEN_HEIGHT) + .setTimezoneId(WebPortalConstants.TIME_ZONE)); } } \ No newline at end of file diff --git a/src/main/java/io/swaglabs/portal/qa/browsermanager/FirefoxBrowser.java b/src/main/java/io/swaglabs/portal/qa/browsermanager/FirefoxBrowser.java index ff55345..df55612 100644 --- a/src/main/java/io/swaglabs/portal/qa/browsermanager/FirefoxBrowser.java +++ b/src/main/java/io/swaglabs/portal/qa/browsermanager/FirefoxBrowser.java @@ -12,6 +12,7 @@ public BrowserContext createSession(Playwright playwright, boolean isHeadless) { return playwright.firefox().launch(new BrowserType.LaunchOptions() .setHeadless(isHeadless)) .newContext(new Browser.NewContextOptions() - .setViewportSize(WebPortalConstants.SCREEN_WIDTH, WebPortalConstants.SCREEN_HEIGHT)); + .setViewportSize(WebPortalConstants.SCREEN_WIDTH, WebPortalConstants.SCREEN_HEIGHT) + .setTimezoneId(WebPortalConstants.TIME_ZONE)); } } \ No newline at end of file diff --git a/src/main/java/io/swaglabs/portal/qa/browsermanager/MsEdgeBrowser.java b/src/main/java/io/swaglabs/portal/qa/browsermanager/MsEdgeBrowser.java index ee659c7..0834bc4 100644 --- a/src/main/java/io/swaglabs/portal/qa/browsermanager/MsEdgeBrowser.java +++ b/src/main/java/io/swaglabs/portal/qa/browsermanager/MsEdgeBrowser.java @@ -12,6 +12,7 @@ public BrowserContext createSession(Playwright playwright, boolean isHeadless) { return playwright.chromium().launch(new BrowserType.LaunchOptions() .setHeadless(isHeadless).setChannel(BrowserName.MS_EDGE.getBrowserType())) .newContext(new Browser.NewContextOptions() - .setViewportSize(WebPortalConstants.SCREEN_WIDTH, WebPortalConstants.SCREEN_HEIGHT)); + .setViewportSize(WebPortalConstants.SCREEN_WIDTH, WebPortalConstants.SCREEN_HEIGHT) + .setTimezoneId(WebPortalConstants.TIME_ZONE)); } } \ No newline at end of file diff --git a/src/main/java/io/swaglabs/portal/qa/browsermanager/WebkitBrowser.java b/src/main/java/io/swaglabs/portal/qa/browsermanager/WebkitBrowser.java index 104931f..cee8e76 100644 --- a/src/main/java/io/swaglabs/portal/qa/browsermanager/WebkitBrowser.java +++ b/src/main/java/io/swaglabs/portal/qa/browsermanager/WebkitBrowser.java @@ -12,6 +12,7 @@ public BrowserContext createSession(Playwright playwright, boolean isHeadless) { return playwright.webkit().launch(new BrowserType.LaunchOptions() .setHeadless(isHeadless)) .newContext(new Browser.NewContextOptions() - .setViewportSize(WebPortalConstants.SCREEN_WIDTH, WebPortalConstants.SCREEN_HEIGHT)); + .setViewportSize(WebPortalConstants.SCREEN_WIDTH, WebPortalConstants.SCREEN_HEIGHT) + .setTimezoneId(WebPortalConstants.TIME_ZONE)); } } \ No newline at end of file diff --git a/src/main/java/io/swaglabs/portal/qa/constants/WebPortalConstants.java b/src/main/java/io/swaglabs/portal/qa/constants/WebPortalConstants.java index 0c7f0bd..b701024 100644 --- a/src/main/java/io/swaglabs/portal/qa/constants/WebPortalConstants.java +++ b/src/main/java/io/swaglabs/portal/qa/constants/WebPortalConstants.java @@ -16,10 +16,11 @@ public final class WebPortalConstants { // DYNAMIC BROWSER & ENVIRONMENT CHOICE public static final String RUN_MODE = System.getProperty("runmode"); public static final String BROWSER = System.getProperty("browser"); + public static final String TIME_ZONE = "Asia/Kolkata"; public static final int SCREEN_WIDTH = 1920; public static final int SCREEN_HEIGHT = 1080; - public static final String SCREENSHOT_FILE_LOCATION = "./src/test/resources/screenshots/"; + public static final String SCREENSHOT_FILE_LOCATION = "./target/screenshots/"; public static final String IMAGE_FORMAT = ".png"; } \ No newline at end of file diff --git a/src/test/java/io/swaglabs/portal/qa/listeners/WebTestListeners.java b/src/test/java/io/swaglabs/portal/qa/listeners/WebTestListeners.java index 107931c..27beac6 100644 --- a/src/test/java/io/swaglabs/portal/qa/listeners/WebTestListeners.java +++ b/src/test/java/io/swaglabs/portal/qa/listeners/WebTestListeners.java @@ -68,7 +68,7 @@ private void takeScreenshot(ITestResult testResult) { String directory = testResult.isSuccess() ? "passed_screenshots" : "failed_screenshots"; String timestamp = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss").format(new Date()); String parameter = extractSafeParameter(testResult); - String fileName = formatScreenshotFileName(statusPrefix, testName, parameter, timestamp); + String fileName = formatScreenshotFileName(statusPrefix, testName, parameter, timestamp).replaceAll(":", "_"); String dirPath = Paths.get(WebPortalConstants.SCREENSHOT_FILE_LOCATION + "/pages/", directory).toString(); String filePath = Paths.get(dirPath, fileName).toString(); try {