// page-objects/ProfileApplicantPage.ts import { Page } from '@playwright/test'; export class ProfileApplicantPage { readonly page: Page; constructor(page: Page) { this.page = page; } async goto() { await this.page.goto('/account/profile'); } // Профиль async openBasicInfoEditor() { await this.page.getByTestId('btn-pensil').nth(0).click(); } async uploadAvatar(filePath: string) { const [fileChooser] = await Promise.all([ this.page.waitForEvent('filechooser'), this.page.getByTestId('ModalUserInfo').getByTestId('btn-pensil').first().click(), ]); await fileChooser.setFiles(filePath); } async fillCity(city: string) { await this.page.fill('input[name="city"]', city); } async saveBasicInfo() { await this.page.getByTestId('btn-save').click(); } async openRepresentativeEditor() { await this.page.getByTestId('btn-pensil').nth(1).click(); } async fillRepresentative(from: string, fullName: string, phone: string) { await this.page.fill('input[name="parents.0.from"]', from); await this.page.fill('input[name="parents.0.fio"]', fullName); await this.page.fill('input[name="parents.0.phone"]', phone); } async saveRepresentative() { await this.page.locator('button:has-text("Сохранить")').click(); } async openDisabilityEditor() { await this.page.getByTestId('btn-pensil').nth(2).click(); } async selectDisability(disability: string) { await this.page.getByText(disability).click(); } async selectDisabilityGroup(group: string) { await this.page.getByText(group).first().click(); } async saveDisabilityInfo() { await this.page.locator('button:has-text("Сохранить")').click(); } //Тесты async openTestsPage() { await this.page.getByRole('main').getByText('Тесты').click() await this.page.getByText('Тест для позитивного сценария Playwright', { exact: true }).scrollIntoViewIfNeeded(); await this.page.getByRole('button', { name: 'Пройти тест' }).first().click(); await this.page.getByRole('button', { name: 'Начать тест' }).click(); await this.page.locator('.Checkmark_checkmark__58fWm').first().click(); await this.page.getByRole('button', { name: 'next' }).click(); await this.page.locator('.swiper-slide.swiper-slide-active > .Questions_slide__-Yhoj > #questionItem >' + '.Question_answers__xra74 > #answer > #checkmark > .Checkmark_checkmark__58fWm').click(); await this.page.getByRole('button', { name: 'Завершить тест' }).click(); await this.page.getByRole('button', { name: 'К тестам' }).click(); } //Портфолио async openPortfolioPage() { await this.page.getByRole('main').getByRole('listitem').filter({ hasText: 'Портфолио' }).click(); } //Достижения async clickAchievementButton() { await this.page.locator('button').filter({ hasText: /^\+ Добавить$/ }).click(); } async fillAchievementInfo() { await this.page.getByRole('textbox', { name: 'Полное название' }).fill('Тестовое достижение'); await this.page.getByRole('textbox', { name: 'Не выбран' }).click(); await this.page.locator('#modal-main').getByText('2026', { exact: true }).first().click(); } async uploadAchievement(filePath: string) { const [fileChooser] = await Promise.all([ this.page.waitForEvent('filechooser'), await this.page.getByText('Загрузите сертификат').click() ]); await fileChooser.setFiles(filePath); } async clickAchievementSaveButton() { await this.page.getByTestId('btn-save').click(); } //Образование async clickEducationButton() { await this.page.locator('section').filter({ hasText: 'Образование' }).getByRole('button').click(); } async fillEducationInfo() { await this.page.getByRole('textbox', { name: 'Учебное заведение' }).fill('Тестовое заведение'); await this.page.getByRole('textbox', { name: 'Название специальности' }).fill('Тестовая специальность'); await this.page.locator('#yearStart').click(); await this.page.getByText('2020').click(); await this.page.locator('.Checkmark_checkmark__58fWm').click(); await this.page.locator('#yearEnd').click(); await this.page.locator('#scroll').getByText('2026').click(); await this.page.getByRole('textbox', { name: 'Очное' }).click(); await this.page.getByText('Очная', { exact: true }).click(); await this.page.getByRole('textbox', { name: 'Бюджет' }).click(); await this.page.getByText('Бюджет', { exact: true }).click(); await this.page.locator('#educationLevel').click(); await this.page.getByText('Бакалавриат').click(); } async uploadEducation(filePath: string) { const [fileChooser] = await Promise.all([ this.page.waitForEvent('filechooser'), await this.page.getByText('Загрузите документ об образовании').click() ]); await fileChooser.setFiles(filePath); } async clickEducationSaveButton() { await this.page.getByRole('button', { name: 'Сохранить' }).click(); } //Опыт работы async clickWorkExpButton() { await this.page.locator('section').filter({ hasText: 'Опыт работы + Добавить' }).getByRole('button').click(); } async fillWorkExpInfo() { await this.page.getByRole('textbox', { name: 'Полное название' }).fill('Тестовое название компании'); await this.page.getByRole('textbox', { name: 'Название должности' }).fill('Тестовая должность'); await this.page.getByRole('textbox', { name: 'Не выбрано' }).click(); await this.page.getByRole('textbox', { name: 'Не выбрано' }).fill('программист'); await this.page.getByRole('heading', { name: 'Связь, информационные и коммуникационные технологии' }).click(); await this.page.getByText('Программист', { exact: true }).click(); await this.page.getByRole('textbox', { name: 'Описание' }).fill('Тестовое описание опыта работы'); await this.page.getByRole('textbox', { name: '01.01.1999' }).fill('01.01.2020'); } async uploadWorkExp(filePath: string) { const [fileChooser] = await Promise.all([ this.page.waitForEvent('filechooser'), await this.page.getByText('Загрузить подтверждающий документ').click() ]); await fileChooser.setFiles(filePath); } async clickWorkExpSaveButton() { await this.page.getByRole('button', { name: 'Сохранить' }).click(); } //Дополнительные ссылки async clickAdditionalLinksButton() { await this.page.getByTestId('btn-pensil').click(); await this.page.getByRole('button', { name: 'plusIcon Добавить' }).click(); } async fillAdditionalLinksInfo() { await this.page.getByRole('textbox', { name: 'Название' }).fill('Тестовая платформа'); await this.page.getByRole('textbox', { name: 'Вставьте ссылку' }).fill('https://github.com/vsmykov'); } async clickAdditionalLinksSaveButton() { await this.page.getByRole('button', { name: 'Сохранить' }).click(); } }