"""Модуль тестов вкладки 'Шаблоны' в модуле Zero Touch Provisioning. Содержит тесты для проверки функциональности работы с шаблонами. """ import pytest from playwright.sync_api import Page from pages.login_page import LoginPage from pages.main_page import MainPage from pages.ztp_templates_tab import ZTPTemplatesTab class TestZTPTemplatesTab: """Набор тестов для вкладки 'Шаблоны' в модуле Zero Touch Provisioning. Проверяет корректность отображения, функциональность элементов интерфейса и консистентность данных между UI и API на вкладке шаблонов ZTP. Тесты покрывают следующие функциональные области: 1. test_templates_tab_content - Базовая структура и содержимое вкладки 2. test_templates_table_row_highlighting - Визуальное выделение строк таблицы 3. test_templates_table_scrolling - Навигация по таблице с большим объемом данных 4. test_templates_modal_window_close_buttons - Закрытие модальных окон разными способами 5. test_templates_modal_window_content - Структура и содержимое модальных окон 6. test_templates_modal_window_scrolling - Навигация в модальных окнах 7. test_templates_modal_window_api_data_consistency - Синхронизация данных UI и API Фикстура setup обеспечивает подготовку тестового окружения: - Авторизацию в системе - Навигацию к целевой вкладке через панель настроек - Инициализацию необходимых компонентов страницы """ @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("Zero Touch Provisioning") main_page.click_subpanel_item("Шаблоны", parent="Zero Touch Provisioning") main_page.wait_for_timeout(5000) #@pytest.mark.skip(reason=" Временно исключено из тестирования") def test_templates_tab_content(self, browser: Page) -> None: """Тест содержимого вкладки 'Шаблоны'. Проверяет: 1. Наличие и корректность тулбара 2. Наличие таблицы шаблонов 3. Соответствие содержимого таблицы """ # Инициализация страницы сеансов ztp_templates_tab = ZTPTemplatesTab(browser) # Проверка тулбара вкладки ztp_templates_tab.should_be_toolbar() # Проверка наличия таблицы шаблонов ztp_templates_tab.should_be_templates_table() browser.wait_for_timeout(5000) # Проверка содержимого таблицы шаблонов ztp_templates_tab.check_templates_table_content() #@pytest.mark.skip(reason=" Временно исключено из тестирования") def test_templates_table_row_highlighting(self, browser: Page) -> None: """Проверка выделения строк в таблице шаблонов. Проверяет корректность выделения строк при клике на различные позиции: 1. Первая строка 2. Последняя строка 3. Строка в середине таблицы """ ztp_templates_tab = ZTPTemplatesTab(browser) # Проверка тулбара вкладки ztp_templates_tab.should_be_toolbar() # Проверка наличия таблицы шаблонов ztp_templates_tab.should_be_templates_table() # Получение количества строк в таблице rows_count = ztp_templates_tab.get_rows_count() # Проверка выделения строк ztp_templates_tab.check_templates_table_row_highlighting(0) ztp_templates_tab.check_templates_table_row_highlighting(rows_count - 1) ztp_templates_tab.check_templates_table_row_highlighting(int(rows_count / 2)) #@pytest.mark.skip(reason=" Временно исключено из тестирования") def test_templates_table_scrolling(self, browser: Page) -> None: """Проверка вертикального скроллинга таблицы шаблонов. Проверяет: 1. Возможность вертикальной прокрутки таблицы 2. Видимость строк после прокрутки вниз и вверх 3. Корректность отображения данных после скроллинга """ ztp_templates_tab = ZTPTemplatesTab(browser) browser.wait_for_timeout(2000) # Проверка возможности вертикального скроллинга is_scrollable = ztp_templates_tab.check_templates_table_vertical_scrolling() if is_scrollable: print("Таблица поддерживает вертикальный скроллинг") # Прокрутка вниз ztp_templates_tab.scroll_templates_table_down() browser.wait_for_timeout(1000) # Проверка видимости последней строки после прокрутки ztp_templates_tab.check_templates_table_last_row_visibility() # Прокрутка вверх ztp_templates_tab.scroll_templates_table_up() browser.wait_for_timeout(1000) # Проверка видимости первой строки после прокрутки ztp_templates_tab.check_templates_table_first_row_visibility() else: print("Таблица не поддерживает вертикальный скроллинг") # Проверка видимости первой строки ztp_templates_tab.check_templates_table_first_row_visibility() #@pytest.mark.skip(reason=" Временно исключено из тестирования") def test_templates_modal_window_close_buttons(self, browser: Page) -> None: """Тест закрытия модального окна шаблона разными способами. Проверяет: 1. Закрытие модального окна через кнопку 'Закрыть' в содержимом окна 2. Закрытие модального окна через кнопку закрытия в тулбаре 3. Корректность закрытия окна в обоих случаях Args: browser (Page): Экземпляр страницы Playwright для взаимодействия с UI. """ # Инициализация страницы шаблонов ztp_templates_tab = ZTPTemplatesTab(browser) # Проверка наличия таблицы шаблонов ztp_templates_tab.should_be_templates_table() # Добавляем задержку для загрузки данных browser.wait_for_timeout(2000) # Тест 1: Закрытие через кнопку 'Закрыть' в содержимом окна print("Тест 1: Закрытие через кнопку 'Закрыть'") title = ztp_templates_tab.open_template_modal_by_index(0) browser.wait_for_timeout(1000) # Проверка открытия модального окна ztp_templates_tab.should_be_modal_window() # Закрытие через кнопку 'Закрыть' ztp_templates_tab.close_modal_window(title) # Проверяем, что модальное окно закрылось ztp_templates_tab.should_not_be_modal_window() browser.wait_for_timeout(1000) # Тест 2: Закрытие через кнопку в тулбаре print("Тест 2: Закрытие через кнопку в тулбаре") title = ztp_templates_tab.open_template_modal_by_index(0) browser.wait_for_timeout(1000) # Проверка открытия модального окна ztp_templates_tab.should_be_modal_window() # Закрытие через кнопку в тулбаре ztp_templates_tab.close_modal_window_by_toolbar_button(title) # Проверяем, что модальное окно закрылось ztp_templates_tab.should_not_be_modal_window() print("Оба способа закрытия модального окна работают корректно") #@pytest.mark.skip(reason=" Временно исключено из тестирования") def test_templates_modal_window_content(self, browser: Page) -> None: """Тест содержимого модального окна шаблона. Проверяет: 1. Открытие модального окна при клике на строку таблицы 2. Наличие и содержимое модального окна 3. Наличие тулбара в модальном окне 4. Проверка кнопки закрытия и её подсказки 5. Закрытие модального окна """ # Инициализация страницы шаблонов ztp_templates_tab = ZTPTemplatesTab(browser) # Проверка наличия таблицы шаблонов ztp_templates_tab.should_be_templates_table() # Добавляем задержку для загрузки данных browser.wait_for_timeout(2000) # Открываем модальное окно, кликая на первую строку таблицы title = ztp_templates_tab.open_template_modal_by_index(0) # Добавляем задержку для открытия модального окна browser.wait_for_timeout(1000) # Проверка открытия модального окна ztp_templates_tab.should_be_modal_window() # Проверка содержимого модального окна ztp_templates_tab.check_templates_modal_content(title) # Закрытие модального окна через кнопку 'Закрыть' ztp_templates_tab.close_modal_window(title) # Проверяем, что модальное окно закрылось ztp_templates_tab.should_not_be_modal_window() #@pytest.mark.skip(reason=" Временно исключено из тестирования") def test_templates_modal_window_scrolling(self, browser: Page) -> None: """Тест скроллинга модального окна шаблона. Проверяет: 1. Открытие модального окна при клике на строку таблицы 2. Возможность вертикального скроллинга содержимого модального окна 3. Закрытие модального окна """ # Инициализация страницы шаблонов ztp_templates_tab = ZTPTemplatesTab(browser) # Проверка наличия таблицы шаблонов ztp_templates_tab.should_be_templates_table() # Добавляем задержку для загрузки данных browser.wait_for_timeout(2000) # Открываем модальное окно, кликая на первую строку таблицы title = ztp_templates_tab.open_template_modal_by_index(0) # Добавляем задержку для открытия модального окна browser.wait_for_timeout(1000) # Проверка открытия модального окна ztp_templates_tab.should_be_modal_window() # Проверка вертикального скроллинга модального окна is_scrollable = ztp_templates_tab.check_modal_vertical_scrolling() if is_scrollable: print("Модальное окно поддерживает вертикальный скроллинг") # Прокрутка вниз модального окна ztp_templates_tab.scroll_modal_down() browser.wait_for_timeout(1000) # Прокрутка вверх модального окна ztp_templates_tab.scroll_modal_up() browser.wait_for_timeout(1000) else: print("Модальное окно не поддерживает вертикальный скроллинг") # Закрытие модального окна через кнопку 'Закрыть' ztp_templates_tab.close_modal_window(title) # Проверяем, что модальное окно закрылось ztp_templates_tab.should_not_be_modal_window() #@pytest.mark.skip(reason=" Временно исключено из тестирования") def test_templates_modal_window_api_data_consistency(self, browser: Page) -> None: """Тест соответствия данных модального окна шаблона данным из API. Проверяет консистентность данных между интерфейсом пользователя и API: 1. Открытие модального окна просмотра шаблона по клику на строку таблицы 2. Получение и валидация данных из полей модального окна 3. Сравнение данных UI с эталонными данными из API запроса 4. Проверка корректности отображения всех параметров шаблона 5. Закрытие модального окна после проверки Args: browser (Page): Экземпляр страницы Playwright для взаимодействия с UI. """ # Инициализация страницы шаблонов ztp_templates_tab = ZTPTemplatesTab(browser) # Проверка наличия таблицы шаблонов ztp_templates_tab.should_be_templates_table() # Добавляем задержку для загрузки данных browser.wait_for_timeout(5000) # Открываем модальное окно, кликая на первую строку таблицы и возвращаем имя заголовка title = ztp_templates_tab.open_template_modal_by_index(0) # Добавляем задержку для открытия модального окна browser.wait_for_timeout(2000) # Проверка открытия модального окна ztp_templates_tab.should_be_modal_window() # Проверка соответствия данных модального окна данным из API ztp_templates_tab.verify_template_data_with_api(title) # Закрытие модального окна через кнопку закрытия ztp_templates_tab.close_modal_window_by_toolbar_button(title) # Проверяем, что модальное окно закрылось ztp_templates_tab.should_not_be_modal_window()