DigitalConsumer.FixMyGlass/playwright-tests/pages/PolicyVehiclesPage.ts
maguire-arman a2ca9134d1 Initializes Playwright test framework
Sets up the core infrastructure for Playwright-based automated testing, including:
- Docker support for consistent environments
- Azure Pipelines configuration for CI/CD
- Page Object Model structure for maintainable tests
- Test data, validation, and rule engine implementation
- Test configuration for alerts and other scenarios
2025-05-08 15:45:05 -04:00

56 lines
No EOL
2.2 KiB
TypeScript

import { expect, type Locator, type Page } from '@playwright/test';
import { IVehicleDetails } from '@business-logic/types/CustomerDetails';
import { InsuranceBasePage } from './InsuranceBasePage';
import { ITestData } from '@business-logic/types/ITestData';
import { step } from '@business-logic/types/Step';
export class PolicyVehiclesPage extends InsuranceBasePage {
readonly page: Page;
url = process.env['BASE_URL']! + '/FixMyGlass/PolicyVehicle.aspx';
constructor(page: Page) {
super(page);
this.page = page;
// this.validateURL(this.url);
}
async validateVehicleIsOnPolicy(vehicleDetails: IVehicleDetails) {
const vehicleRegExp = new RegExp(`${vehicleDetails.year} .+ ${vehicleDetails.model}`, 'i');
await expect.soft(this.page.getByRole('radio', {name: vehicleRegExp})).toBeAttached();
}
async selectVehicle(vehicleDetails: IVehicleDetails){
const baseModel = vehicleDetails.model.split(' ').pop() || vehicleDetails.model;
const vehicleRegExp = new RegExp(`${vehicleDetails.year}.*?${vehicleDetails.make}.*?${baseModel}`, 'i');
await this.page.getByRole('radio', {name: vehicleRegExp}).click();
}
async selectVehicleNotListed(){
await this.page.getByText('Vehicle not listed').click();
}
@step("PolicyVehiclesPage >> Select Vehicle: ")
async handlePolicyVehiclesPage(testCase: Partial<ITestData>) {
const { vehicleDetails, otherVehiclesOnPolicy, isUseVehicleOnPolicy } = testCase;
// Validate other vehicles on policy
if (otherVehiclesOnPolicy && otherVehiclesOnPolicy.length > 0) {
for (const vehicle of otherVehiclesOnPolicy) {
await this.validateVehicleIsOnPolicy(vehicle);
}
}
// If vehicle is not on the policy, select new vehicle
if (!(isUseVehicleOnPolicy ?? true)) {
await this.selectVehicleNotListed();
await this.nextPage();
await this.selectVehicle(vehicleDetails!);
await this.nextPage();
} else {
// Otherwise, select the vehicle entered in Safelite.com
await this.selectVehicle(vehicleDetails!);
await this.nextPage();
}
}
}