import { expect, Page } from "@playwright/test"; import { fixture } from "../../../lib/hooks/pageFixture"; import Core from '../../../lib/global/global'; const core = Core.getInstance(); export default class HeaderPage { // private base: PageFixture; constructor() { } static Elements = { lbl_PageTitle: "//mat-toolbar//span[contains(text(),'Book Cart')]/parent::button", txt_Search: "//mat-toolbar//input[@placeholder='Search books or authors']", lnk_LoggedInUserName : "//mat-toolbar//a//mat-icon[text()='arrow_drop_down']/following-sibling::span/span", btn_Cart: "button.mat-focus-indicator.mat-icon-button", get_CartValue: "#mat-badge-content-0", lnk_Login: "//mat-toolbar//span[contains(text(),'Login')]/..", lnk_UserMenu: "//button[contains(@class,'mat-focus-indicator mat-menu-trigger')]", lnk_MyOrder: "//button[text()='My Orders' and @role='menuitem']", lnk_LogoutLink: "//button[text()='Logout' and @role='menuitem']", get_ToastMessage: "simple-snack-bar" } // Static method to return Elements static getObjects() { return this.Elements; } async enterBookName(bookname: string) { await fixture.page.getByPlaceholder(HeaderPage.Elements.txt_Search) .type(bookname); await core.Mouse.singleClick("mat-option[role='option']") } async clickOnCart() { await core.Mouse.singleClick(HeaderPage.Elements.btn_Cart); } async getCartValue() { await fixture.page.waitForTimeout(1000); return await fixture.page.textContent(HeaderPage.Elements.get_CartValue) } async clickLoginLink() { await core.Browser.navigateTo(HeaderPage.Elements.lnk_Login); //await this.base.navigateTo(HeaderPage.Elements.lnk_Login); } async clickOnUserMenu() { await core.Mouse.singleClick(HeaderPage.Elements.lnk_UserMenu); } async clickOnMyOrder() { await this.clickOnUserMenu(); await core.Mouse.singleClick(HeaderPage.Elements.lnk_MyOrder) } async logoutUser() { await this.clickOnUserMenu(); await core.Mouse.singleClick(HeaderPage.Elements.lnk_LogoutLink) } async verifyLoginSuccess() { await expect(fixture.page.locator(HeaderPage.Elements.lnk_UserMenu)) .toBeVisible(); } }