diff --git a/components/events_container_component.py b/components/events_container_component.py index a8d3ebe..57b1264 100644 --- a/components/events_container_component.py +++ b/components/events_container_component.py @@ -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: diff --git a/components_derived/container_actions_events.py b/components_derived/container_actions_events.py index 22ded36..8414c55 100644 --- a/components_derived/container_actions_events.py +++ b/components_derived/container_actions_events.py @@ -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() diff --git a/components_derived/container_audit_events.py b/components_derived/container_audit_events.py index 210032f..b4cab87 100644 --- a/components_derived/container_audit_events.py +++ b/components_derived/container_audit_events.py @@ -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") diff --git a/components_derived/container_events.py b/components_derived/container_events.py index 239f428..157a845 100644 --- a/components_derived/container_events.py +++ b/components_derived/container_events.py @@ -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") diff --git a/components_derived/container_maintenance_events.py b/components_derived/container_maintenance_events.py index cbcd81f..75721e4 100644 --- a/components_derived/container_maintenance_events.py +++ b/components_derived/container_maintenance_events.py @@ -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() diff --git a/components_derived/container_system_log_events.py b/components_derived/container_system_log_events.py index ef34b9a..f9d4455 100644 --- a/components_derived/container_system_log_events.py +++ b/components_derived/container_system_log_events.py @@ -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() diff --git a/components_derived/modal_view_task.py b/components_derived/modal_view_task.py index 7407452..48371fc 100644 --- a/components_derived/modal_view_task.py +++ b/components_derived/modal_view_task.py @@ -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) diff --git a/tests/e2e/event_panel/test_actions_events_container.py b/tests/e2e/event_panel/test_actions_events_container.py index 5cdd153..74a0f4e 100644 --- a/tests/e2e/event_panel/test_actions_events_container.py +++ b/tests/e2e/event_panel/test_actions_events_container.py @@ -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() diff --git a/tests/e2e/event_panel/test_audit_events_container.py b/tests/e2e/event_panel/test_audit_events_container.py index db6a14c..7db2b46 100644 --- a/tests/e2e/event_panel/test_audit_events_container.py +++ b/tests/e2e/event_panel/test_audit_events_container.py @@ -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() diff --git a/tests/e2e/event_panel/test_audit_events_container_security.py b/tests/e2e/event_panel/test_audit_events_container_security.py index 44ac2c8..e1601e8 100644 --- a/tests/e2e/event_panel/test_audit_events_container_security.py +++ b/tests/e2e/event_panel/test_audit_events_container_security.py @@ -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() diff --git a/tests/e2e/event_panel/test_event_panel.py b/tests/e2e/event_panel/test_event_panel.py index d0f64ef..56dbea3 100644 --- a/tests/e2e/event_panel/test_event_panel.py +++ b/tests/e2e/event_panel/test_event_panel.py @@ -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: """Проверяет состояние и количество кнопок расширения рабочей области панели событий. diff --git a/tests/e2e/event_panel/test_events_tab_container.py b/tests/e2e/event_panel/test_events_tab_container.py index 969e399..0c0a7f8 100644 --- a/tests/e2e/event_panel/test_events_tab_container.py +++ b/tests/e2e/event_panel/test_events_tab_container.py @@ -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() diff --git a/tests/e2e/event_panel/test_maintenance_events_container.py b/tests/e2e/event_panel/test_maintenance_events_container.py index aba0f34..7489a54 100644 --- a/tests/e2e/event_panel/test_maintenance_events_container.py +++ b/tests/e2e/event_panel/test_maintenance_events_container.py @@ -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() diff --git a/tests/e2e/event_panel/test_system_log_events_container.py b/tests/e2e/event_panel/test_system_log_events_container.py index 06c4d8d..c1e9382 100644 --- a/tests/e2e/event_panel/test_system_log_events_container.py +++ b/tests/e2e/event_panel/test_system_log_events_container.py @@ -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()