Initial commit: added Playwright tests
This commit is contained in:
18
tests/example.spec.ts
Normal file
18
tests/example.spec.ts
Normal 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();
|
||||
});
|
||||
26
tests/ui/login/login.link.spec.ts
Normal file
26
tests/ui/login/login.link.spec.ts
Normal 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();
|
||||
|
||||
});
|
||||
});
|
||||
68
tests/ui/login/login.negative.spec.ts
Normal file
68
tests/ui/login/login.negative.spec.ts
Normal 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();
|
||||
});
|
||||
|
||||
});
|
||||
23
tests/ui/login/login.spec.ts
Normal file
23
tests/ui/login/login.spec.ts
Normal 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 });
|
||||
});
|
||||
|
||||
});
|
||||
22
tests/ui/login/login.ui.spec.ts
Normal file
22
tests/ui/login/login.ui.spec.ts
Normal 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');
|
||||
});
|
||||
|
||||
});
|
||||
33
tests/ui/recovery/recover-password.spec.ts
Normal file
33
tests/ui/recovery/recover-password.spec.ts
Normal 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();
|
||||
});
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user