upskill-event-manager/wordpress-dev/tests/e2e/pages/ProfilePage.ts

140 lines
No EOL
4.6 KiB
TypeScript

import { Page, Locator, expect } from '@playwright/test';
import { BasePage } from './BasePage';
/**
* Page object representing the Trainer Profile page
*/
export class ProfilePage extends BasePage {
// Page elements
readonly pageTitle: Locator;
readonly personalInfoSection: Locator;
readonly businessInfoSection: Locator;
readonly trainingInfoSection: Locator;
readonly statisticsSection: Locator;
readonly editProfileButton: Locator;
readonly dashboardLink: Locator;
readonly createEventLink: Locator;
readonly myEventsLink: Locator;
readonly logoutLink: Locator;
constructor(page: Page) {
super(page);
this.pageUrl = '/trainer-profile/';
// Initialize locators
this.pageTitle = page.locator('h1:has-text("Trainer Profile")');
this.personalInfoSection = page.locator('section.hvac-profile-section:has(h2:text("Personal Information"))');
this.businessInfoSection = page.locator('section.hvac-profile-section:has(h2:text("Business Information"))');
this.trainingInfoSection = page.locator('section.hvac-profile-section:has(h2:text("Training Information"))');
this.statisticsSection = page.locator('section.hvac-profile-section:has(h2:text("Training Statistics"))');
this.editProfileButton = page.locator('a:has-text("Edit Profile")');
this.dashboardLink = page.locator('a[href*="/hvac-dashboard/"]');
this.createEventLink = page.locator('a[href*="/manage-event/"]');
this.myEventsLink = page.locator('a[href*="/my-events/"]');
this.logoutLink = page.locator('a:has-text("Logout")');
}
/**
* Navigate to the profile page
*/
async navigate() {
await super.navigate();
await this.page.waitForLoadState('networkidle');
await expect(this.pageTitle).toBeVisible();
}
/**
* Verify all sections are present
*/
async verifyAllSectionsPresent() {
await expect(this.personalInfoSection).toBeVisible();
await expect(this.businessInfoSection).toBeVisible();
await expect(this.trainingInfoSection).toBeVisible();
await expect(this.statisticsSection).toBeVisible();
}
/**
* Get personal information
*/
async getPersonalInfo() {
const displayName = await this.personalInfoSection.locator('h3').textContent();
const email = await this.personalInfoSection.locator('p:has-text("Email:")').textContent();
return {
displayName: displayName?.trim(),
email: email?.trim().replace('Email:', '').trim(),
};
}
/**
* Get business information
*/
async getBusinessInfo() {
const businessName = await this.businessInfoSection.locator('h3').textContent();
const businessType = await this.businessInfoSection.locator('p:has-text("Type:")').textContent();
return {
businessName: businessName?.trim(),
businessType: businessType?.trim().replace('Type:', '').trim(),
};
}
/**
* Get training statistics
*/
async getTrainingStats() {
const totalEvents = await this.statisticsSection.locator('.hvac-stat-card:has(h3:text("Total Events")) .metric-value').textContent();
const upcomingEvents = await this.statisticsSection.locator('.hvac-stat-card:has(h3:text("Upcoming Events")) .metric-value').textContent();
const pastEvents = await this.statisticsSection.locator('.hvac-stat-card:has(h3:text("Past Events")) .metric-value').textContent();
const ticketsSold = await this.statisticsSection.locator('.hvac-stat-card:has(h3:text("Tickets Sold")) .metric-value').textContent();
const totalRevenue = await this.statisticsSection.locator('.hvac-stat-card:has(h3:text("Total Revenue")) .metric-value').textContent();
return {
totalEvents: totalEvents?.trim(),
upcomingEvents: upcomingEvents?.trim(),
pastEvents: pastEvents?.trim(),
ticketsSold: ticketsSold?.trim(),
totalRevenue: totalRevenue?.trim(),
};
}
/**
* Click Edit Profile button
*/
async clickEditProfile() {
await this.editProfileButton.click();
await this.page.waitForLoadState('networkidle');
}
/**
* Navigate to dashboard
*/
async goToDashboard() {
await this.dashboardLink.click();
await this.page.waitForLoadState('networkidle');
}
/**
* Navigate to create event page
*/
async goToCreateEvent() {
await this.createEventLink.click();
await this.page.waitForLoadState('networkidle');
}
/**
* Navigate to my events page
*/
async goToMyEvents() {
await this.myEventsLink.click();
await this.page.waitForLoadState('networkidle');
}
/**
* Logout the user
*/
async logout() {
await this.logoutLink.click();
await this.page.waitForLoadState('networkidle');
}
}