import { type Page, type Locator } from '@playwright/test'; export class RecoverPage { readonly page: Page; // Этап 1: Ввод email readonly emailInput: Locator; readonly continueButton: Locator; readonly continueButton2: Locator; // Этап 2: Ввод кода readonly codeInputs: Locator; readonly resendButton: Locator; // Этап 3: Ввод нового пароля readonly newPasswordInput: Locator; readonly repeatPasswordInput: Locator; readonly submitPasswordButton: Locator; // --- Ошибки --- readonly emailFormatError: Locator; readonly codeError: Locator; readonly passwordError: Locator; readonly passwordRepeatError: Locator; readonly mismatchPasswordError: Locator; constructor(page: Page) { this.page = page; // Этап 1 this.emailInput = page.getByPlaceholder('Email'); this.continueButton = page.getByRole('button', { name: 'Далее' }); // Этап 2 this.codeInputs = page.locator('input[type="text"]'); // предполагаем, 6 полей или одно поле с 6 символами this.resendButton = page.getByRole('button', { name: 'Отправить код повторно' }); // Этап 3 this.newPasswordInput = page.getByPlaceholder('Придумайте пароль'); this.repeatPasswordInput = page.getByPlaceholder('Повторите пароль'); this.submitPasswordButton = page.getByRole('button', { name: 'Продолжить' }); this.continueButton2 = page.getByRole('button', { name: 'Продолжить' }); // Ошибки this.emailFormatError = page.getByText('Некорректный email*', { exact: true }); this.codeError = page.getByText('Ошибка подтверждения', { exact: true }); this.passwordError = page.getByText('Некорректный пароль', { exact: true }); this.passwordRepeatError = page.getByText('Поле обязательно для заполнения', { exact: true }); this.mismatchPasswordError = page.getByText('Пароли не совпадают', { exact: true }); } async goto() { await this.page.goto('/recoverpassword'); } async enterEmail(email: string) { await this.emailInput.fill(email); await this.continueButton.click(); } async enterVerificationCode(code: string) { // Если это один input — просто заполни его if (await this.codeInputs.count() === 1) { await this.codeInputs.first().fill(code); } else { // Если 6 отдельных инпутов, разделяем for (let i = 0; i < code.length; i++) { await this.codeInputs.nth(i).fill(code[i]); } } await this.continueButton2.click(); } async resendCode() { await this.resendButton.click(); } async enterNewPassword(password: string, repeat: string) { await this.newPasswordInput.fill(password); await this.repeatPasswordInput.fill(repeat); await this.submitPasswordButton.click(); } }