Initial commit: added Playwright tests

This commit is contained in:
Vlad Smykov
2025-06-16 13:32:08 +03:00
commit 2b3ac01274
14 changed files with 1044 additions and 0 deletions

18
tests/example.spec.ts Normal file
View File

@@ -0,0 +1,18 @@
import { test, expect } from '@playwright/test';
test('has title', async ({ page }) => {
await page.goto('https://playwright.dev/');
// Expect a title "to contain" a substring.
await expect(page).toHaveTitle(/Playwright/);
});
test('get started link', async ({ page }) => {
await page.goto('https://playwright.dev/');
// Click the get started link.
await page.getByRole('link', { name: 'Get started' }).click();
// Expects page to have a heading with the name of Installation.
await expect(page.getByRole('heading', { name: 'Installation' })).toBeVisible();
});

View File

@@ -0,0 +1,26 @@
import { test, expect } from '@playwright/test';
import { LoginPage } from '../../../page-objects/LoginPage';
test.describe('Переходы по ссылкам в разделе авторизации', () => {
test('Переход по ссылке "Забыли пароль?"', async ({ page }) => {
const loginPage = new LoginPage(page);
await loginPage.goto();
await loginPage.forgotPasswordLink.click();
await expect(page).toHaveURL('https://ssas.dev.rdcenter.ru/recoverpassword');
await expect(page.getByRole('heading', { name: 'Забыли пароль?' })).toBeVisible();
});
test('Переход по ссылке "Зарегистрируйтесь"', async ({ page }) => {
const loginPage = new LoginPage(page);
await loginPage.goto();
await loginPage.goToRegisterPage();
await expect(page).toHaveURL('https://ssas.dev.rdcenter.ru/login/registration');
await expect(
page.locator('div.Register_LoginTitle__vKsAB p', { hasText: 'Добро пожаловать' })
).toBeVisible();
});
});

View File

@@ -0,0 +1,68 @@
import { test, expect } from '@playwright/test';
import { LoginPage } from '../../../page-objects/LoginPage';
import { users, loginErrors } from '../../../utils/test-data';
test.describe('Негативные сценарии авторизации', () => {
test('Неверный пароль', async ({ page }) => {
const loginPage = new LoginPage(page);
await loginPage.goto();
await loginPage.login(users.valid.email, users.invalid.wrongPassword);
const passwordError = page.locator('div[name="error"]', { hasText: loginErrors.wrongPassword });
await expect(passwordError).toBeVisible();
});
test('Несуществующий email', async ({ page }) => {
const loginPage = new LoginPage(page);
await loginPage.goto();
await loginPage.login(users.invalid.wrongEmail, 'anyPassword123');
const loginError = page.locator('div[name="error"]', { hasText: loginErrors.wrongLogin });
await expect(loginError).toBeVisible();
});
test('Оба поля пустые', async ({ page }) => {
const loginPage = new LoginPage(page);
await loginPage.goto();
await loginPage.login(users.invalid.emptyEmail, users.invalid.emptyPassword);
await expect(page.locator('div[name="error"]', { hasText: loginErrors.emptyEmail })).toBeVisible();
await expect(page.locator('div[name="error"]', { hasText: loginErrors.emptyPassword })).toBeVisible();
});
test('Только email без пароля', async ({ page }) => {
const loginPage = new LoginPage(page);
await loginPage.goto();
await loginPage.login(users.valid.email, users.invalid.emptyPassword);
await expect(page.locator('div[name="error"]', { hasText: loginErrors.emptyPassword })).toBeVisible();
});
test('Некорректный формат email', async ({ page }) => {
const loginPage = new LoginPage(page);
await loginPage.goto();
await loginPage.emailInput.fill(users.invalid.malformedEmail);
await loginPage.passwordInput.fill('anyPassword123');
await loginPage.loginButton.click();
const emailFormatError = page.locator('div[name="error"]', { hasText: loginErrors.malformedEmail });
await expect(emailFormatError).toBeVisible();
});
test('Регистр в email (User@test.com ≠ user@test.com)', async ({ page }) => {
const loginPage = new LoginPage(page);
await loginPage.goto();
await loginPage.login(users.invalid.upperCaseEmail, users.valid.password);
const loginError = page.locator('div[name="error"]', { hasText: loginErrors.wrongLogin });
await expect(loginError).toBeVisible();
});
});

View File

@@ -0,0 +1,23 @@
import { test, expect } from '@playwright/test';
import { LoginPage } from '../../../page-objects/LoginPage';
import { users } from '../../../utils/test-data'; // ✅ импорт test-data
test.describe('Авторизация пользователя', () => {
test('Пользователь должен успешно залогиниться с валидными данными', async ({ page }) => {
const loginPage = new LoginPage(page);
// ✅ используем test-data
const userEmail = users.valid.email;
const userPassword = users.valid.password;
await loginPage.goto();
await loginPage.login(userEmail, userPassword);
await expect(page).toHaveURL('/');
const welcomeHeader = page.locator('#top').getByText('Всероссийская научная конференция "Системный синтез и прикладная синергетика"');
await expect(welcomeHeader).toBeVisible({ timeout: 10000 });
});
});

View File

@@ -0,0 +1,22 @@
import { test, expect } from '@playwright/test';
import { LoginPage } from '../../../page-objects/LoginPage';
import { users } from '../../../utils/test-data'; // ✅ импорт test-data
test.describe('UI сценарии авторизации', () => {
test('Переключатель видимости пароля показывает и скрывает ввод', async ({ page }) => {
const loginPage = new LoginPage(page);
await loginPage.goto();
// ✅ используем пароль из test-data
await loginPage.passwordInput.fill(users.valid.password);
await expect(await loginPage.passwordInput.getAttribute('type')).toBe('password');
await loginPage.passwordVisibilityToggle.click();
await expect(await loginPage.passwordInput.getAttribute('type')).toBe('text');
await loginPage.passwordVisibilityToggle.click();
await expect(await loginPage.passwordInput.getAttribute('type')).toBe('password');
});
});

View File

@@ -0,0 +1,33 @@
import { test, expect } from '@playwright/test';
import { RecoverPage } from '../../../page-objects/RecoverPage';
import { users, recovery } from '../../../utils/test-data';
test.describe('Восстановление пароля — позитивные сценарии', () => {
test('Пользователь успешно восстанавливает пароль', async ({ page }) => {
const recoverPage = new RecoverPage(page);
const email = recovery.emailExists;
const verificationCode = recovery.verificationCode;
const newPassword = users.newPassword.password;
// 1. Переход на страницу восстановления
await recoverPage.goto();
// 2. Ввод email
await recoverPage.enterEmail(email);
await expect(page).toHaveURL(/\/recoverpassword\/checkemail/);
// 3. Ввод 6-значного кода
await recoverPage.enterVerificationCode(verificationCode);
// 4. Ввод нового пароля
await expect(recoverPage.newPasswordInput).toBeVisible();
await recoverPage.enterNewPassword(newPassword, newPassword);
// 5. Ожидаем редирект на страницу авторизации
await expect(page).toHaveURL('/login/authorization');
await expect(page.getByRole('button', { name: 'Войти', exact: true })).toBeVisible();
});
});