Добавлен файл RegisterPage и позитивный сценарий register.spec

This commit is contained in:
Vlad Smykov
2025-06-17 19:53:22 +03:00
parent 7fb50eef2c
commit 395a008c74
22 changed files with 1158 additions and 0 deletions

View File

@@ -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

View File

@@ -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 |
```

View File

@@ -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 |
```

View File

@@ -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 |
```

View File

@@ -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

View File

@@ -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 |
```

View File

@@ -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 |
```

View File

@@ -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 |
```

View File

@@ -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 |
```

View File

@@ -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

View 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();
}
}

View 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();
});
});