256 lines
12 KiB
Python
256 lines
12 KiB
Python
"""Модуль тестов вкладки 'Шаблоны'.
|
||
|
||
Содержит тесты для проверки функциональности
|
||
работы с шаблонами.
|
||
"""
|
||
import pytest
|
||
|
||
from playwright.sync_api import Page
|
||
from pages.login_page import LoginPage
|
||
from pages.main_page import MainPage
|
||
from pages.templates_tab import TemplatesTab
|
||
|
||
|
||
class TestTemplatesTab:
|
||
"""Набор тестов для вкладки 'Шаблоны'.
|
||
|
||
Проверяет корректность отображения и функциональность элементов вкладки Шаблоны.
|
||
|
||
Тесты покрывают следующие сценарии:
|
||
1. test_templates_tab_content - Проверка содержимого вкладки
|
||
2. test_templates_table_row_highlighting - Проверка выделения строк в таблице
|
||
3. test_templates_table_scrolling - Проверка вертикального скроллинга таблицы
|
||
4. test_templates_modal_window_content - Проверка содержимого модального окна
|
||
5. test_templates_modal_window_scrolling - Проверка скроллинга модального окна
|
||
6. test_templates_modal_window_api_data_consistency - Проверка соответствия данных API
|
||
"""
|
||
|
||
@pytest.fixture(scope="function", autouse=True)
|
||
def setup(self, browser: Page) -> None:
|
||
"""Фикстура для подготовки тестового окружения.
|
||
|
||
Выполняет:
|
||
1. Авторизацию в системе
|
||
2. Переход на вкладку 'Шаблоны' через панель навигации
|
||
"""
|
||
# Авторизация в системе
|
||
login_page = LoginPage(browser)
|
||
login_page.do_login()
|
||
|
||
# Инициализация главной страницы
|
||
main_page = MainPage(browser)
|
||
|
||
# Проверка и взаимодействие с элементами навигации
|
||
main_page.should_be_navigation_panel()
|
||
main_page.click_main_navigation_panel_item("Настройки")
|
||
main_page.click_subpanel_item("Шаблоны")
|
||
|
||
def test_templates_tab_content(self, browser: Page) -> None:
|
||
"""Тест содержимого вкладка 'Шаблоны'.
|
||
|
||
Проверяет:
|
||
1. Наличие и корректность тулбара
|
||
2. Наличие таблицы шаблонов
|
||
3. Соответствие содержимого таблицы
|
||
"""
|
||
# Инициализация страницы сеансов
|
||
templates_tab = TemplatesTab(browser)
|
||
|
||
# Проверка тулбара вкладки
|
||
templates_tab.should_be_toolbar()
|
||
|
||
# Проверка наличия таблицы шаблонов
|
||
templates_tab.should_be_templates_table()
|
||
|
||
browser.wait_for_timeout(5000)
|
||
|
||
# Проверка содержимого таблицы шаблонов
|
||
templates_tab.check_templates_table_content()
|
||
|
||
def test_templates_table_row_highlighting(self, browser: Page) -> None:
|
||
"""Проверка выделения строк в таблице шаблонов.
|
||
|
||
Проверяет корректность выделения строк при клике на различные позиции:
|
||
1. Первая строка
|
||
2. Последняя строка
|
||
3. Строка в середине таблицы
|
||
"""
|
||
|
||
templates_tab = TemplatesTab(browser)
|
||
|
||
# Проверка тулбара вкладки
|
||
templates_tab.should_be_toolbar()
|
||
|
||
# Проверка наличия таблицы шаблонов
|
||
templates_tab.should_be_templates_table()
|
||
|
||
# Получение количества строк в таблице
|
||
rows_count = templates_tab.get_rows_count()
|
||
|
||
# Проверка выделения строк
|
||
templates_tab.check_templates_table_row_highlighting(0)
|
||
templates_tab.check_templates_table_row_highlighting(rows_count - 1)
|
||
templates_tab.check_templates_table_row_highlighting(int(rows_count / 2))
|
||
|
||
def test_templates_table_scrolling(self, browser: Page) -> None:
|
||
"""Проверка вертикального скроллинга таблицы шаблонов.
|
||
|
||
Проверяет:
|
||
1. Возможность вертикальной прокрутки таблицы
|
||
2. Видимость строк после прокрутки вниз и вверх
|
||
3. Корректность отображения данных после скроллинга
|
||
"""
|
||
|
||
templates_tab = TemplatesTab(browser)
|
||
|
||
browser.wait_for_timeout(2000)
|
||
|
||
# Проверка возможности вертикального скроллинга
|
||
is_scrollable = templates_tab.check_templates_table_vertical_scrolling()
|
||
|
||
if is_scrollable:
|
||
print("Таблица поддерживает вертикальный скроллинг")
|
||
|
||
# Прокрутка вниз
|
||
templates_tab.scroll_templates_table_down()
|
||
|
||
browser.wait_for_timeout(1000)
|
||
|
||
# Проверка видимости последней строки после прокрутки
|
||
templates_tab.check_templates_table_last_row_visibility()
|
||
|
||
# Прокрутка вверх
|
||
templates_tab.scroll_templates_table_up()
|
||
|
||
browser.wait_for_timeout(1000)
|
||
|
||
# Проверка видимости первой строки после прокрутки
|
||
templates_tab.check_templates_table_first_row_visibility()
|
||
else:
|
||
print("Таблица не поддерживает вертикальный скроллинг")
|
||
|
||
# Проверка видимости первой строки
|
||
templates_tab.check_templates_table_first_row_visibility()
|
||
|
||
def test_templates_modal_window_content(self, browser: Page) -> None:
|
||
"""Тест содержимого модального окна шаблона.
|
||
|
||
Проверяет:
|
||
1. Открытие модального окна при клике на строку таблицы
|
||
2. Наличие и содержимое модального окна
|
||
3. Наличие тулбара в модальном окне
|
||
4. Проверка кнопки закрытия и её подсказки
|
||
5. Закрытие модального окна
|
||
"""
|
||
# Инициализация страницы шаблонов
|
||
templates_tab = TemplatesTab(browser)
|
||
|
||
# Проверка наличия таблицы шаблонов
|
||
templates_tab.should_be_templates_table()
|
||
|
||
# Добавляем задержку для загрузки данных
|
||
browser.wait_for_timeout(2000)
|
||
|
||
# Открываем модальное окно, кликая на первую строку таблицы
|
||
title = templates_tab.open_template_modal_by_index(0)
|
||
|
||
# Добавляем задержку для открытия модального окна
|
||
browser.wait_for_timeout(1000)
|
||
|
||
# Проверка открытия модального окна
|
||
templates_tab.should_be_modal_window()
|
||
|
||
# Проверка содержимого модального окна
|
||
templates_tab.check_templates_modal_content(title)
|
||
|
||
# Закрытие модального окна через кнопку закрытия
|
||
templates_tab.close_modal_window_by_toolbar_button(title)
|
||
|
||
# Проверяем, что модальное окно закрылось
|
||
templates_tab.should_not_be_modal_window()
|
||
|
||
def test_templates_modal_window_scrolling(self, browser: Page) -> None:
|
||
"""Тест скроллинга модального окна шаблона.
|
||
|
||
Проверяет:
|
||
1. Открытие модального окна при клике на строку таблицы
|
||
2. Возможность вертикального скроллинга содержимого модального окна
|
||
3. Закрытие модального окна
|
||
"""
|
||
|
||
# Инициализация страницы шаблонов
|
||
templates_tab = TemplatesTab(browser)
|
||
|
||
# Проверка наличия таблицы шаблонов
|
||
templates_tab.should_be_templates_table()
|
||
|
||
# Добавляем задержку для загрузки данных
|
||
browser.wait_for_timeout(2000)
|
||
|
||
# Открываем модальное окно, кликая на первую строку таблицы
|
||
title = templates_tab.open_template_modal_by_index(0)
|
||
|
||
# Добавляем задержку для открытия модального окна
|
||
browser.wait_for_timeout(1000)
|
||
|
||
# Проверка открытия модального окна
|
||
templates_tab.should_be_modal_window()
|
||
|
||
# Проверка вертикального скроллинга модального окна
|
||
is_scrollable = templates_tab.check_modal_vertical_scrolling()
|
||
|
||
if is_scrollable:
|
||
print("Модальное окно поддерживает вертикальный скроллинг")
|
||
|
||
# Прокрутка вниз
|
||
templates_tab.scroll_modal_down()
|
||
browser.wait_for_timeout(1000)
|
||
|
||
# Прокрутка вверх
|
||
templates_tab.scroll_modal_up()
|
||
browser.wait_for_timeout(1000)
|
||
else:
|
||
print("Модальное окно не поддерживает вертикальный скроллинг")
|
||
|
||
# Закрытие модального окна через кнопку закрытия
|
||
templates_tab.close_modal_window_by_toolbar_button(title)
|
||
|
||
# Проверяем, что модальное окно закрылось
|
||
templates_tab.should_not_be_modal_window()
|
||
|
||
# @pytest.mark.skip(reason="Разрабатывается. Временно исключено из тестирования")
|
||
def test_templates_modal_window_api_data_consistency(self, browser: Page) -> None:
|
||
"""Тест соответствия данных модального окна данным из API.
|
||
|
||
Проверяет:
|
||
1. Открытие модального окна при клике на строку таблицы
|
||
2. Соответствие JSON конфигурационных данных в модальном окне данным из API
|
||
3. Закрытие модального окна
|
||
"""
|
||
# Инициализация страницы шаблонов
|
||
templates_tab = TemplatesTab(browser)
|
||
|
||
# Проверка наличия таблицы шаблонов
|
||
templates_tab.should_be_templates_table()
|
||
|
||
# Добавляем задержку для загрузки данных
|
||
browser.wait_for_timeout(5000)
|
||
|
||
# Открываем модальное окно, кликая на первую строку таблицы
|
||
title = templates_tab.open_template_modal_by_index(0)
|
||
|
||
# Добавляем задержку для открытия модального окна
|
||
browser.wait_for_timeout(2000)
|
||
|
||
# Проверка открытия модального окна
|
||
templates_tab.should_be_modal_window()
|
||
|
||
# Проверка соответствия данных модального окна данным из API
|
||
templates_tab.verify_json_container_content(title)
|
||
|
||
# Закрытие модального окна через кнопку закрытия
|
||
templates_tab.close_modal_window_by_toolbar_button(title)
|
||
|
||
# Проверяем, что модальное окно закрылось
|
||
templates_tab.should_not_be_modal_window()
|