Добавлен файл RegisterPage и позитивный сценарий register.spec
This commit is contained in:
@@ -0,0 +1,137 @@
|
||||
# Test info
|
||||
|
||||
- Name: Позитивные сценарии регистрации >> Успешная регистрация нового пользователя
|
||||
- Location: /Users/vladsmykov/Desktop/Work/AUTOTESTS/CCPC_playwright/tests/ui/registration/register.spec.ts:6:7
|
||||
|
||||
# Error details
|
||||
|
||||
```
|
||||
Error: Timed out 5000ms waiting for expect(locator).toHaveURL(expected)
|
||||
|
||||
Locator: locator(':root')
|
||||
Expected pattern: /\/login\/confirmLogin/
|
||||
Received string: "https://ssas.dev.rdcenter.ru/login/registration"
|
||||
Call log:
|
||||
- expect.toHaveURL with timeout 5000ms
|
||||
- waiting for locator(':root')
|
||||
9 × locator resolved to <html lang="en">…</html>
|
||||
- unexpected value "https://ssas.dev.rdcenter.ru/login/registration"
|
||||
|
||||
at /Users/vladsmykov/Desktop/Work/AUTOTESTS/CCPC_playwright/tests/ui/registration/register.spec.ts:30:24
|
||||
```
|
||||
|
||||
# Page snapshot
|
||||
|
||||
```yaml
|
||||
- main:
|
||||
- main:
|
||||
- button
|
||||
- button "Скрыть Close":
|
||||
- text: Скрыть
|
||||
- img "Close"
|
||||
- list:
|
||||
- listitem:
|
||||
- text: Главная
|
||||
- img "Arrow"
|
||||
- listitem:
|
||||
- text: Автору
|
||||
- img "Arrow"
|
||||
- listitem:
|
||||
- text: Новости
|
||||
- img "Arrow"
|
||||
- listitem:
|
||||
- text: Участники
|
||||
- img "Arrow"
|
||||
- listitem:
|
||||
- text: Оргкомитет
|
||||
- img "Arrow"
|
||||
- img "Logo"
|
||||
- paragraph: Добро пожаловать
|
||||
- paragraph: Зарегистрируйтесь, чтобы начать работу.
|
||||
- textbox "Имя*": Иван
|
||||
- text: Имя*
|
||||
- textbox "Фамилия*": Тестов
|
||||
- text: Фамилия*
|
||||
- textbox "Отчество": Александрович
|
||||
- text: Отчество
|
||||
- textbox "Учёное звание*": Доцент
|
||||
- img "img"
|
||||
- text: Учёное звание*
|
||||
- textbox "Учёная степень*": Кандидат наук
|
||||
- img "img"
|
||||
- text: Учёная степень*
|
||||
- textbox "Должность": Преподаватель
|
||||
- text: Должность
|
||||
- textbox "Организация*": ЮФУ
|
||||
- text: Организация*
|
||||
- textbox "Email (логин)*": autotest29704@example.com
|
||||
- text: Email (логин)*
|
||||
- textbox "Номер телефона*": +7 (987) 029-70-4
|
||||
- text: Некорректный номер
|
||||
- img "!"
|
||||
- img "показать пароль"
|
||||
- textbox "Придумайте пароль*": "!Test123"
|
||||
- text: Придумайте пароль*
|
||||
- img "показать пароль"
|
||||
- textbox "Повторите пароль*": "!Test123"
|
||||
- text: Повторите пароль*
|
||||
- paragraph: ИЛИ
|
||||
- button "Sfedu Logo Войти через аккаунт @sfedu":
|
||||
- img "Sfedu Logo"
|
||||
- text: Войти через аккаунт @sfedu
|
||||
- button "Зарегистрироваться"
|
||||
- paragraph: Уже есть аккаунт?
|
||||
- paragraph: Авторизируйтесь
|
||||
- paragraph: Всероссийская научная конференция "Системный синтез и прикладная синергетика"
|
||||
- paragraph
|
||||
- paragraph: "Напишите нам:"
|
||||
- paragraph:
|
||||
- text: "e-mail:"
|
||||
- link "ssas@ictis.sfedu.ru":
|
||||
- /url: mailto:ssas@ictis.sfedu.ru
|
||||
- text: Сайт разработан Центром исследований и разработки ИКТИБ
|
||||
- link "Ознакомиться с руководством пользователя":
|
||||
- /url: /static/media/user_manual.f1df94e2c5143919fb0d.pdf
|
||||
```
|
||||
|
||||
# Test source
|
||||
|
||||
```ts
|
||||
1 | import { test, expect } from '@playwright/test';
|
||||
2 | import { RegisterPage } from '../../../page-objects/RegisterPage';
|
||||
3 |
|
||||
4 | test.describe('Позитивные сценарии регистрации', () => {
|
||||
5 |
|
||||
6 | test('Успешная регистрация нового пользователя', async ({ page }) => {
|
||||
7 | const registerPage = new RegisterPage(page);
|
||||
8 | await registerPage.goto();
|
||||
9 |
|
||||
10 | // Генерация уникального email и телефона
|
||||
11 | const randomSuffix = Math.floor(Math.random() * 100000);
|
||||
12 | const uniqueEmail = `autotest${randomSuffix}@example.com`;
|
||||
13 | const uniquePhone = `+7987${randomSuffix.toString().padStart(6, '0')}`;
|
||||
14 |
|
||||
15 | await registerPage.register({
|
||||
16 | name: 'Иван',
|
||||
17 | surname: 'Тестов',
|
||||
18 | patronymic: 'Александрович',
|
||||
19 | academicTitle: 'Доцент',
|
||||
20 | degree: 'Кандидат наук',
|
||||
21 | position: 'Преподаватель',
|
||||
22 | organization: 'ЮФУ',
|
||||
23 | email: uniqueEmail,
|
||||
24 | phone: uniquePhone,
|
||||
25 | password: '!Test123',
|
||||
26 | confirmPassword: '!Test123'
|
||||
27 | });
|
||||
28 |
|
||||
29 | // Проверяем редирект на страницу подтверждения кода
|
||||
> 30 | await expect(page).toHaveURL(/\/login\/confirmLogin/);
|
||||
| ^ Error: Timed out 5000ms waiting for expect(locator).toHaveURL(expected)
|
||||
31 | await expect(page.locator('text=Подтвердите адрес электронной почты')).toBeVisible();
|
||||
32 |
|
||||
33 | });
|
||||
34 |
|
||||
35 | });
|
||||
36 |
|
||||
```
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,136 @@
|
||||
# Test info
|
||||
|
||||
- Name: Позитивные сценарии регистрации >> Успешная регистрация нового пользователя
|
||||
- Location: /Users/vladsmykov/Desktop/Work/AUTOTESTS/CCPC_playwright/tests/ui/registration/register.spec.ts:6:7
|
||||
|
||||
# Error details
|
||||
|
||||
```
|
||||
Error: Timed out 5000ms waiting for expect(locator).toHaveURL(expected)
|
||||
|
||||
Locator: locator(':root')
|
||||
Expected pattern: /\/login\/authorization/
|
||||
Received string: "https://ssas.dev.rdcenter.ru/login/registration"
|
||||
Call log:
|
||||
- expect.toHaveURL with timeout 5000ms
|
||||
- waiting for locator(':root')
|
||||
9 × locator resolved to <html lang="en">…</html>
|
||||
- unexpected value "https://ssas.dev.rdcenter.ru/login/registration"
|
||||
|
||||
at /Users/vladsmykov/Desktop/Work/AUTOTESTS/CCPC_playwright/tests/ui/registration/register.spec.ts:30:24
|
||||
```
|
||||
|
||||
# Page snapshot
|
||||
|
||||
```yaml
|
||||
- main:
|
||||
- main:
|
||||
- button
|
||||
- button "Скрыть Close":
|
||||
- text: Скрыть
|
||||
- img "Close"
|
||||
- list:
|
||||
- listitem:
|
||||
- text: Главная
|
||||
- img "Arrow"
|
||||
- listitem:
|
||||
- text: Автору
|
||||
- img "Arrow"
|
||||
- listitem:
|
||||
- text: Новости
|
||||
- img "Arrow"
|
||||
- listitem:
|
||||
- text: Участники
|
||||
- img "Arrow"
|
||||
- listitem:
|
||||
- text: Оргкомитет
|
||||
- img "Arrow"
|
||||
- img "Logo"
|
||||
- paragraph: Добро пожаловать
|
||||
- paragraph: Зарегистрируйтесь, чтобы начать работу.
|
||||
- textbox "Имя*": Иван
|
||||
- text: Имя*
|
||||
- textbox "Фамилия*": Тестов
|
||||
- text: Фамилия*
|
||||
- textbox "Отчество": Александрович
|
||||
- text: Отчество
|
||||
- textbox "Учёное звание*": Доцент
|
||||
- img "img"
|
||||
- text: Учёное звание*
|
||||
- textbox "Учёная степень*": Кандидат наук
|
||||
- img "img"
|
||||
- text: Учёная степень*
|
||||
- textbox "Должность": Преподаватель
|
||||
- text: Должность
|
||||
- textbox "Организация*": ЮФУ
|
||||
- text: Организация*
|
||||
- textbox "Email (логин)*": autotest7469@example.com
|
||||
- text: Email (логин)*
|
||||
- textbox "Номер телефона*": +7 (987) 007-46-9
|
||||
- text: Некорректный номер
|
||||
- img "!"
|
||||
- img "показать пароль"
|
||||
- textbox "Придумайте пароль*": "!Test123"
|
||||
- text: Придумайте пароль*
|
||||
- img "показать пароль"
|
||||
- textbox "Повторите пароль*": "!Test123"
|
||||
- text: Повторите пароль*
|
||||
- paragraph: ИЛИ
|
||||
- button "Sfedu Logo Войти через аккаунт @sfedu":
|
||||
- img "Sfedu Logo"
|
||||
- text: Войти через аккаунт @sfedu
|
||||
- button "Зарегистрироваться"
|
||||
- paragraph: Уже есть аккаунт?
|
||||
- paragraph: Авторизируйтесь
|
||||
- paragraph: Всероссийская научная конференция "Системный синтез и прикладная синергетика"
|
||||
- paragraph
|
||||
- paragraph: "Напишите нам:"
|
||||
- paragraph:
|
||||
- text: "e-mail:"
|
||||
- link "ssas@ictis.sfedu.ru":
|
||||
- /url: mailto:ssas@ictis.sfedu.ru
|
||||
- text: Сайт разработан Центром исследований и разработки ИКТИБ
|
||||
- link "Ознакомиться с руководством пользователя":
|
||||
- /url: /static/media/user_manual.f1df94e2c5143919fb0d.pdf
|
||||
```
|
||||
|
||||
# Test source
|
||||
|
||||
```ts
|
||||
1 | import { test, expect } from '@playwright/test';
|
||||
2 | import { RegisterPage } from '../../../page-objects/RegisterPage';
|
||||
3 |
|
||||
4 | test.describe('Позитивные сценарии регистрации', () => {
|
||||
5 |
|
||||
6 | test('Успешная регистрация нового пользователя', async ({ page }) => {
|
||||
7 | const registerPage = new RegisterPage(page);
|
||||
8 | await registerPage.goto();
|
||||
9 |
|
||||
10 | // Генерация уникального email и телефона
|
||||
11 | const randomSuffix = Math.floor(Math.random() * 100000);
|
||||
12 | const uniqueEmail = `autotest${randomSuffix}@example.com`;
|
||||
13 | const uniquePhone = `+7987${randomSuffix.toString().padStart(6, '0')}`;
|
||||
14 |
|
||||
15 | await registerPage.register({
|
||||
16 | name: 'Иван',
|
||||
17 | surname: 'Тестов',
|
||||
18 | patronymic: 'Александрович',
|
||||
19 | academicTitle: 'Доцент',
|
||||
20 | degree: 'Кандидат наук',
|
||||
21 | position: 'Преподаватель',
|
||||
22 | organization: 'ЮФУ',
|
||||
23 | email: uniqueEmail,
|
||||
24 | phone: uniquePhone,
|
||||
25 | password: '!Test123',
|
||||
26 | confirmPassword: '!Test123'
|
||||
27 | });
|
||||
28 |
|
||||
29 | // Проверяем редирект на страницу авторизации
|
||||
> 30 | await expect(page).toHaveURL(/\/login\/authorization/);
|
||||
| ^ Error: Timed out 5000ms waiting for expect(locator).toHaveURL(expected)
|
||||
31 | await expect(page.getByRole('heading')).toContainText('Авторизация');
|
||||
32 | });
|
||||
33 |
|
||||
34 | });
|
||||
35 |
|
||||
```
|
||||
@@ -0,0 +1,63 @@
|
||||
# Test info
|
||||
|
||||
- Name: Позитивные сценарии регистрации >> Успешная регистрация нового пользователя
|
||||
- Location: /Users/vladsmykov/Desktop/Work/AUTOTESTS/CCPC_playwright/tests/ui/registration/register.spec.ts:6:7
|
||||
|
||||
# Error details
|
||||
|
||||
```
|
||||
Error: locator.isVisible: Target page, context or browser has been closed
|
||||
Call log:
|
||||
- checking visibility of locator('p.ErrorModal_title__heTm5')
|
||||
|
||||
at /Users/vladsmykov/Desktop/Work/AUTOTESTS/CCPC_playwright/tests/ui/registration/register.spec.ts:32:26
|
||||
```
|
||||
|
||||
# Test source
|
||||
|
||||
```ts
|
||||
1 | import { test, expect } from '@playwright/test';
|
||||
2 | import { RegisterPage } from '../../../page-objects/RegisterPage';
|
||||
3 |
|
||||
4 | test.describe('Позитивные сценарии регистрации', () => {
|
||||
5 |
|
||||
6 | test('Успешная регистрация нового пользователя', async ({ page }) => {
|
||||
7 | const registerPage = new RegisterPage(page);
|
||||
8 | await registerPage.goto();
|
||||
9 |
|
||||
10 | // Генерация уникального email и телефона
|
||||
11 | const randomSuffix = Math.floor(Math.random() * 100000);
|
||||
12 | const uniqueEmail = `autotest${randomSuffix}@example.com`;
|
||||
13 | const uniquePhone = `+7987${randomSuffix.toString().padStart(6, '0')}`;
|
||||
14 |
|
||||
15 | // Заполнение формы
|
||||
16 | await registerPage.register({
|
||||
17 | name: 'Иван',
|
||||
18 | surname: 'Тестов',
|
||||
19 | patronymic: 'Александрович',
|
||||
20 | academicTitle: 'Доцент',
|
||||
21 | degree: 'Кандидат наук',
|
||||
22 | position: 'Преподаватель',
|
||||
23 | organization: 'ЮФУ',
|
||||
24 | email: uniqueEmail,
|
||||
25 | phone: uniquePhone,
|
||||
26 | password: '!Test123456', // более надёжный
|
||||
27 | confirmPassword: '!Test123456'
|
||||
28 | });
|
||||
29 |
|
||||
30 | // --- ВСТАВКА ДЛЯ ОТЛАДКИ ---
|
||||
31 | const errorModal = page.locator('p.ErrorModal_title__heTm5');
|
||||
> 32 | if (await errorModal.isVisible()) {
|
||||
| ^ Error: locator.isVisible: Target page, context or browser has been closed
|
||||
33 | const msg = await errorModal.textContent();
|
||||
34 | throw new Error(`Регистрация не удалась. Модалка: "${msg}"`);
|
||||
35 | }
|
||||
36 |
|
||||
37 | // Ждём, что будет редирект
|
||||
38 | await expect(page).toHaveURL(/\/login\/confirmLogin/);
|
||||
39 | await expect(page.locator('text=Подтвердите адрес электронной почты')).toBeVisible();
|
||||
40 | });
|
||||
41 |
|
||||
42 | });
|
||||
43 |
|
||||
```
|
||||
@@ -0,0 +1,58 @@
|
||||
# Test info
|
||||
|
||||
- Name: Позитивные сценарии регистрации >> Успешная регистрация нового пользователя
|
||||
- Location: /Users/vladsmykov/Desktop/Work/AUTOTESTS/CCPC_playwright/tests/ui/registration/register.spec.ts:6:7
|
||||
|
||||
# Error details
|
||||
|
||||
```
|
||||
Error: browserContext._wrapApiCall: Test ended.
|
||||
Browser logs:
|
||||
|
||||
<launching> /Users/vladsmykov/Library/Caches/ms-playwright/chromium-1169/chrome-mac/Chromium.app/Contents/MacOS/Chromium --disable-field-trial-config --disable-background-networking --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-back-forward-cache --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-component-update --no-default-browser-check --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=AcceptCHFrame,AutoExpandDetailsElement,AvoidUnnecessaryBeforeUnloadCheckSync,CertificateTransparencyComponentUpdater,DeferRendererTasksAfterInput,DestroyProfileOnBrowserClose,DialMediaRouteProvider,ExtensionManifestV2Disabled,GlobalMediaControls,HttpsUpgrades,ImprovedCookieControls,LazyFrameLoading,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --force-color-profile=srgb --metrics-recording-only --no-first-run --enable-automation --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --disable-search-engine-choice-screen --unsafely-disable-devtools-self-xss-warnings --enable-use-zoom-for-dsf=false --no-sandbox --user-data-dir=/var/folders/lg/h2gsyjw52lg9sl4rjvlxq91w0000gn/T/playwright_chromiumdev_profile-LRGFrl --remote-debugging-pipe --no-startup-window
|
||||
<launched> pid=51693
|
||||
[pid=51693][err] 2025-06-17 17:16:44.156 Chromium[51693:11871004] +[IMKClient subclass]: chose IMKClient_Modern
|
||||
[pid=51693][err] 2025-06-17 17:16:44.156 Chromium[51693:11871004] +[IMKInputSession subclass]: chose IMKInputSession_Modern
|
||||
[pid=51693] <gracefully close start>
|
||||
```
|
||||
|
||||
# Test source
|
||||
|
||||
```ts
|
||||
1 | import { test, expect } from '@playwright/test';
|
||||
2 | import { RegisterPage } from '../../../page-objects/RegisterPage';
|
||||
3 |
|
||||
4 | test.describe('Позитивные сценарии регистрации', () => {
|
||||
5 |
|
||||
> 6 | test('Успешная регистрация нового пользователя', async ({ page }) => {
|
||||
| ^ Error: browserContext._wrapApiCall: Test ended.
|
||||
7 | const registerPage = new RegisterPage(page);
|
||||
8 | await registerPage.goto();
|
||||
9 |
|
||||
10 | // Генерация уникального email и телефона
|
||||
11 | const randomSuffix = Math.floor(Math.random() * 100000);
|
||||
12 | const uniqueEmail = `autotest${randomSuffix}@example.com`;
|
||||
13 | const uniquePhone = `+7987${randomSuffix.toString().padStart(6, '0')}`;
|
||||
14 |
|
||||
15 | await registerPage.register({
|
||||
16 | name: 'Иван',
|
||||
17 | surname: 'Тестов',
|
||||
18 | patronymic: 'Александрович',
|
||||
19 | academicTitle: 'Доцент',
|
||||
20 | degree: 'Кандидат наук',
|
||||
21 | position: 'Преподаватель',
|
||||
22 | organization: 'ЮФУ',
|
||||
23 | email: uniqueEmail,
|
||||
24 | phone: uniquePhone,
|
||||
25 | password: '!Test123',
|
||||
26 | confirmPassword: '!Test123'
|
||||
27 | });
|
||||
28 |
|
||||
29 | // Проверяем редирект на страницу авторизации
|
||||
30 | await expect(page).toHaveURL(/\/login\/authorization/);
|
||||
31 | await expect(page.getByRole('heading')).toContainText('Авторизация');
|
||||
32 | });
|
||||
33 |
|
||||
34 | });
|
||||
35 |
|
||||
```
|
||||
@@ -0,0 +1,66 @@
|
||||
# Test info
|
||||
|
||||
- Name: Позитивные сценарии регистрации >> Успешная регистрация нового пользователя
|
||||
- Location: /Users/vladsmykov/Desktop/Work/AUTOTESTS/CCPC_playwright/tests/ui/registration/register.spec.ts:6:7
|
||||
|
||||
# Error details
|
||||
|
||||
```
|
||||
Error: browserContext._wrapApiCall: Test ended.
|
||||
Browser logs:
|
||||
|
||||
<launching> /Users/vladsmykov/Library/Caches/ms-playwright/chromium-1169/chrome-mac/Chromium.app/Contents/MacOS/Chromium --disable-field-trial-config --disable-background-networking --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-back-forward-cache --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-component-update --no-default-browser-check --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=AcceptCHFrame,AutoExpandDetailsElement,AvoidUnnecessaryBeforeUnloadCheckSync,CertificateTransparencyComponentUpdater,DeferRendererTasksAfterInput,DestroyProfileOnBrowserClose,DialMediaRouteProvider,ExtensionManifestV2Disabled,GlobalMediaControls,HttpsUpgrades,ImprovedCookieControls,LazyFrameLoading,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --force-color-profile=srgb --metrics-recording-only --no-first-run --enable-automation --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --disable-search-engine-choice-screen --unsafely-disable-devtools-self-xss-warnings --enable-use-zoom-for-dsf=false --no-sandbox --user-data-dir=/var/folders/lg/h2gsyjw52lg9sl4rjvlxq91w0000gn/T/playwright_chromiumdev_profile-TxrrIk --remote-debugging-pipe --no-startup-window
|
||||
<launched> pid=53322
|
||||
[pid=53322][err] 2025-06-17 19:07:46.501 Chromium[53322:11903656] +[IMKClient subclass]: chose IMKClient_Modern
|
||||
[pid=53322][err] 2025-06-17 19:08:28.659 Chromium[53322:11903656] +[IMKInputSession subclass]: chose IMKInputSession_Modern
|
||||
[pid=53322] <gracefully close start>
|
||||
```
|
||||
|
||||
# Test source
|
||||
|
||||
```ts
|
||||
1 | import { test, expect } from '@playwright/test';
|
||||
2 | import { RegisterPage } from '../../../page-objects/RegisterPage';
|
||||
3 |
|
||||
4 | test.describe('Позитивные сценарии регистрации', () => {
|
||||
5 |
|
||||
> 6 | test('Успешная регистрация нового пользователя', async ({ page }) => {
|
||||
| ^ Error: browserContext._wrapApiCall: Test ended.
|
||||
7 | const registerPage = new RegisterPage(page);
|
||||
8 | await registerPage.goto();
|
||||
9 |
|
||||
10 | // Генерация уникального email и телефона
|
||||
11 | const randomSuffix = Math.floor(Math.random() * 100000);
|
||||
12 | const uniqueEmail = `autotest${randomSuffix}@example.com`;
|
||||
13 | const uniquePhone = `+7987${randomSuffix.toString().padStart(6, '0')}`;
|
||||
14 |
|
||||
15 | // Заполнение формы
|
||||
16 | await registerPage.register({
|
||||
17 | name: 'Иван',
|
||||
18 | surname: 'Тестов',
|
||||
19 | patronymic: 'Александрович',
|
||||
20 | academicTitle: 'Доцент',
|
||||
21 | degree: 'Кандидат наук',
|
||||
22 | position: 'Преподаватель',
|
||||
23 | organization: 'ЮФУ',
|
||||
24 | email: uniqueEmail,
|
||||
25 | phone: uniquePhone,
|
||||
26 | password: '!Test123456', // более надёжный
|
||||
27 | confirmPassword: '!Test123456'
|
||||
28 | });
|
||||
29 |
|
||||
30 | // --- ВСТАВКА ДЛЯ ОТЛАДКИ ---
|
||||
31 | const errorModal = page.locator('p.ErrorModal_title__heTm5');
|
||||
32 | if (await errorModal.isVisible()) {
|
||||
33 | const msg = await errorModal.textContent();
|
||||
34 | throw new Error(`Регистрация не удалась. Модалка: "${msg}"`);
|
||||
35 | }
|
||||
36 |
|
||||
37 | // Ждём, что будет редирект
|
||||
38 | await expect(page).toHaveURL(/\/login\/confirmLogin/);
|
||||
39 | await expect(page.locator('text=Подтвердите адрес электронной почты')).toBeVisible();
|
||||
40 | });
|
||||
41 |
|
||||
42 | });
|
||||
43 |
|
||||
```
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,59 @@
|
||||
# Test info
|
||||
|
||||
- Name: Позитивные сценарии регистрации >> Успешная регистрация нового пользователя
|
||||
- Location: /Users/vladsmykov/Desktop/Work/AUTOTESTS/CCPC_playwright/tests/ui/registration/register.spec.ts:6:7
|
||||
|
||||
# Error details
|
||||
|
||||
```
|
||||
Error: browserContext._wrapApiCall: Test ended.
|
||||
Browser logs:
|
||||
|
||||
<launching> /Users/vladsmykov/Library/Caches/ms-playwright/chromium-1169/chrome-mac/Chromium.app/Contents/MacOS/Chromium --disable-field-trial-config --disable-background-networking --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-back-forward-cache --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-component-update --no-default-browser-check --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=AcceptCHFrame,AutoExpandDetailsElement,AvoidUnnecessaryBeforeUnloadCheckSync,CertificateTransparencyComponentUpdater,DeferRendererTasksAfterInput,DestroyProfileOnBrowserClose,DialMediaRouteProvider,ExtensionManifestV2Disabled,GlobalMediaControls,HttpsUpgrades,ImprovedCookieControls,LazyFrameLoading,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --force-color-profile=srgb --metrics-recording-only --no-first-run --enable-automation --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --disable-search-engine-choice-screen --unsafely-disable-devtools-self-xss-warnings --enable-use-zoom-for-dsf=false --no-sandbox --user-data-dir=/var/folders/lg/h2gsyjw52lg9sl4rjvlxq91w0000gn/T/playwright_chromiumdev_profile-ebxZKI --remote-debugging-pipe --no-startup-window
|
||||
<launched> pid=53578
|
||||
[pid=53578][err] 2025-06-17 19:09:43.952 Chromium[53578:11906463] +[IMKClient subclass]: chose IMKClient_Modern
|
||||
[pid=53578][err] 2025-06-17 19:09:43.953 Chromium[53578:11906463] +[IMKInputSession subclass]: chose IMKInputSession_Modern
|
||||
[pid=53578] <gracefully close start>
|
||||
```
|
||||
|
||||
# Test source
|
||||
|
||||
```ts
|
||||
1 | import { test, expect } from '@playwright/test';
|
||||
2 | import { RegisterPage } from '../../../page-objects/RegisterPage';
|
||||
3 |
|
||||
4 | test.describe('Позитивные сценарии регистрации', () => {
|
||||
5 |
|
||||
> 6 | test('Успешная регистрация нового пользователя', async ({ page }) => {
|
||||
| ^ Error: browserContext._wrapApiCall: Test ended.
|
||||
7 | const registerPage = new RegisterPage(page);
|
||||
8 | await registerPage.goto();
|
||||
9 |
|
||||
10 | // Генерация уникального email и телефона
|
||||
11 | const randomSuffix = Math.floor(Math.random() * 100000);
|
||||
12 | const uniqueEmail = `autotest${randomSuffix}@example.com`;
|
||||
13 | const uniquePhone = `+79${randomSuffix.toString().padStart(9, '0')}`;
|
||||
14 |
|
||||
15 | await registerPage.register({
|
||||
16 | name: 'Иван',
|
||||
17 | surname: 'Тестов',
|
||||
18 | patronymic: 'Александрович',
|
||||
19 | academicTitle: 'Доцент',
|
||||
20 | degree: 'Кандидат наук',
|
||||
21 | position: 'Преподаватель',
|
||||
22 | organization: 'ЮФУ',
|
||||
23 | email: uniqueEmail,
|
||||
24 | phone: uniquePhone,
|
||||
25 | password: '!Test123456',
|
||||
26 | confirmPassword: '!Test123456'
|
||||
27 | });
|
||||
28 |
|
||||
29 | // Проверяем редирект на страницу подтверждения кода
|
||||
30 | await expect(page).toHaveURL(/\/login\/confirmLogin/);
|
||||
31 | await expect(page.locator('text=Подтвердите адрес электронной почты')).toBeVisible();
|
||||
32 |
|
||||
33 | });
|
||||
34 |
|
||||
35 | });
|
||||
36 |
|
||||
```
|
||||
@@ -0,0 +1,147 @@
|
||||
# Test info
|
||||
|
||||
- Name: Позитивные сценарии регистрации >> Успешная регистрация нового пользователя
|
||||
- Location: /Users/vladsmykov/Desktop/Work/AUTOTESTS/CCPC_playwright/tests/ui/registration/register.spec.ts:6:7
|
||||
|
||||
# Error details
|
||||
|
||||
```
|
||||
Error: locator.fill: Target page, context or browser has been closed
|
||||
Call log:
|
||||
- waiting for getByPlaceholder('Учёное звание*')
|
||||
- locator resolved to <input readonly value="" type="text" class=" false " name="academicTitle" autocomplete="new-password" placeholder="Учёное звание*"/>
|
||||
- fill("Доцент")
|
||||
- attempting fill action
|
||||
2 × waiting for element to be visible, enabled and editable
|
||||
- element is not editable
|
||||
- retrying fill action
|
||||
- waiting 20ms
|
||||
2 × waiting for element to be visible, enabled and editable
|
||||
- element is not editable
|
||||
- retrying fill action
|
||||
- waiting 100ms
|
||||
128 × waiting for element to be visible, enabled and editable
|
||||
- element is not editable
|
||||
- retrying fill action
|
||||
- waiting 500ms
|
||||
|
||||
at RegisterPage.register (/Users/vladsmykov/Desktop/Work/AUTOTESTS/CCPC_playwright/page-objects/RegisterPage.ts:100:35)
|
||||
at /Users/vladsmykov/Desktop/Work/AUTOTESTS/CCPC_playwright/tests/ui/registration/register.spec.ts:15:5
|
||||
```
|
||||
|
||||
# Test source
|
||||
|
||||
```ts
|
||||
1 | import { Page, Locator } from '@playwright/test';
|
||||
2 |
|
||||
3 | export class RegisterPage {
|
||||
4 | readonly page: Page;
|
||||
5 |
|
||||
6 | // Поля ввода
|
||||
7 | readonly nameInput: Locator;
|
||||
8 | readonly surnameInput: Locator;
|
||||
9 | readonly patronymicInput: Locator;
|
||||
10 | readonly academicTitleInput: Locator;
|
||||
11 | readonly degreeInput: Locator;
|
||||
12 | readonly positionInput: Locator;
|
||||
13 | readonly organizationInput: Locator;
|
||||
14 | readonly emailInput: Locator;
|
||||
15 | readonly phoneInput: Locator;
|
||||
16 | readonly passwordInput: Locator;
|
||||
17 | readonly confirmPasswordInput: Locator;
|
||||
18 |
|
||||
19 | // Глазики
|
||||
20 | readonly passwordToggle: Locator;
|
||||
21 | readonly confirmPasswordToggle: Locator;
|
||||
22 |
|
||||
23 | // Кнопка регистрации
|
||||
24 | readonly submitButton: Locator;
|
||||
25 |
|
||||
26 | // Ссылка "Авторизируйтесь"
|
||||
27 | readonly loginLink: Locator;
|
||||
28 |
|
||||
29 | // Ошибки валидации
|
||||
30 | readonly requiredFieldErrors: Locator;
|
||||
31 | readonly nameError: Locator;
|
||||
32 | readonly surnameError: Locator;
|
||||
33 | readonly positionError: Locator;
|
||||
34 | readonly emailFormatError: Locator;
|
||||
35 | readonly passwordLengthError: Locator;
|
||||
36 | readonly confirmPasswordRequiredError: Locator;
|
||||
37 |
|
||||
38 | // Модалки
|
||||
39 | readonly duplicateUserModal: Locator;
|
||||
40 | readonly invalidOrgModal: Locator;
|
||||
41 |
|
||||
42 | constructor(page: Page) {
|
||||
43 | this.page = page;
|
||||
44 |
|
||||
45 | // Инпуты
|
||||
46 | this.nameInput = page.getByPlaceholder('Имя*');
|
||||
47 | this.surnameInput = page.getByPlaceholder('Фамилия*');
|
||||
48 | this.patronymicInput = page.getByPlaceholder('Отчество');
|
||||
49 | this.academicTitleInput = page.getByPlaceholder('Учёное звание*');
|
||||
50 | this.degreeInput = page.getByPlaceholder('Учёная степень*');
|
||||
51 | this.positionInput = page.getByPlaceholder('Должность');
|
||||
52 | this.organizationInput = page.getByPlaceholder('Организация*');
|
||||
53 | this.emailInput = page.getByPlaceholder('Email (логин)*');
|
||||
54 | this.phoneInput = page.getByPlaceholder('Номер телефона*');
|
||||
55 | this.passwordInput = page.getByPlaceholder('Придумайте пароль*');
|
||||
56 | this.confirmPasswordInput = page.getByPlaceholder('Повторите пароль*');
|
||||
57 |
|
||||
58 | // Глазики
|
||||
59 | this.passwordToggle = page.locator('input[name="password"] + img');
|
||||
60 | this.confirmPasswordToggle = page.locator('input[name="confirmPassword"] + img');
|
||||
61 |
|
||||
62 | // Кнопки
|
||||
63 | this.submitButton = page.getByRole('button', { name: 'Зарегистрироваться' });
|
||||
64 | this.loginLink = page.getByText('Авторизируйтесь');
|
||||
65 |
|
||||
66 | // Ошибки
|
||||
67 | this.requiredFieldErrors = page.locator('div[name="error"]', { hasText: 'Поле обязательно для заполнения' });
|
||||
68 | this.nameError = page.getByText('Некорректное имя');
|
||||
69 | this.surnameError = page.getByText('Некорректная фамилия');
|
||||
70 | this.positionError = page.getByText('Не более 200 символов!');
|
||||
71 | this.emailFormatError = page.getByText('Некорректный Email');
|
||||
72 | this.passwordLengthError = page.getByText('Не менее 8 символов');
|
||||
73 | this.confirmPasswordRequiredError = page.getByText('Поле обязательно для заполнения');
|
||||
74 |
|
||||
75 | // Модальные окна
|
||||
76 | this.duplicateUserModal = page.getByText('Пользователь с таким email или телефоном уже зарегистрирован!');
|
||||
77 | this.invalidOrgModal = page.getByText('Некорректное название организации!');
|
||||
78 | }
|
||||
79 |
|
||||
80 | async goto() {
|
||||
81 | await this.page.goto('/login/registration');
|
||||
82 | }
|
||||
83 |
|
||||
84 | async register(data: {
|
||||
85 | name: string,
|
||||
86 | surname: string,
|
||||
87 | patronymic?: string,
|
||||
88 | academicTitle: string,
|
||||
89 | degree: string,
|
||||
90 | position?: string,
|
||||
91 | organization: string,
|
||||
92 | email: string,
|
||||
93 | phone: string,
|
||||
94 | password: string,
|
||||
95 | confirmPassword: string
|
||||
96 | }) {
|
||||
97 | await this.nameInput.fill(data.name);
|
||||
98 | await this.surnameInput.fill(data.surname);
|
||||
99 | if (data.patronymic) await this.patronymicInput.fill(data.patronymic);
|
||||
> 100 | await this.academicTitleInput.fill(data.academicTitle);
|
||||
| ^ Error: locator.fill: Target page, context or browser has been closed
|
||||
101 | await this.degreeInput.fill(data.degree);
|
||||
102 | if (data.position) await this.positionInput.fill(data.position);
|
||||
103 | await this.organizationInput.fill(data.organization);
|
||||
104 | await this.emailInput.fill(data.email);
|
||||
105 | await this.phoneInput.fill(data.phone);
|
||||
106 | await this.passwordInput.fill(data.password);
|
||||
107 | await this.confirmPasswordInput.fill(data.confirmPassword);
|
||||
108 | await this.submitButton.click();
|
||||
109 | }
|
||||
110 | }
|
||||
111 |
|
||||
```
|
||||
@@ -0,0 +1,61 @@
|
||||
# Test info
|
||||
|
||||
- Name: Позитивные сценарии регистрации >> Успешная регистрация нового пользователя
|
||||
- Location: /Users/vladsmykov/Desktop/Work/AUTOTESTS/CCPC_playwright/tests/ui/registration/register.spec.ts:6:7
|
||||
|
||||
# Error details
|
||||
|
||||
```
|
||||
Error: expect(locator).toHaveURL(expected)
|
||||
|
||||
Locator: locator(':root')
|
||||
Expected pattern: /\/login\/confirmLogin/
|
||||
Received string: ""
|
||||
Call log:
|
||||
- expect.toHaveURL with timeout 5000ms
|
||||
- waiting for locator(':root')
|
||||
|
||||
at /Users/vladsmykov/Desktop/Work/AUTOTESTS/CCPC_playwright/tests/ui/registration/register.spec.ts:30:24
|
||||
```
|
||||
|
||||
# Test source
|
||||
|
||||
```ts
|
||||
1 | import { test, expect } from '@playwright/test';
|
||||
2 | import { RegisterPage } from '../../../page-objects/RegisterPage';
|
||||
3 |
|
||||
4 | test.describe('Позитивные сценарии регистрации', () => {
|
||||
5 |
|
||||
6 | test('Успешная регистрация нового пользователя', async ({ page }) => {
|
||||
7 | const registerPage = new RegisterPage(page);
|
||||
8 | await registerPage.goto();
|
||||
9 |
|
||||
10 | // Генерация уникального email и телефона
|
||||
11 | const randomSuffix = Math.floor(Math.random() * 100000);
|
||||
12 | const uniqueEmail = `autotest${randomSuffix}@example.com`;
|
||||
13 | const uniquePhone = `+79${randomSuffix.toString().padStart(9, '0')}`;
|
||||
14 |
|
||||
15 | await registerPage.register({
|
||||
16 | name: 'Иван',
|
||||
17 | surname: 'Тестов',
|
||||
18 | patronymic: 'Александрович',
|
||||
19 | academicTitle: 'Доцент',
|
||||
20 | degree: 'Кандидат наук',
|
||||
21 | position: 'Преподаватель',
|
||||
22 | organization: 'ЮФУ',
|
||||
23 | email: uniqueEmail,
|
||||
24 | phone: uniquePhone,
|
||||
25 | password: '!Test123456',
|
||||
26 | confirmPassword: '!Test123456'
|
||||
27 | });
|
||||
28 |
|
||||
29 | // Проверяем редирект на страницу подтверждения кода
|
||||
> 30 | await expect(page).toHaveURL(/\/login\/confirmLogin/);
|
||||
| ^ Error: expect(locator).toHaveURL(expected)
|
||||
31 | await expect(page.locator('text=Подтвердите адрес электронной почты')).toBeVisible();
|
||||
32 |
|
||||
33 | });
|
||||
34 |
|
||||
35 | });
|
||||
36 |
|
||||
```
|
||||
@@ -0,0 +1,137 @@
|
||||
# Test info
|
||||
|
||||
- Name: Позитивные сценарии регистрации >> Успешная регистрация нового пользователя
|
||||
- Location: /Users/vladsmykov/Desktop/Work/AUTOTESTS/CCPC_playwright/tests/ui/registration/register.spec.ts:6:7
|
||||
|
||||
# Error details
|
||||
|
||||
```
|
||||
Error: Timed out 5000ms waiting for expect(locator).toHaveURL(expected)
|
||||
|
||||
Locator: locator(':root')
|
||||
Expected pattern: /\/login\/confirmLogin/
|
||||
Received string: "https://ssas.dev.rdcenter.ru/login/registration"
|
||||
Call log:
|
||||
- expect.toHaveURL with timeout 5000ms
|
||||
- waiting for locator(':root')
|
||||
9 × locator resolved to <html lang="en">…</html>
|
||||
- unexpected value "https://ssas.dev.rdcenter.ru/login/registration"
|
||||
|
||||
at /Users/vladsmykov/Desktop/Work/AUTOTESTS/CCPC_playwright/tests/ui/registration/register.spec.ts:30:24
|
||||
```
|
||||
|
||||
# Page snapshot
|
||||
|
||||
```yaml
|
||||
- main:
|
||||
- main:
|
||||
- button
|
||||
- button "Скрыть Close":
|
||||
- text: Скрыть
|
||||
- img "Close"
|
||||
- list:
|
||||
- listitem:
|
||||
- text: Главная
|
||||
- img "Arrow"
|
||||
- listitem:
|
||||
- text: Автору
|
||||
- img "Arrow"
|
||||
- listitem:
|
||||
- text: Новости
|
||||
- img "Arrow"
|
||||
- listitem:
|
||||
- text: Участники
|
||||
- img "Arrow"
|
||||
- listitem:
|
||||
- text: Оргкомитет
|
||||
- img "Arrow"
|
||||
- img "Logo"
|
||||
- paragraph: Добро пожаловать
|
||||
- paragraph: Зарегистрируйтесь, чтобы начать работу.
|
||||
- textbox "Имя*": Иван
|
||||
- text: Имя*
|
||||
- textbox "Фамилия*": Тестов
|
||||
- text: Фамилия*
|
||||
- textbox "Отчество": Александрович
|
||||
- text: Отчество
|
||||
- textbox "Учёное звание*": Доцент
|
||||
- img "img"
|
||||
- text: Учёное звание*
|
||||
- textbox "Учёная степень*": Кандидат наук
|
||||
- img "img"
|
||||
- text: Учёная степень*
|
||||
- textbox "Должность": Преподаватель
|
||||
- text: Должность
|
||||
- textbox "Организация*": ЮФУ
|
||||
- text: Организация*
|
||||
- textbox "Email (логин)*": autotest30703@example.com
|
||||
- text: Email (логин)*
|
||||
- textbox "Номер телефона*": +7 (987) 030-70-3
|
||||
- text: Некорректный номер
|
||||
- img "!"
|
||||
- img "показать пароль"
|
||||
- textbox "Придумайте пароль*": "!Test123"
|
||||
- text: Придумайте пароль*
|
||||
- img "показать пароль"
|
||||
- textbox "Повторите пароль*": "!Test123"
|
||||
- text: Повторите пароль*
|
||||
- paragraph: ИЛИ
|
||||
- button "Sfedu Logo Войти через аккаунт @sfedu":
|
||||
- img "Sfedu Logo"
|
||||
- text: Войти через аккаунт @sfedu
|
||||
- button "Зарегистрироваться"
|
||||
- paragraph: Уже есть аккаунт?
|
||||
- paragraph: Авторизируйтесь
|
||||
- paragraph: Всероссийская научная конференция "Системный синтез и прикладная синергетика"
|
||||
- paragraph
|
||||
- paragraph: "Напишите нам:"
|
||||
- paragraph:
|
||||
- text: "e-mail:"
|
||||
- link "ssas@ictis.sfedu.ru":
|
||||
- /url: mailto:ssas@ictis.sfedu.ru
|
||||
- text: Сайт разработан Центром исследований и разработки ИКТИБ
|
||||
- link "Ознакомиться с руководством пользователя":
|
||||
- /url: /static/media/user_manual.f1df94e2c5143919fb0d.pdf
|
||||
```
|
||||
|
||||
# Test source
|
||||
|
||||
```ts
|
||||
1 | import { test, expect } from '@playwright/test';
|
||||
2 | import { RegisterPage } from '../../../page-objects/RegisterPage';
|
||||
3 |
|
||||
4 | test.describe('Позитивные сценарии регистрации', () => {
|
||||
5 |
|
||||
6 | test('Успешная регистрация нового пользователя', async ({ page }) => {
|
||||
7 | const registerPage = new RegisterPage(page);
|
||||
8 | await registerPage.goto();
|
||||
9 |
|
||||
10 | // Генерация уникального email и телефона
|
||||
11 | const randomSuffix = Math.floor(Math.random() * 100000);
|
||||
12 | const uniqueEmail = `autotest${randomSuffix}@example.com`;
|
||||
13 | const uniquePhone = `+7987${randomSuffix.toString().padStart(6, '0')}`;
|
||||
14 |
|
||||
15 | await registerPage.register({
|
||||
16 | name: 'Иван',
|
||||
17 | surname: 'Тестов',
|
||||
18 | patronymic: 'Александрович',
|
||||
19 | academicTitle: 'Доцент',
|
||||
20 | degree: 'Кандидат наук',
|
||||
21 | position: 'Преподаватель',
|
||||
22 | organization: 'ЮФУ',
|
||||
23 | email: uniqueEmail,
|
||||
24 | phone: uniquePhone,
|
||||
25 | password: '!Test123',
|
||||
26 | confirmPassword: '!Test123'
|
||||
27 | });
|
||||
28 |
|
||||
29 | // Проверяем редирект на страницу подтверждения кода
|
||||
> 30 | await expect(page).toHaveURL(/\/login\/confirmLogin/);
|
||||
| ^ Error: Timed out 5000ms waiting for expect(locator).toHaveURL(expected)
|
||||
31 | await expect(page.locator('text=Подтвердите адрес электронной почты')).toBeVisible();
|
||||
32 |
|
||||
33 | });
|
||||
34 |
|
||||
35 | });
|
||||
36 |
|
||||
```
|
||||
@@ -0,0 +1,137 @@
|
||||
# Test info
|
||||
|
||||
- Name: Позитивные сценарии регистрации >> Успешная регистрация нового пользователя
|
||||
- Location: /Users/vladsmykov/Desktop/Work/AUTOTESTS/CCPC_playwright/tests/ui/registration/register.spec.ts:6:7
|
||||
|
||||
# Error details
|
||||
|
||||
```
|
||||
Error: Timed out 5000ms waiting for expect(locator).toHaveURL(expected)
|
||||
|
||||
Locator: locator(':root')
|
||||
Expected pattern: /\/login\/confirmLogin/
|
||||
Received string: "https://ssas.dev.rdcenter.ru/login/registration"
|
||||
Call log:
|
||||
- expect.toHaveURL with timeout 5000ms
|
||||
- waiting for locator(':root')
|
||||
9 × locator resolved to <html lang="en">…</html>
|
||||
- unexpected value "https://ssas.dev.rdcenter.ru/login/registration"
|
||||
|
||||
at /Users/vladsmykov/Desktop/Work/AUTOTESTS/CCPC_playwright/tests/ui/registration/register.spec.ts:30:24
|
||||
```
|
||||
|
||||
# Page snapshot
|
||||
|
||||
```yaml
|
||||
- main:
|
||||
- main:
|
||||
- button
|
||||
- button "Скрыть Close":
|
||||
- text: Скрыть
|
||||
- img "Close"
|
||||
- list:
|
||||
- listitem:
|
||||
- text: Главная
|
||||
- img "Arrow"
|
||||
- listitem:
|
||||
- text: Автору
|
||||
- img "Arrow"
|
||||
- listitem:
|
||||
- text: Новости
|
||||
- img "Arrow"
|
||||
- listitem:
|
||||
- text: Участники
|
||||
- img "Arrow"
|
||||
- listitem:
|
||||
- text: Оргкомитет
|
||||
- img "Arrow"
|
||||
- img "Logo"
|
||||
- paragraph: Добро пожаловать
|
||||
- paragraph: Зарегистрируйтесь, чтобы начать работу.
|
||||
- textbox "Имя*": Иван
|
||||
- text: Имя*
|
||||
- textbox "Фамилия*": Тестов
|
||||
- text: Фамилия*
|
||||
- textbox "Отчество": Александрович
|
||||
- text: Отчество
|
||||
- textbox "Учёное звание*": Доцент
|
||||
- img "img"
|
||||
- text: Учёное звание*
|
||||
- textbox "Учёная степень*": Кандидат наук
|
||||
- img "img"
|
||||
- text: Учёная степень*
|
||||
- textbox "Должность": Преподаватель
|
||||
- text: Должность
|
||||
- textbox "Организация*": ЮФУ
|
||||
- text: Организация*
|
||||
- textbox "Email (логин)*": autotest70036@example.com
|
||||
- text: Email (логин)*
|
||||
- textbox "Номер телефона*": +7 (987) 070-03-6
|
||||
- text: Некорректный номер
|
||||
- img "!"
|
||||
- img "показать пароль"
|
||||
- textbox "Придумайте пароль*": "!Test123"
|
||||
- text: Придумайте пароль*
|
||||
- img "показать пароль"
|
||||
- textbox "Повторите пароль*": "!Test123"
|
||||
- text: Повторите пароль*
|
||||
- paragraph: ИЛИ
|
||||
- button "Sfedu Logo Войти через аккаунт @sfedu":
|
||||
- img "Sfedu Logo"
|
||||
- text: Войти через аккаунт @sfedu
|
||||
- button "Зарегистрироваться"
|
||||
- paragraph: Уже есть аккаунт?
|
||||
- paragraph: Авторизируйтесь
|
||||
- paragraph: Всероссийская научная конференция "Системный синтез и прикладная синергетика"
|
||||
- paragraph
|
||||
- paragraph: "Напишите нам:"
|
||||
- paragraph:
|
||||
- text: "e-mail:"
|
||||
- link "ssas@ictis.sfedu.ru":
|
||||
- /url: mailto:ssas@ictis.sfedu.ru
|
||||
- text: Сайт разработан Центром исследований и разработки ИКТИБ
|
||||
- link "Ознакомиться с руководством пользователя":
|
||||
- /url: /static/media/user_manual.f1df94e2c5143919fb0d.pdf
|
||||
```
|
||||
|
||||
# Test source
|
||||
|
||||
```ts
|
||||
1 | import { test, expect } from '@playwright/test';
|
||||
2 | import { RegisterPage } from '../../../page-objects/RegisterPage';
|
||||
3 |
|
||||
4 | test.describe('Позитивные сценарии регистрации', () => {
|
||||
5 |
|
||||
6 | test('Успешная регистрация нового пользователя', async ({ page }) => {
|
||||
7 | const registerPage = new RegisterPage(page);
|
||||
8 | await registerPage.goto();
|
||||
9 |
|
||||
10 | // Генерация уникального email и телефона
|
||||
11 | const randomSuffix = Math.floor(Math.random() * 100000);
|
||||
12 | const uniqueEmail = `autotest${randomSuffix}@example.com`;
|
||||
13 | const uniquePhone = `+7987${randomSuffix.toString().padStart(6, '0')}`;
|
||||
14 |
|
||||
15 | await registerPage.register({
|
||||
16 | name: 'Иван',
|
||||
17 | surname: 'Тестов',
|
||||
18 | patronymic: 'Александрович',
|
||||
19 | academicTitle: 'Доцент',
|
||||
20 | degree: 'Кандидат наук',
|
||||
21 | position: 'Преподаватель',
|
||||
22 | organization: 'ЮФУ',
|
||||
23 | email: uniqueEmail,
|
||||
24 | phone: uniquePhone,
|
||||
25 | password: '!Test123',
|
||||
26 | confirmPassword: '!Test123'
|
||||
27 | });
|
||||
28 |
|
||||
29 | // Проверяем редирект на страницу подтверждения кода
|
||||
> 30 | await expect(page).toHaveURL(/\/login\/confirmLogin/);
|
||||
| ^ Error: Timed out 5000ms waiting for expect(locator).toHaveURL(expected)
|
||||
31 | await expect(page.locator('text=Подтвердите адрес электронной почты')).toBeVisible();
|
||||
32 |
|
||||
33 | });
|
||||
34 |
|
||||
35 | });
|
||||
36 |
|
||||
```
|
||||
File diff suppressed because one or more lines are too long
112
page-objects/RegisterPage.ts
Normal file
112
page-objects/RegisterPage.ts
Normal file
@@ -0,0 +1,112 @@
|
||||
import { Page, Locator } from '@playwright/test';
|
||||
|
||||
export class RegisterPage {
|
||||
readonly page: Page;
|
||||
|
||||
// Поля ввода
|
||||
readonly nameInput: Locator;
|
||||
readonly surnameInput: Locator;
|
||||
readonly patronymicInput: Locator;
|
||||
readonly academicTitleInput: Locator;
|
||||
readonly degreeInput: Locator;
|
||||
readonly positionInput: Locator;
|
||||
readonly organizationInput: Locator;
|
||||
readonly emailInput: Locator;
|
||||
readonly phoneInput: Locator;
|
||||
readonly passwordInput: Locator;
|
||||
readonly confirmPasswordInput: Locator;
|
||||
|
||||
// Глазики
|
||||
readonly passwordToggle: Locator;
|
||||
readonly confirmPasswordToggle: Locator;
|
||||
|
||||
// Кнопка регистрации
|
||||
readonly submitButton: Locator;
|
||||
|
||||
// Ссылка "Авторизируйтесь"
|
||||
readonly loginLink: Locator;
|
||||
|
||||
// Ошибки валидации
|
||||
readonly requiredFieldErrors: Locator;
|
||||
readonly nameError: Locator;
|
||||
readonly surnameError: Locator;
|
||||
readonly positionError: Locator;
|
||||
readonly emailFormatError: Locator;
|
||||
readonly passwordLengthError: Locator;
|
||||
readonly confirmPasswordRequiredError: Locator;
|
||||
|
||||
// Модалки
|
||||
readonly duplicateUserModal: Locator;
|
||||
readonly invalidOrgModal: Locator;
|
||||
|
||||
constructor(page: Page) {
|
||||
this.page = page;
|
||||
|
||||
// Инпуты
|
||||
this.nameInput = page.getByPlaceholder('Имя*');
|
||||
this.surnameInput = page.getByPlaceholder('Фамилия*');
|
||||
this.patronymicInput = page.getByPlaceholder('Отчество');
|
||||
this.academicTitleInput = page.getByPlaceholder('Учёное звание*');
|
||||
this.degreeInput = page.getByPlaceholder('Учёная степень*');
|
||||
this.positionInput = page.getByPlaceholder('Должность');
|
||||
this.organizationInput = page.getByPlaceholder('Организация*');
|
||||
this.emailInput = page.getByPlaceholder('Email (логин)*');
|
||||
this.phoneInput = page.getByPlaceholder('Номер телефона*');
|
||||
this.passwordInput = page.getByPlaceholder('Придумайте пароль*');
|
||||
this.confirmPasswordInput = page.getByPlaceholder('Повторите пароль*');
|
||||
|
||||
// Глазики
|
||||
this.passwordToggle = page.locator('input[name="password"] + img');
|
||||
this.confirmPasswordToggle = page.locator('input[name="confirmPassword"] + img');
|
||||
|
||||
// Кнопки
|
||||
this.submitButton = page.getByRole('button', { name: 'Зарегистрироваться' });
|
||||
this.loginLink = page.getByText('Авторизируйтесь');
|
||||
|
||||
// Ошибки
|
||||
this.requiredFieldErrors = page.locator('div[name="error"]', { hasText: 'Поле обязательно для заполнения' });
|
||||
this.nameError = page.getByText('Некорректное имя');
|
||||
this.surnameError = page.getByText('Некорректная фамилия');
|
||||
this.positionError = page.getByText('Не более 200 символов!');
|
||||
this.emailFormatError = page.getByText('Некорректный Email');
|
||||
this.passwordLengthError = page.getByText('Не менее 8 символов');
|
||||
this.confirmPasswordRequiredError = page.getByText('Поле обязательно для заполнения');
|
||||
|
||||
// Модальные окна
|
||||
this.duplicateUserModal = page.getByText('Пользователь с таким email или телефоном уже зарегистрирован!');
|
||||
this.invalidOrgModal = page.getByText('Некорректное название организации!');
|
||||
}
|
||||
|
||||
async goto() {
|
||||
await this.page.goto('/login/registration');
|
||||
}
|
||||
|
||||
async register(data: {
|
||||
name: string,
|
||||
surname: string,
|
||||
patronymic?: string,
|
||||
academicTitle: string,
|
||||
degree: string,
|
||||
position?: string,
|
||||
organization: string,
|
||||
email: string,
|
||||
phone: string,
|
||||
password: string,
|
||||
confirmPassword: string
|
||||
}) {
|
||||
await this.nameInput.fill(data.name);
|
||||
await this.surnameInput.fill(data.surname);
|
||||
if (data.patronymic) await this.patronymicInput.fill(data.patronymic);
|
||||
await this.academicTitleInput.click();
|
||||
await this.page.locator('li', { hasText: data.academicTitle }).click();
|
||||
await this.degreeInput.click();
|
||||
await this.page.locator('li', { hasText: data.degree }).click();
|
||||
if (data.position) await this.positionInput.fill(data.position);
|
||||
await this.organizationInput.fill(data.organization);
|
||||
await this.emailInput.fill(data.email);
|
||||
await this.phoneInput.fill(data.phone);
|
||||
await this.passwordInput.fill(data.password);
|
||||
await this.confirmPasswordInput.fill(data.confirmPassword);
|
||||
await this.submitButton.click();
|
||||
}
|
||||
}
|
||||
35
tests/ui/registration/register.spec.ts
Normal file
35
tests/ui/registration/register.spec.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
import { test, expect } from '@playwright/test';
|
||||
import { RegisterPage } from '../../../page-objects/RegisterPage';
|
||||
|
||||
test.describe('Позитивные сценарии регистрации', () => {
|
||||
|
||||
test('Успешная регистрация нового пользователя', async ({ page }) => {
|
||||
const registerPage = new RegisterPage(page);
|
||||
await registerPage.goto();
|
||||
|
||||
// Генерация уникального email и телефона
|
||||
const randomSuffix = Math.floor(Math.random() * 100000);
|
||||
const uniqueEmail = `autotest${randomSuffix}@example.com`;
|
||||
const uniquePhone = `+79${randomSuffix.toString().padStart(9, '0')}`;
|
||||
|
||||
await registerPage.register({
|
||||
name: 'Иван',
|
||||
surname: 'Тестов',
|
||||
patronymic: 'Александрович',
|
||||
academicTitle: 'Доцент',
|
||||
degree: 'Кандидат наук',
|
||||
position: 'Преподаватель',
|
||||
organization: 'ЮФУ',
|
||||
email: uniqueEmail,
|
||||
phone: uniquePhone,
|
||||
password: '!Test123456',
|
||||
confirmPassword: '!Test123456'
|
||||
});
|
||||
|
||||
// Проверяем редирект на страницу подтверждения кода
|
||||
await expect(page).toHaveURL(/\/login\/confirmLogin/);
|
||||
await expect(page.locator('text=Подтвердите адрес электронной почты')).toBeVisible();
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user