"""Модуль тестов контейнера для отображения событий системного журнала. Содержит тесты для проверки функциональности контейнера для отображения событий системного журнала. """ import pytest from playwright.sync_api import Page from pages.main_page import MainPage from pages.login_page import LoginPage from tools.logger import get_logger logger = get_logger("TEST_SYSTEM_LOG_EVENTS_CONTAINER") # @pytest.mark.smoke class TestSystemLogEventsContainer: """Класс тестов для проверки контейнера для отображения событий системного журнала.. Тесты покрывают следующие сценарии: 1. test_system_log_events_content: Проверяет содержимое контейнера для отображения событий системного журнала. Атрибуты: browser: Фикстура для работы с браузером. """ def test_system_log_events_content(self, browser: Page) -> None: """Проверяет содержимое контейнера для отображения событий системного журнала. Args: browser: Экземпляр страницы Playwright. """ lp = LoginPage(browser) lp.do_login() mp = MainPage(browser) mp.should_be_event_panel() system_log_events_container = mp.click_events_panel_system_log_tab() system_log_events_container.check_content() def test_events_table_row_highlighting(self, browser: Page): """Проверяет выделение строк в таблице событий. Args: browser: Экземпляр страницы Playwright. """ lp = LoginPage(browser) lp.do_login() mp = MainPage(browser) mp.should_be_event_panel() system_log_events_container = mp.click_events_panel_system_log_tab() # Получение количества строк в таблице rows_count = system_log_events_container.get_events_table_rows_count() # Проверка выделения строк system_log_events_container.check_events_table_row_highlighting(0) system_log_events_container.check_events_table_row_highlighting(rows_count - 1) system_log_events_container.check_events_table_row_highlighting(int(rows_count / 2)) def test_events_table_scrolling(self, browser: Page): """Проверяет возможность скроллинга таблицы событий. Args: browser: Экземпляр страницы Playwright. """ lp = LoginPage(browser) lp.do_login() mp = MainPage(browser) mp.should_be_event_panel() system_log_events_container = mp.click_events_panel_system_log_tab() events_panel_position = mp.get_events_panel_position() # Проверка, что панель с таблицей открыта assert events_panel_position != "bottom", "Panel with system log events should be opened" is_scrollable = system_log_events_container.check_events_table_verticall_scrolling() # Убеждаемся, что панель открыта наполовину и проверяем скроллинг assert events_panel_position == "center",\ "Panel with system log events should be located on the main page center" assert is_scrollable, "System log events table should be scrollable" # Скроллинг вниз system_log_events_container.scroll_events_table_down() browser.wait_for_timeout(1000) # Проверка видимости последней строки после прокрутки system_log_events_container.check_events_table_last_row_visibility() # Скроллинг вверх system_log_events_container.scroll_events_table_up() browser.wait_for_timeout(1000) # Проверка видимости первой строки после прокрутки system_log_events_container.check_events_table_first_row_visibility() # Раскрываем панель полностью и проверяем скроллинг assert mp.check_expand_less_button(), \ "Expand less button should be present" mp.click_events_panel_expand_less_button() mp.wait_for_timeout(500) events_panel_position = mp.get_events_panel_position() assert events_panel_position == "top",\ "Panel with system log events should be located on the main page top" is_scrollable = system_log_events_container.check_events_table_verticall_scrolling() assert is_scrollable, "System log events table should be scrollable in the full window" # Скроллинг вниз system_log_events_container.scroll_events_table_down() browser.wait_for_timeout(1000) # Проверка видимости последней строки после прокрутки system_log_events_container.check_events_table_last_row_visibility() # Скроллинг вверх system_log_events_container.scroll_events_table_up() browser.wait_for_timeout(1000) # Проверка видимости первой строки после прокрутки system_log_events_container.check_events_table_first_row_visibility() def test_events_table_column_sorting(self, browser: Page): """Проверяет сортировку колонки 'Время' в таблице событий. Args: browser: Экземпляр страницы Playwright. """ lp = LoginPage(browser) lp.do_login() mp = MainPage(browser) mp.should_be_event_panel() system_log_events_container = mp.click_events_panel_system_log_tab() index = 1 # Получаем начальное состояние сортировки initial_state = system_log_events_container.get_arrow_button_state(index) # Кликаем для изменения сортировки system_log_events_container.click_event_table_header_arrow(index) browser.wait_for_timeout(500) new_state = system_log_events_container.get_arrow_button_state(index) # Проверяем что состояние изменилось assert new_state != initial_state, "Arrow button state should change after click" # Проверяем порядок данных в зависимости от состояния if new_state == "up": is_descending_order = system_log_events_container.check_events_table_column_descending_order(index) assert not is_descending_order, "Column data should be in ascending order when arrow is up" else: is_descending_order = system_log_events_container.check_events_table_column_descending_order(index) assert is_descending_order, "Column data should be in descending order when arrow is down" # Возвращаем обратно и проверяем system_log_events_container.click_event_table_header_arrow(index) browser.wait_for_timeout(500) final_state = system_log_events_container.get_arrow_button_state(index) assert final_state == initial_state, "Arrow button should return to initial state after second click" @pytest.mark.develop def test_events_table_pagination(self, browser: Page): """Проверяет возможность пагинации таблицы событий. Args: browser: Экземпляр страницы Playwright. """ lp = LoginPage(browser) lp.do_login() mp = MainPage(browser) mp.should_be_event_panel() system_log_events_container = mp.click_events_panel_system_log_tab() system_log_events_container.should_be_pagination_buttons() # Проверка начального состояния is_chevron_left_disabled = system_log_events_container.is_chevron_left_disabled() assert is_chevron_left_disabled, "Arrow Left button should be disabled" is_chevron_right_disabled = system_log_events_container.is_chevron_right_disabled() assert not is_chevron_right_disabled, "Arrow Right button should be enabled" current_number = system_log_events_container.get_current_data_set_number() assert current_number == 1, "The first page should be number one" # Запоминаем начальный номер страницы previous_page = current_number pages_visited = [current_number] # Переход вперед по страницам max_pages = 200 # Защита от бесконечного цикла page_count = 0 while not is_chevron_right_disabled and page_count < max_pages: system_log_events_container.click_chevron_right() browser.wait_for_timeout(300) # Даем время на загрузку current_number = system_log_events_container.get_current_data_set_number() # Проверяем что мы перешли на новую страницу (номер изменился) assert current_number != previous_page, f"Page number should change after clicking next. Was {previous_page}, still {current_number}" # Проверяем что мы не возвращаемся на уже посещенную страницу assert current_number not in pages_visited, f"Page {current_number} was already visited. Pages visited: {pages_visited}" pages_visited.append(current_number) previous_page = current_number page_count += 1 is_chevron_left_disabled = system_log_events_container.is_chevron_left_disabled() assert not is_chevron_left_disabled, "Arrow Left button should be enabled after moving forward" is_chevron_right_disabled = system_log_events_container.is_chevron_right_disabled() logger.info(f"Visited {len(pages_visited)} pages: {pages_visited}") # Переход назад по страницам while not is_chevron_left_disabled: system_log_events_container.click_chevron_left() browser.wait_for_timeout(300) # Даем время на загрузку current_number = system_log_events_container.get_current_data_set_number() # Проверяем что мы перешли на предыдущую страницу # (должны идти в обратном порядке от последней к первой) expected_previous_page = pages_visited[-2] if len(pages_visited) > 1 else 1 assert current_number == expected_previous_page, f"Expected page {expected_previous_page} when going back, but got {current_number}. Pages visited: {pages_visited}" # Удаляем последнюю страницу из списка (движемся назад) pages_visited.pop() is_chevron_left_disabled = system_log_events_container.is_chevron_left_disabled() is_chevron_right_disabled = system_log_events_container.is_chevron_right_disabled() assert not is_chevron_right_disabled, "Arrow Right button should be enabled when going back" # Проверка возврата к начальному состоянию is_chevron_left_disabled = system_log_events_container.is_chevron_left_disabled() assert is_chevron_left_disabled, "Arrow Left button should be disabled at the first page" is_chevron_right_disabled = system_log_events_container.is_chevron_right_disabled() assert not is_chevron_right_disabled, "Arrow Right button should be enabled at the first page" final_number = system_log_events_container.get_current_data_set_number() assert final_number == 1, f"Should return to first page (1), but got {final_number}"