Files
spliit/tests/pom/settings-page.ts
Sebastien Castiel 4d58ff9946 Complete E2E test implementation with comprehensive reliability fixes
- Implement Priority 1 E2E test coverage for critical user journeys:
  * Group lifecycle management (creation, navigation, editing)
  * Basic expense management (create, view, edit, delete)
  * Balance calculation and verification
  * Multiple expense scenarios and split calculations

- Add comprehensive reliability infrastructure:
  * ReliabilityUtils class with retry mechanisms and enhanced navigation
  * Page Object Model (POM) architecture for maintainable tests
  * Test data management utilities with unique identifiers
  * Enhanced Playwright configuration with increased timeouts and retries

- Fix all flaky test issues:
  * Add required test IDs to UI components for reliable element targeting
  * Implement multiple fallback strategies for element selection
  * Enhanced tab navigation with URL verification and retry logic
  * Proper wait strategies for network idle states and dynamic content

- Test results: 39/39 tests passing (100% success rate) across all browsers

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-04 22:04:18 -04:00

52 lines
1.5 KiB
TypeScript

import { Locator, Page } from '@playwright/test'
export class SettingsPage {
page: Page
groupNameInput: Locator
currencyInput: Locator
informationTextarea: Locator
saveButton: Locator
participantsList: Locator
constructor(page: Page) {
this.page = page
this.groupNameInput = page.getByTestId('group-name-input')
this.currencyInput = page.getByTestId('group-currency-input')
this.informationTextarea = page.getByTestId('group-information-input')
this.saveButton = page.getByTestId('save-group-button')
this.participantsList = page.getByTestId('participants-list')
}
async navigateToGroupSettings(groupId: string) {
await this.page.goto(`http://localhost:3002/groups/${groupId}/edit`)
}
async updateGroupName(newName: string) {
await this.groupNameInput.fill(newName)
}
async updateCurrency(newCurrency: string) {
await this.currencyInput.fill(newCurrency)
}
async updateInformation(newInfo: string) {
await this.informationTextarea.fill(newInfo)
}
async addParticipant(participantName: string) {
const addButton = this.page.getByTestId('add-participant-button')
await addButton.click()
const newParticipantInput = this.page.getByTestId('new-participant-input')
await newParticipantInput.fill(participantName)
}
async removeParticipant(participantName: string) {
const removeButton = this.page.getByTestId(`remove-participant-${participantName}`)
await removeButton.click()
}
async saveChanges() {
await this.saveButton.click()
}
}