diff --git a/test-framework/shared/pages/AboutPage.ts b/test-framework/shared/pages/AboutPage.ts new file mode 100644 index 0000000..5292a89 --- /dev/null +++ b/test-framework/shared/pages/AboutPage.ts @@ -0,0 +1,18 @@ +import { Page } from '@playwright/test'; +import { BasePage } from './BasePage'; +import { getPageConfig } from '../config/test-pages'; + +export class AboutPage extends BasePage { + constructor(page: Page, config?) { + const pageConfig = getPageConfig('about'); + super(page, pageConfig.url, config); + } + + async getPageTitle(): Promise { + return await this.getText('h1'); + } + + async getContent(): Promise { + return await this.getText('.about-content'); + } +} diff --git a/test-framework/shared/pages/CasesPage.ts b/test-framework/shared/pages/CasesPage.ts new file mode 100644 index 0000000..4dda6bc --- /dev/null +++ b/test-framework/shared/pages/CasesPage.ts @@ -0,0 +1,14 @@ +import { Page } from '@playwright/test'; +import { BasePage } from './BasePage'; +import { getPageConfig } from '../config/test-pages'; + +export class CasesPage extends BasePage { + constructor(page: Page, config?) { + const pageConfig = getPageConfig('cases'); + super(page, pageConfig.url, config); + } + + async getCaseCount(): Promise { + return await this.page.locator('.case-card').count(); + } +} diff --git a/test-framework/shared/pages/ContactPage.ts b/test-framework/shared/pages/ContactPage.ts new file mode 100644 index 0000000..e63e299 --- /dev/null +++ b/test-framework/shared/pages/ContactPage.ts @@ -0,0 +1,29 @@ +import { Page } from '@playwright/test'; +import { BasePage } from './BasePage'; +import { getPageConfig } from '../config/test-pages'; + +export class ContactPage extends BasePage { + constructor(page: Page, config?) { + const pageConfig = getPageConfig('contact'); + super(page, pageConfig.url, config); + } + + async fillContactForm(data: { name: string; email: string; phone: string; message: string }): Promise { + await this.fill('#name', data.name); + await this.fill('#email', data.email); + await this.fill('#phone', data.phone); + await this.fill('#message', data.message); + } + + async submitForm(): Promise { + await this.click('button[type="submit"]'); + } + + async getFormErrorMessage(): Promise { + return await this.getText('.error-message'); + } + + async getFormSuccessMessage(): Promise { + return await this.getText('.success-message'); + } +} diff --git a/test-framework/shared/pages/HomePage.ts b/test-framework/shared/pages/HomePage.ts new file mode 100644 index 0000000..b54f71d --- /dev/null +++ b/test-framework/shared/pages/HomePage.ts @@ -0,0 +1,33 @@ +import { Page } from '@playwright/test'; +import { BasePage } from './BasePage'; +import { getPageConfig } from '../config/test-pages'; + +export class HomePage extends BasePage { + constructor(page: Page, config?) { + const pageConfig = getPageConfig('home'); + super(page, pageConfig.url, config); + this.pageConfig = pageConfig; + } + + private pageConfig; + + async getHeroTitle(): Promise { + return await this.getText('h1'); + } + + async getFeaturesSection(): Promise { + return await this.isVisible('.features-section'); + } + + async navigateToAbout(): Promise { + await this.click('a[href="/about"]'); + } + + async navigateToContact(): Promise { + await this.click('a[href="/contact"]'); + } + + async navigateToProducts(): Promise { + await this.click('a[href="/products"]'); + } +} diff --git a/test-framework/shared/pages/NewsPage.ts b/test-framework/shared/pages/NewsPage.ts new file mode 100644 index 0000000..c11d812 --- /dev/null +++ b/test-framework/shared/pages/NewsPage.ts @@ -0,0 +1,14 @@ +import { Page } from '@playwright/test'; +import { BasePage } from './BasePage'; +import { getPageConfig } from '../config/test-pages'; + +export class NewsPage extends BasePage { + constructor(page: Page, config?) { + const pageConfig = getPageConfig('news'); + super(page, pageConfig.url, config); + } + + async getNewsCount(): Promise { + return await this.page.locator('.news-item').count(); + } +} diff --git a/test-framework/shared/pages/ProductsPage.ts b/test-framework/shared/pages/ProductsPage.ts new file mode 100644 index 0000000..0cbbf33 --- /dev/null +++ b/test-framework/shared/pages/ProductsPage.ts @@ -0,0 +1,18 @@ +import { Page } from '@playwright/test'; +import { BasePage } from './BasePage'; +import { getPageConfig } from '../config/test-pages'; + +export class ProductsPage extends BasePage { + constructor(page: Page, config?) { + const pageConfig = getPageConfig('products'); + super(page, pageConfig.url, config); + } + + async getProductCount(): Promise { + return await this.page.locator('.product-card').count(); + } + + async getProductTitle(index: number): Promise { + return await this.getText(`.product-card:nth-child(${index + 1}) h3`); + } +} diff --git a/test-framework/shared/pages/ServicesPage.ts b/test-framework/shared/pages/ServicesPage.ts new file mode 100644 index 0000000..c0978ea --- /dev/null +++ b/test-framework/shared/pages/ServicesPage.ts @@ -0,0 +1,14 @@ +import { Page } from '@playwright/test'; +import { BasePage } from './BasePage'; +import { getPageConfig } from '../config/test-pages'; + +export class ServicesPage extends BasePage { + constructor(page: Page, config?) { + const pageConfig = getPageConfig('services'); + super(page, pageConfig.url, config); + } + + async getServiceCount(): Promise { + return await this.page.locator('.service-item').count(); + } +} diff --git a/test-framework/shared/pages/index.ts b/test-framework/shared/pages/index.ts new file mode 100644 index 0000000..97b1bb9 --- /dev/null +++ b/test-framework/shared/pages/index.ts @@ -0,0 +1,8 @@ +export { BasePage } from './BasePage'; +export { HomePage } from './HomePage'; +export { AboutPage } from './AboutPage'; +export { ContactPage } from './ContactPage'; +export { ProductsPage } from './ProductsPage'; +export { ServicesPage } from './ServicesPage'; +export { CasesPage } from './CasesPage'; +export { NewsPage } from './NewsPage';