e-nms_qa_automation/tests/e2e/test_system_log_events_cont...

264 lines
12 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"""Модуль тестов контейнера для отображения событий системного журнала.
Содержит тесты для проверки функциональности
контейнера для отображения событий системного журнала.
"""
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}"