84 lines
3.0 KiB
TypeScript
84 lines
3.0 KiB
TypeScript
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();
|
||
}
|
||
}
|