DigitalConsumer.FixMyGlass/playwright-tests/pages/InsuranceCompanyPage.ts
Scott Kiener de2f501773 Revert "Merge pull request #2458 from Safelite/feature/CASH-530"
This reverts commit dafc79cd64, reversing
changes made to 8ae73d4b6b.
2025-04-30 10:01:27 -04:00

47 lines
No EOL
1.9 KiB
TypeScript

import { type Locator, type Page } from '@playwright/test';
import { BasePage } from './BasePage';
import { IClaimDetails } from '@business-logic/types/CustomerDetails';
export class InsuranceCompanyPage extends BasePage {
readonly page: Page;
readonly insuranceInputBox: Locator;
readonly payOnMyOwnLink: Locator;
url = process.env['BASE_URL']! + '/fmg/?fmgPage=insurance-company';
constructor(page: Page) {
super(page);
this.page = page;
this.insuranceInputBox = this.page.getByRole('textbox', { name: 'Enter your insurance company' });
this.payOnMyOwnLink = this.page.getByRole('link', { name: 'Pay on my own' });
// this.validateURL(this.url);
}
async enterInsuranceCompany(company: string): Promise<void> {
await this.insuranceInputBox.fill(company);
try {
// First attempt: Try to find and click an exact match
await this.page.getByText(company, { exact: true })
.locator('xpath=ancestor::div[contains(@class, "ui-menu-item-wrapper")]')
.click({ timeout: 2000 }); // Short timeout for quick fallback
} catch (error) {
// Fallback: If exact match fails, select the first option containing the text
const options = this.page.locator('div.ui-menu-item-wrapper', { hasText: company });
const count = await options.count();
if (count === 0) {
throw new Error(`No insurance company options found containing "${company}"`);
} else if (count === 1) {
// If only one option, click it
await options.click();
} else {
// If multiple options, click the first one
await options.first().click();
console.log(`Selected first match for "${company}" from ${count} options`);
}
}
}
}