"""Модуль тестов вкладки 'Шаблоны'. Содержит тесты для проверки функциональности работы с шаблонами. """ 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_verticall_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) # Открываем модальное окно, кликая на первую строку таблицы template_name = templates_tab.open_template_modal(0) # Добавляем задержку для открытия модального окна browser.wait_for_timeout(1000) # Проверка открытия модального окна templates_tab.should_be_modal_window() # Проверка содержимого модального окна templates_tab.check_templates_modal_content(template_name) # Закрытие модального окна через кнопку закрытия templates_tab.close_modal_window_by_toolbar_button(template_name) # Проверяем, что модальное окно закрылось 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) # Открываем модальное окно, кликая на первую строку таблицы template_name = templates_tab.open_template_modal(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(template_name) # Проверяем, что модальное окно закрылось 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) # Открываем модальное окно, кликая на первую строку таблицы template_name = templates_tab.open_template_modal(0) # Добавляем задержку для открытия модального окна browser.wait_for_timeout(2000) # Проверка открытия модального окна templates_tab.should_be_modal_window() # Проверка соответствия данных модального окна данным из API templates_tab.verify_json_container_content( template_name, save_to_file=False ) # Закрытие модального окна через кнопку закрытия templates_tab.close_modal_window_by_toolbar_button(template_name) # Проверяем, что модальное окно закрылось templates_tab.should_not_be_modal_window()