From 92bfdcf26ed62ea614d573bcd26b3a57564a6eb8 Mon Sep 17 00:00:00 2001 From: Shruthi Date: Thu, 25 Dec 2025 17:28:42 +0530 Subject: [PATCH 1/4] Add GitHub Actions CI for Playwright --- .github/workflows/playwright.yml | 29 ++++++++++++ tests/E2E/endToEndTest.spec.ts | 81 ++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 .github/workflows/playwright.yml create mode 100644 tests/E2E/endToEndTest.spec.ts diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml new file mode 100644 index 0000000..3059465 --- /dev/null +++ b/.github/workflows/playwright.yml @@ -0,0 +1,29 @@ +name: Playwright Tests + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + playwright-tests: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 18 + + - name: Install dependencies + run: npm install + + - name: Install Playwright browsers + run: npx playwright install --with-deps + + - name: Run Playwright tests + run: npx playwright test diff --git a/tests/E2E/endToEndTest.spec.ts b/tests/E2E/endToEndTest.spec.ts new file mode 100644 index 0000000..bdc2dbe --- /dev/null +++ b/tests/E2E/endToEndTest.spec.ts @@ -0,0 +1,81 @@ +import { test, expect} from '@playwright/test' +import { BASE_URL, USERNAME, PASSWORD } from '../../utils/envConfig' +import { ProductPage } from '../../pages/ProductPage' +import { LoginPage } from '../../pages/LoginPage' +import { LoginLocators } from '../../locators/LoginLocators' +import { CartPage } from '../../pages/CartPage' +import { CheckoutPage } from '../../pages/CheckoutPage' +import { checckoutData } from '../../test-data/checkoutData' +import { productsToCart } from '../../test-data/products' +import { CheckoutOverviewPage } from '../../pages/CheckoutOverviewPage' +import { FinalPage } from '../../pages/FinalPage' + + +test.describe("Final Page Validation", () => { + let loginPage: LoginPage + let productPage: ProductPage + let cartPage : CartPage + let checkoutPage : CheckoutPage + let checkoutOverview : CheckoutOverviewPage + let finalPage : FinalPage + + test.beforeEach(async ({ page }) => { + loginPage = new LoginPage(page); + productPage = new ProductPage(page); + cartPage = new CartPage(page) + checkoutPage = new CheckoutPage(page) + checkoutOverview = new CheckoutOverviewPage(page) + finalPage = new FinalPage(page); + + await page.goto(BASE_URL); + await loginPage.login(USERNAME, PASSWORD); + await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html/EngineerB"); + await productPage.getSpecificProductDetails(productsToCart); + await productPage.clickOnCartLink(); + await cartPage.clickCheckoutButton(); + await checkoutPage.fillCheckoutDetail(checckoutData.firstName, checckoutData.lastName, checckoutData.postalCode); + await checkoutPage.clickOnContinue(); + await checkoutOverview.clickOnFinish(); + }) + + test("Validate checkout overview page UI and url", async({page})=> +{ + await expect(page).toHaveURL("https://www.saucedemo.com/checkout-complete.html") + const elements = await finalPage.getFinalPageElements(); + await expect(elements.backHomeBtn).toBeVisible() + await expect(elements.successMsg).toBeVisible() + await expect(elements.pageInfo).toBeVisible() +}) + +test.only("Validate the Success Message", async({page})=> +{ + const message = await finalPage.getSuccessMsgText(); + expect(message).toBe("Thank you for your order!") +}) +test ("Validate BackHomeButton", async({page})=> +{ + await finalPage.clickOnBackHomeBtn(); + await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html") +}) +test ("Validate BackHomeButton 1", async({page})=> +{ + await finalPage.clickOnBackHomeBtn(); + await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html") +}) +test ("Validate BackHomeButton 2", async({page})=> +{ + await finalPage.clickOnBackHomeBtn(); + await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html") +}) +test ("Validate BackHomeButton 4", async({page})=> +{ + await finalPage.clickOnBackHomeBtn(); + await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html") +}) +test ("Validate BackHomeButton 1", async({page})=> +{ + await finalPage.clickOnBackHomeBtn(); + await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html") +}) + +}) \ No newline at end of file From 331e271e22dd04180a0edf761cf9464d18e4c7d3 Mon Sep 17 00:00:00 2001 From: Shruthi Date: Thu, 25 Dec 2025 17:33:28 +0530 Subject: [PATCH 2/4] Add GitHub Actions CI for Playwright --- .github/workflows/playwright.yml | 29 ----------------------------- 1 file changed, 29 deletions(-) delete mode 100644 .github/workflows/playwright.yml diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml deleted file mode 100644 index 3059465..0000000 --- a/.github/workflows/playwright.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Playwright Tests - -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - -jobs: - playwright-tests: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 18 - - - name: Install dependencies - run: npm install - - - name: Install Playwright browsers - run: npx playwright install --with-deps - - - name: Run Playwright tests - run: npx playwright test From a3299697da6f31dcea75b14c7af07c0c863afe48 Mon Sep 17 00:00:00 2001 From: Shruthi Date: Thu, 25 Dec 2025 17:39:32 +0530 Subject: [PATCH 3/4] Addresses unique test name issue and describe block --- tests/E2E/endToEndTest.spec.ts | 4 ++-- tests/E2E/finalPage.spec.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/E2E/endToEndTest.spec.ts b/tests/E2E/endToEndTest.spec.ts index bdc2dbe..be9e51c 100644 --- a/tests/E2E/endToEndTest.spec.ts +++ b/tests/E2E/endToEndTest.spec.ts @@ -47,7 +47,7 @@ test.describe("Final Page Validation", () => { await expect(elements.pageInfo).toBeVisible() }) -test.only("Validate the Success Message", async({page})=> +test("Validate the Success Message", async({page})=> { const message = await finalPage.getSuccessMsgText(); expect(message).toBe("Thank you for your order!") @@ -72,7 +72,7 @@ test ("Validate BackHomeButton 4", async({page})=> await finalPage.clickOnBackHomeBtn(); await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html") }) -test ("Validate BackHomeButton 1", async({page})=> +test ("Validate BackHomeButton 3", async({page})=> { await finalPage.clickOnBackHomeBtn(); await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html") diff --git a/tests/E2E/finalPage.spec.ts b/tests/E2E/finalPage.spec.ts index bdc2dbe..be9e51c 100644 --- a/tests/E2E/finalPage.spec.ts +++ b/tests/E2E/finalPage.spec.ts @@ -47,7 +47,7 @@ test.describe("Final Page Validation", () => { await expect(elements.pageInfo).toBeVisible() }) -test.only("Validate the Success Message", async({page})=> +test("Validate the Success Message", async({page})=> { const message = await finalPage.getSuccessMsgText(); expect(message).toBe("Thank you for your order!") @@ -72,7 +72,7 @@ test ("Validate BackHomeButton 4", async({page})=> await finalPage.clickOnBackHomeBtn(); await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html") }) -test ("Validate BackHomeButton 1", async({page})=> +test ("Validate BackHomeButton 3", async({page})=> { await finalPage.clickOnBackHomeBtn(); await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html") From 4b98f59bd7d6c8e45335fe0be19a7a261ce466a1 Mon Sep 17 00:00:00 2001 From: Shruthi Date: Thu, 25 Dec 2025 17:42:29 +0530 Subject: [PATCH 4/4] Addresses unique test name issue and describe block --- tests/E2E/endToEndTest.spec.ts | 81 ---------------------------------- tests/E2E/finalPage.spec.ts | 81 ---------------------------------- 2 files changed, 162 deletions(-) delete mode 100644 tests/E2E/endToEndTest.spec.ts delete mode 100644 tests/E2E/finalPage.spec.ts diff --git a/tests/E2E/endToEndTest.spec.ts b/tests/E2E/endToEndTest.spec.ts deleted file mode 100644 index be9e51c..0000000 --- a/tests/E2E/endToEndTest.spec.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { test, expect} from '@playwright/test' -import { BASE_URL, USERNAME, PASSWORD } from '../../utils/envConfig' -import { ProductPage } from '../../pages/ProductPage' -import { LoginPage } from '../../pages/LoginPage' -import { LoginLocators } from '../../locators/LoginLocators' -import { CartPage } from '../../pages/CartPage' -import { CheckoutPage } from '../../pages/CheckoutPage' -import { checckoutData } from '../../test-data/checkoutData' -import { productsToCart } from '../../test-data/products' -import { CheckoutOverviewPage } from '../../pages/CheckoutOverviewPage' -import { FinalPage } from '../../pages/FinalPage' - - -test.describe("Final Page Validation", () => { - let loginPage: LoginPage - let productPage: ProductPage - let cartPage : CartPage - let checkoutPage : CheckoutPage - let checkoutOverview : CheckoutOverviewPage - let finalPage : FinalPage - - test.beforeEach(async ({ page }) => { - loginPage = new LoginPage(page); - productPage = new ProductPage(page); - cartPage = new CartPage(page) - checkoutPage = new CheckoutPage(page) - checkoutOverview = new CheckoutOverviewPage(page) - finalPage = new FinalPage(page); - - await page.goto(BASE_URL); - await loginPage.login(USERNAME, PASSWORD); - await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html/EngineerB"); - await productPage.getSpecificProductDetails(productsToCart); - await productPage.clickOnCartLink(); - await cartPage.clickCheckoutButton(); - await checkoutPage.fillCheckoutDetail(checckoutData.firstName, checckoutData.lastName, checckoutData.postalCode); - await checkoutPage.clickOnContinue(); - await checkoutOverview.clickOnFinish(); - }) - - test("Validate checkout overview page UI and url", async({page})=> -{ - await expect(page).toHaveURL("https://www.saucedemo.com/checkout-complete.html") - const elements = await finalPage.getFinalPageElements(); - await expect(elements.backHomeBtn).toBeVisible() - await expect(elements.successMsg).toBeVisible() - await expect(elements.pageInfo).toBeVisible() -}) - -test("Validate the Success Message", async({page})=> -{ - const message = await finalPage.getSuccessMsgText(); - expect(message).toBe("Thank you for your order!") -}) -test ("Validate BackHomeButton", async({page})=> -{ - await finalPage.clickOnBackHomeBtn(); - await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html") -}) -test ("Validate BackHomeButton 1", async({page})=> -{ - await finalPage.clickOnBackHomeBtn(); - await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html") -}) -test ("Validate BackHomeButton 2", async({page})=> -{ - await finalPage.clickOnBackHomeBtn(); - await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html") -}) -test ("Validate BackHomeButton 4", async({page})=> -{ - await finalPage.clickOnBackHomeBtn(); - await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html") -}) -test ("Validate BackHomeButton 3", async({page})=> -{ - await finalPage.clickOnBackHomeBtn(); - await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html") -}) - -}) \ No newline at end of file diff --git a/tests/E2E/finalPage.spec.ts b/tests/E2E/finalPage.spec.ts deleted file mode 100644 index be9e51c..0000000 --- a/tests/E2E/finalPage.spec.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { test, expect} from '@playwright/test' -import { BASE_URL, USERNAME, PASSWORD } from '../../utils/envConfig' -import { ProductPage } from '../../pages/ProductPage' -import { LoginPage } from '../../pages/LoginPage' -import { LoginLocators } from '../../locators/LoginLocators' -import { CartPage } from '../../pages/CartPage' -import { CheckoutPage } from '../../pages/CheckoutPage' -import { checckoutData } from '../../test-data/checkoutData' -import { productsToCart } from '../../test-data/products' -import { CheckoutOverviewPage } from '../../pages/CheckoutOverviewPage' -import { FinalPage } from '../../pages/FinalPage' - - -test.describe("Final Page Validation", () => { - let loginPage: LoginPage - let productPage: ProductPage - let cartPage : CartPage - let checkoutPage : CheckoutPage - let checkoutOverview : CheckoutOverviewPage - let finalPage : FinalPage - - test.beforeEach(async ({ page }) => { - loginPage = new LoginPage(page); - productPage = new ProductPage(page); - cartPage = new CartPage(page) - checkoutPage = new CheckoutPage(page) - checkoutOverview = new CheckoutOverviewPage(page) - finalPage = new FinalPage(page); - - await page.goto(BASE_URL); - await loginPage.login(USERNAME, PASSWORD); - await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html/EngineerB"); - await productPage.getSpecificProductDetails(productsToCart); - await productPage.clickOnCartLink(); - await cartPage.clickCheckoutButton(); - await checkoutPage.fillCheckoutDetail(checckoutData.firstName, checckoutData.lastName, checckoutData.postalCode); - await checkoutPage.clickOnContinue(); - await checkoutOverview.clickOnFinish(); - }) - - test("Validate checkout overview page UI and url", async({page})=> -{ - await expect(page).toHaveURL("https://www.saucedemo.com/checkout-complete.html") - const elements = await finalPage.getFinalPageElements(); - await expect(elements.backHomeBtn).toBeVisible() - await expect(elements.successMsg).toBeVisible() - await expect(elements.pageInfo).toBeVisible() -}) - -test("Validate the Success Message", async({page})=> -{ - const message = await finalPage.getSuccessMsgText(); - expect(message).toBe("Thank you for your order!") -}) -test ("Validate BackHomeButton", async({page})=> -{ - await finalPage.clickOnBackHomeBtn(); - await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html") -}) -test ("Validate BackHomeButton 1", async({page})=> -{ - await finalPage.clickOnBackHomeBtn(); - await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html") -}) -test ("Validate BackHomeButton 2", async({page})=> -{ - await finalPage.clickOnBackHomeBtn(); - await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html") -}) -test ("Validate BackHomeButton 4", async({page})=> -{ - await finalPage.clickOnBackHomeBtn(); - await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html") -}) -test ("Validate BackHomeButton 3", async({page})=> -{ - await finalPage.clickOnBackHomeBtn(); - await expect(page).toHaveURL("https://www.saucedemo.com/inventory.html") -}) - -}) \ No newline at end of file