Overview
Navbar is a component class that handles all interactions with the navigation menu, including user logout and accessing the shopping cart.
Location: cypress/support/components/Navbar.ts
Unlike page objects, Navbar does NOT extend BasePage as it represents a reusable component rather than a full page.
Class Definition
export default class Navbar {
private burgerMenuBtn : string
private logoutBtn : string
private checkoutIcon : string
constructor () {
this . burgerMenuBtn = '#react-burger-menu-btn'
this . logoutBtn = '#logout_sidebar_link'
this . checkoutIcon = '[data-test="shopping-cart-link"]'
}
}
Constructor
Initializes the Navbar component with required selectors.
const navbar = new Navbar ()
Properties
Property Type Selector Description burgerMenuBtnstring #react-burger-menu-btnHamburger menu button to open sidebar logoutBtnstring #logout_sidebar_linkLogout link in the sidebar menu checkoutIconstring [data-test="shopping-cart-link"]Shopping cart icon link
Methods
userLogout
Performs a complete logout operation by opening the burger menu and clicking the logout button.
public userLogout (): void
Implementation:
Clicks the burger menu button to open the sidebar
Clicks the logout link to sign out
Usage Example:
// After completing test actions
homePage . verifyHomePageIsVisible ()
navbar . userLogout ()
loginPage . verifyLoginMainPage ()
Real Test Example:
it ( 'Should log in successfully with valid credentials' , () => {
cy . get ( '@userData' ). then (( user : any ) => {
loginPage . verifyLoginMainPage ()
loginPage . typeUsername ( user . standard )
loginPage . typePassword ( user . password )
loginPage . clickOnLoginButton ()
homePage . verifyHomePageIsVisible ()
navbar . userLogout ()
loginPage . verifyLoginMainPage ()
})
})
clickOnCheckoutIcon
Clicks the shopping cart icon to navigate to the cart page.
public clickOnCheckoutIcon (): void
Usage Example:
homePage . addProductToCart ( 0 )
navbar . clickOnCheckoutIcon ()
checkout . verifyCartPageIsVisible ()
Real Test Example:
it ( 'Should add successfully one product into the cart' , () => {
homePage . addProductToCart ( 0 )
navbar . clickOnCheckoutIcon ()
checkout . verifyCartPageIsVisible ()
checkout . verifyProductWasAddedToCart ()
checkout . verifyThatCheckoutCounterMatch ()
})
Complete Test Flow Examples
Login and Logout Flow
import LoginPage from "../../support/pages/LoginPage"
import HomePage from "../../support/pages/HomePage"
import Navbar from "../../support/components/Navbar"
let loginPage : LoginPage
let homePage : HomePage
let navbar : Navbar
describe ( 'Navigation Tests' , () => {
beforeEach (() => {
cy . fixture ( 'users' ). as ( 'userData' )
loginPage = new LoginPage ()
homePage = new HomePage ()
navbar = new Navbar ()
cy . visit ( '/' )
})
it ( 'Should log in and log out successfully' , () => {
cy . get ( '@userData' ). then (( user : any ) => {
loginPage . verifyLoginMainPage ()
loginPage . typeUsername ( user . standard )
loginPage . typePassword ( user . password )
loginPage . clickOnLoginButton ()
homePage . verifyHomePageIsVisible ()
navbar . userLogout ()
loginPage . verifyLoginMainPage ()
})
})
})
import HomePage from "../../support/pages/HomePage"
import Checkout from "../../support/pages/Checkout"
import Navbar from "../../support/components/Navbar"
let homePage : HomePage
let navbar : Navbar
let checkout : Checkout
describe ( 'Cart Navigation Tests' , () => {
beforeEach (() => {
cy . fixture ( 'users' ). as ( 'userData' )
homePage = new HomePage ()
navbar = new Navbar ()
checkout = new Checkout ()
cy . visit ( '/' )
cy . get ( '@userData' ). then (( user : any ) => {
loginPage . userLogin ( user . standard , user . password )
})
homePage . verifyHomePageIsVisible ()
})
it ( 'Should navigate to cart and verify products' , () => {
homePage . addAllProductsToCart ()
navbar . clickOnCheckoutIcon ()
checkout . verifyCartPageIsVisible ()
checkout . verifyAllProductsWereAddedToCart ()
})
})
Usage Patterns
Pattern 1: Logout After Test
it ( 'Test with logout' , () => {
// Perform test actions
homePage . verifyHomePageIsVisible ()
// Logout at end
navbar . userLogout ()
loginPage . verifyLoginMainPage ()
})
Pattern 2: Cart Access
it ( 'Test cart functionality' , () => {
// Add items to cart
homePage . addProductToCart ( 0 )
// Navigate to cart
navbar . clickOnCheckoutIcon ()
// Verify cart contents
checkout . verifyCartPageIsVisible ()
})
Pattern 3: Multi-User Testing
it ( 'Should handle multiple user logins' , () => {
// Login as first user
loginPage . userLogin ( user . standard , user . password )
homePage . verifyHomePageIsVisible ()
// Logout
navbar . userLogout ()
// Login as different user
loginPage . userLogin ( user . visual , user . password )
homePage . verifyHomePageIsVisible ()
// Logout
navbar . userLogout ()
})
Component vs Page Object
Key Differences
Aspect Navbar (Component) Page Objects Extends BasePage No Yes Scope Reusable navigation element Full page interactions Visibility Present across multiple pages Single page context Inheritance Standalone class Inherits from BasePage
When to Use
Use Navbar when:
Logging out users
Navigating to the shopping cart
Accessing sidebar menu items
Use Page Objects when:
Interacting with page-specific elements
Performing page-specific validations
Working with page-specific workflows
Related Pages
LoginPage Navigate here after logout
HomePage Use navbar for logout and cart access
Checkout Navigate here via cart icon