import { expect, type Locator, type Page } from '@playwright/test'; import { BasePage } from './BasePage'; import { IPartQuestion } from 'safelite-playwright-core'; import { step } from 'framework/localTypes/Step'; import { ITestData } from 'framework/TestData'; import { ProgressBarPercentages } from 'framework/localTypes/Enums'; export class PartQuestionsPage extends BasePage { readonly page: Page; constructor(page: Page) { super(page); this.page = page; } async getLocalStorage() { // Retrieve local storage entries const localStorageData = await this.page.evaluate(() => { const data: Record = {}; for (let i = 0; i < localStorage.length; i++) { const key = localStorage.key(i); if (key) { data[key] = localStorage.getItem(key) || ''; } } return data; }); console.log('Local Storage Data:', localStorageData); return localStorageData; } async saveStorageState(filePath: string) { // Save the current browser context's storage state await this.page.context().storageState({ path: filePath }); console.log(`Storage state saved to ${filePath}`); } async validatePartQuestions(partQuestions: IPartQuestion[]) { for (const pq of partQuestions) { const partQuestionOptions = this.page.locator(`fieldset[aria-labelledby="${pq.partQuestionType}"]`); if (pq.isOnPage) { await expect(partQuestionOptions).toBeAttached(); } else { await expect(partQuestionOptions).not.toBeAttached(); } await this.selectPartQuestionResponses(partQuestions!); } } async selectPartQuestionResponses(partQuestions: IPartQuestion[]) { for (const pq of partQuestions) { const parentobject=this.page.locator(`fieldset[aria-labelledby="${pq.partQuestionType}"]`); const partQuestionOptionButton = parentobject.locator(`[buttonlabel="${pq.optionToSelect}"]`); await partQuestionOptionButton.click(); if (pq.secondaryQuestionOptionToSelect != null) { const secondaryQuestionButton = parentobject.getByText(`${pq.secondaryQuestionOptionToSelect}`); await secondaryQuestionButton.click(); } } } @step("PartQuestionsPage >> Select Vehicle Part Question Responses") async handlePartQuestionsPage(testData: Partial) { const { partQuestions } = testData; await this.validateProgressBar(ProgressBarPercentages.PartQuestionsPage); await this.validatePartQuestions(partQuestions!); await this.nextPage(); } }