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

310 lines
14 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
# @pytest.mark.smoke
class TestSystemLogEventsContainer:
"""Класс тестов для проверки контейнера для отображения событий системного журнала..
Тесты покрывают следующие сценарии:
1. test_system_log_events_content: Проверяет содержимое контейнера для отображения событий системного журнала.
Атрибуты:
browser: Фикстура для работы с браузером.
"""
# @pytest.mark.develop
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()
# @pytest.mark.develop
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
state = system_log_events_container.get_arrow_button_state(index)
assert state == "down", "Arrow button should be down"
system_log_events_container.click_event_table_header_arrow(index)
browser.wait_for_timeout(500)
state = system_log_events_container.get_arrow_button_state(index)
assert state == "up", "Arrow button should be up"
is_descending_order = system_log_events_container.check_events_table_column_descending_order(index,
convert2timestamp=True)
assert not is_descending_order, "Column data should be in ascending order"
system_log_events_container.click_event_table_header_arrow(index)
browser.wait_for_timeout(500)
state = system_log_events_container.get_arrow_button_state(index)
assert state == "down", "Arrow button should be down"
is_descending_order = system_log_events_container.check_events_table_column_descending_order(index,
convert2timestamp=True)
assert is_descending_order, "Column data should be in descending order"
# @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()
# Проверка начального состояния
tested_pages = 1
# to do: некорректный запрос в бэк, должно быть "filter": {"page": 0}
payload = {"table": "logs",
"filter": {"page": 1},
"count": 40
}
response = mp.send_post_api_request("e-nms/logs_enode", payload)
if response.status == 200:
response_body = mp.get_response_body(response)
if response_body:
pages = response_body["data"]["pages"]
if pages > 5:
tested_pages = 5
else:
tested_pages = pages
current_number = system_log_events_container.get_current_data_set_number()
assert current_number == 1, "The first page should be number one"
if tested_pages == 1:
system_log_events_container.should_be_all_disabled()
else:
system_log_events_container.should_be_initial_state()
# Переход на самую последнюю страницу, возврат на страницу назад, потом на страницу вперед
system_log_events_container.click_last_page()
browser.wait_for_timeout(2000)
system_log_events_container.should_be_final_state()
last_number = system_log_events_container.get_current_data_set_number()
system_log_events_container.click_chevron_left()
browser.wait_for_timeout(4000)
if last_number == 2:
system_log_events_container.should_be_initial_state()
else:
system_log_events_container.should_be_all_enabled()
counter = last_number - 1
current_number = system_log_events_container.get_current_data_set_number()
assert current_number == counter, f"Expected page number {counter} is not equal actual {current_number}"
system_log_events_container.click_chevron_right()
browser.wait_for_timeout(4000)
system_log_events_container.should_be_final_state()
current_number = system_log_events_container.get_current_data_set_number()
assert current_number == last_number, \
f"Expected page number {last_number} is not equal actual {current_number}"
# Переход на первую страницу, переход на следующую страницу, возврат на первую страницу
system_log_events_container.click_first_page()
browser.wait_for_timeout(2000)
system_log_events_container.should_be_initial_state()
current_number = system_log_events_container.get_current_data_set_number()
assert current_number == 1, f"Expected page number 1 is not equal actual {current_number}"
system_log_events_container.click_chevron_right()
browser.wait_for_timeout(4000)
if tested_pages == 2:
system_log_events_container.should_be_final_state()
else:
system_log_events_container.should_be_all_enabled()
current_number = system_log_events_container.get_current_data_set_number()
assert current_number == 2, f"Expected page number 2 is not equal actual {current_number}"
system_log_events_container.click_chevron_left()
browser.wait_for_timeout(4000)
system_log_events_container.should_be_initial_state()
current_number = system_log_events_container.get_current_data_set_number()
assert current_number == 1, f"Expected page number 1 is not equal actual {current_number}"
if tested_pages > 2:
# загрузка страниц от начала и до конца
# to_do: проверка, что происходит обновление содержимого таблицы
counter = 1
while counter < tested_pages:
system_log_events_container.click_chevron_right()
counter += 1
browser.wait_for_timeout(2000)
if counter == tested_pages:
system_log_events_container.should_be_final_state()
else:
system_log_events_container.should_be_all_enabled()
current_number = system_log_events_container.get_current_data_set_number()
assert current_number == counter,\
f"Expected page number {counter} is not equal actual {current_number}"
# загрузка страниц от конца к началу
# to_do: проверка, что происходит обновление содержимого таблицы
while counter > 2:
system_log_events_container.click_chevron_left()
browser.wait_for_timeout(2000)
system_log_events_container.should_be_all_enabled()
counter -= 1
current_number = system_log_events_container.get_current_data_set_number()
assert current_number == counter,\
f"Expected page number {counter} is not equal actual {current_number}"
# Проверка возврата к начальному состоянию
system_log_events_container.click_chevron_left()
browser.wait_for_timeout(2000)
system_log_events_container.should_be_initial_state()
current_number = system_log_events_container.get_current_data_set_number()
assert current_number == 1, "The first page should be number one"