Актуализация тестов панели событий в соответствии с последними изменениями UI

main
nsubbot 2026-04-16 14:06:05 +03:00
parent e926b04a14
commit 18f7873145
14 changed files with 91 additions and 17 deletions

View File

@ -94,7 +94,7 @@ class EventsContainerComponent(BaseComponent):
self.last_page.click()
def click_filter_button(self) -> EventsFilterPanel:
"""Нажатие кнопки перехода на первую страницу"""
"""Нажатие кнопки фильтр"""
self.toolbar.click_button("filter_button")
expect(self.page.locator("div.menuable__content__active")).to_be_visible(), "Events filter is missing"
@ -207,6 +207,16 @@ class EventsContainerComponent(BaseComponent):
self.events_table.check_table_headers(actual_headers, expected_headers)
def check_events_table_status_button(self, row_index: int, tooltip_text: str) -> None:
""" Проверка наличия в строке кнопки статуса (состояния) и ее тултипа"""
loc = self.container_locator.locator(self.table_locator)
row_locator = self.events_table.get_row_locator(loc, row_index-1)
button = TooltipButton(self.page, row_locator.get_by_role("button"), "status_button")
button.check_visibility(f"Tooltip button is missing in {row_index} table row")
button.check_tooltip_with_text(tooltip_text)
def check_events_table_column_descending_order(self,
index: int,
convert2timestamp=False) -> bool:

View File

@ -114,8 +114,16 @@ class ActionsEventsContainer(EventsContainerComponent):
self.check_events_table_headers(events_table[0], expected_headers)
for i in range(len(expected_headers)):
actual_state = self.get_arrow_button_state(i)
assert actual_state == "down", f"Arrow state for column {i} should be 'down'"
if len(events_table) == 1:
logger.info("Table body is missing")
else:
rows_count = len(events_table)
for j in range(1, rows_count-1):
self.check_events_table_status_button(j, "Статус")
self.should_be_pagination_buttons()

View File

@ -62,6 +62,9 @@ class AuditEventsContainer(EventsContainerComponent):
assert False, "The contents of the events table are missing"
self.check_events_table_headers(events_table[0], expected_headers)
for i in range(len(expected_headers)):
actual_state = self.get_arrow_button_state(i)
assert actual_state == "down", f"Arrow state for column {i} should be 'down'"
if len(events_table) == 1:
logger.info("Table body is missing")
@ -97,6 +100,9 @@ class AuditEventsContainer(EventsContainerComponent):
assert False, "The contents of the events table are missing"
self.check_events_table_headers(events_table[0], expected_headers)
for i in range(len(expected_headers)):
actual_state = self.get_arrow_button_state(i)
assert actual_state == "down", f"Arrow state for column {i} should be 'down'"
if len(events_table) == 1:
logger.info("Table body is missing")

View File

@ -61,6 +61,9 @@ class EventsTabContainer(EventsContainerComponent):
assert False, "The contents of the events table are missing"
self.check_events_table_headers(events_table[0], expected_headers)
for i in range(len(expected_headers)):
actual_state = self.get_arrow_button_state(i)
assert actual_state == "down", f"Arrow state for column {i} should be 'down'"
if len(events_table) == 1:
logger.info("Table body is missing")

View File

@ -66,9 +66,19 @@ class MaintenanceEventsContainer(EventsContainerComponent):
assert False, "The contents of the events table are missing"
self.check_events_table_headers(events_table[0], expected_headers)
for i in range(len(expected_headers)):
actual_state = self.get_arrow_button_state(i)
assert actual_state == "down", f"Arrow state for column {i} should be 'down'"
if len(events_table) == 1:
rows_count = len(events_table)
if rows_count == 1:
logger.info("Table body is missing")
else:
j = 1
while j < rows_count:
self.check_events_table_status_button(j, "Состояние")
j += 1
self.should_be_pagination_buttons()

View File

@ -61,9 +61,21 @@ class SystemLogEventsContainer(EventsContainerComponent):
assert False, "The contents of the events table are missing"
self.check_events_table_headers(events_table[0], expected_headers)
for i in range(len(expected_headers)):
actual_state = self.get_arrow_button_state(i)
assert actual_state == "down", f"Arrow state for column {i} should be 'down'"
if len(events_table) == 1:
logger.info("Table body is missing")
else:
j = 1
# так как записей много, проверяем первые 40
rows_count = 40
if len(events_table) < 40:
rows_count = len(events_table)
while j < rows_count:
self.check_events_table_status_button(j, "Критичность")
j += 1
self.should_be_pagination_buttons()

View File

@ -74,3 +74,9 @@ class ViewTaskModalWindow(ModalWindowComponent):
""" Проверка соответствия заголовка таблицы ожидаемому"""
self.task_stages_table.check_table_headers(actual_headers, expected_headers)
def check_stages_table_row_highlighting(self, row_index: int) -> None:
"""Проверяет выделение указанной строки таблицы.
"""
self.task_stages_table.check_row_highlighting(self.task_stages_table_locator, row_index)

View File

@ -73,7 +73,7 @@ class TestActionsEventsContainer:
if rows_count > 3:
actions_events_container.check_events_table_row_highlighting(int(rows_count / 2))
@pytest.mark.develop
# @pytest.mark.develop
def test_events_table_scrolling(self, browser: Page):
"""Проверяет возможность скроллинга таблицы событий на примере таблицы Архив.
@ -176,6 +176,15 @@ class TestActionsEventsContainer:
task_view_window.check_stages_table_headers(stages_table_content[0], expected_task_headers)
stages_table_content.pop(0)
rows_count = len(stages_table_content)
if rows_count != 0:
# Проверка выделения строк
task_view_window.check_stages_table_row_highlighting(0)
if rows_count > 1:
task_view_window.check_stages_table_row_highlighting(rows_count - 1)
if rows_count > 3:
task_view_window.check_stages_table_row_highlighting(int(rows_count / 2))
payload = {"filter": {"page": 1},
"count": 40}
@ -246,9 +255,9 @@ class TestActionsEventsContainer:
# convert2timestamp=True)
# assert is_descending_order, "Column data should be in descending order"
# @pytest.mark.develop
@pytest.mark.develop
def test_real_time_events_table_pagination(self, browser: Page):
"""Проверяет возможность пагинации таблицы событий.
"""Проверяет возможность пагинации таблицы событий на примере вкладки 'Реальное время'.
Args:
browser: Экземпляр страницы Playwright.
@ -268,6 +277,7 @@ class TestActionsEventsContainer:
# Проверка начального состояния
tested_pages = 1
pages = 1
payload = {"filter": {"page": 1},
"count": 40}
@ -359,7 +369,7 @@ class TestActionsEventsContainer:
counter += 1
browser.wait_for_timeout(2000)
if counter == tested_pages:
if counter == tested_pages and counter == pages:
actions_events_container.should_be_final_state()
else:
actions_events_container.should_be_all_enabled()

View File

@ -183,6 +183,7 @@ class TestAuditEventsContainer:
# Проверка начального состояния
tested_pages = 1
pages = 1
# to do: некорректный запрос в бэк, должно быть "filter": {"page": 0}
payload = {"table": "default",
@ -282,7 +283,7 @@ class TestAuditEventsContainer:
counter += 1
browser.wait_for_timeout(2000)
if counter == tested_pages:
if counter == tested_pages and counter == pages:
audit_events_container.should_be_final_state()
else:
audit_events_container.should_be_all_enabled()

View File

@ -246,6 +246,7 @@ class TestAuditEventsContainerSecurity:
# Проверка начального состояния
tested_pages = 1
pages = 1
# to do: некорректный запрос в бэк, должно быть "filter": {"page": 0}
payload = {"table": "default",
@ -346,7 +347,7 @@ class TestAuditEventsContainerSecurity:
counter += 1
browser.wait_for_timeout(2000)
if counter == tested_pages:
if counter == tested_pages and counter == pages:
security_events_container.should_be_final_state()
else:
security_events_container.should_be_all_enabled()

View File

@ -39,7 +39,7 @@ class TestEventPanel:
# Проверяем соответствие тултипов информации на кнопках
tooltip_event_counters = mp.get_event_counters_by_tooltips()
button_event_counters = mp.get_event_counters_by_tooltips()
button_event_counters = mp.get_event_counters_by_buttons()
for event, counter in tooltip_event_counters.items():
button_counter = button_event_counters.get(event)
@ -49,7 +49,7 @@ class TestEventPanel:
if button_counter != counter:
assert False, f"Expected tooltip value {counter} is not equal button value {button_counter} for event button {event}"
@pytest.mark.develop
# @pytest.mark.develop
def test_event_panel_expand_buttons(self, browser: Page) -> None:
"""Проверяет состояние и количество кнопок расширения рабочей области панели событий.

View File

@ -34,7 +34,7 @@ class TestEventsTabContainer:
events_tab_container = mp.click_events_panel_events_tab()
events_tab_container.check_content()
#@pytest.mark.skip(reason="Отсутствуют данные для вывода в таблицу событий")
@pytest.mark.skip(reason="Отсутствуют данные для вывода в таблицу событий")
def test_events_table_row_highlighting(self, browser: Page):
"""Проверяет выделение строк в таблице событий.
@ -187,6 +187,7 @@ class TestEventsTabContainer:
# Проверка начального состояния
tested_pages = 1
pages = 1
# to do: некорректный запрос в бэк, должно быть "filter": {"page": 0}
payload = {"table": "syslogs",
@ -280,7 +281,7 @@ class TestEventsTabContainer:
counter += 1
browser.wait_for_timeout(2000)
if counter == tested_pages:
if counter == tested_pages and counter == pages:
events_tab_container.should_be_final_state()
else:
events_tab_container.should_be_all_enabled()

View File

@ -131,7 +131,7 @@ class TestMaintenanceEventsContainer:
# Проверка видимости первой строки после прокрутки
maintenance_events_container.check_events_table_first_row_visibility()
@pytest.mark.skip(reason="Отсутствуют данные для вывода в таблицу событий")
# @pytest.mark.skip(reason="Отсутствуют данные для вывода в таблицу событий")
def test_events_table_column_sorting(self, browser: Page):
"""Проверяет сортировку колонки 'Время' в таблице событий.
@ -168,7 +168,7 @@ class TestMaintenanceEventsContainer:
convert2timestamp=True)
assert is_descending_order, "Column data should be in descending order"
@pytest.mark.skip(reason="Отсутствуют данные для вывода в таблицу событий")
# @pytest.mark.skip(reason="Отсутствуют данные для вывода в таблицу событий")
def test_events_table_pagination(self, browser: Page):
"""Проверяет возможность пагинации таблицы событий.
@ -188,6 +188,7 @@ class TestMaintenanceEventsContainer:
# Проверка начального состояния
tested_pages = 1
pages = 1
# to do: некорректный запрос в бэк, должно быть "filter": {"page": 0}
payload = {"id": [ "/physical"],
@ -200,7 +201,11 @@ class TestMaintenanceEventsContainer:
response_body = mp.get_response_body(response)
if response_body:
pages = response_body["data"]["pages"]
pages = int(len(response_body)/40)
if (len(response_body) % 40) > 0:
pages = pages + 1
# print(f"pages = {pages}")
if pages > 5:
tested_pages = 5
@ -282,7 +287,7 @@ class TestMaintenanceEventsContainer:
counter += 1
browser.wait_for_timeout(2000)
if counter == tested_pages:
if counter == tested_pages and counter == pages:
maintenance_events_container.should_be_final_state()
else:
maintenance_events_container.should_be_all_enabled()

View File

@ -188,6 +188,7 @@ class TestSystemLogEventsContainer:
# Проверка начального состояния
tested_pages = 1
pages = 1
# to do: некорректный запрос в бэк, должно быть "filter": {"page": 0}
payload = {"table": "logs",
@ -281,7 +282,7 @@ class TestSystemLogEventsContainer:
counter += 1
browser.wait_for_timeout(2000)
if counter == tested_pages:
if counter == tested_pages and counter == pages:
system_log_events_container.should_be_final_state()
else:
system_log_events_container.should_be_all_enabled()