From ae2cd5611b86eb1798df74a889448243f3f56fe9 Mon Sep 17 00:00:00 2001 From: Radislav Date: Tue, 2 Sep 2025 09:41:58 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BE=D0=B6=D0=B8=D0=B4=D0=B0=D0=B5=D1=82=20?= =?UTF-8?q?=D0=B8=D1=81=D1=87=D0=B5=D0=B7=D0=BD=D0=BE=D0=B2=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=B2=D1=81=D0=B5=D1=85=20=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=B8=D0=B2=D0=BD=D1=8B=D1=85=20=D0=B2=D1=81=D0=BF=D0=BB=D1=8B?= =?UTF-8?q?=D0=B2=D0=B0=D1=8E=D1=89=D0=B8=D1=85=20=D0=BF=D0=BE=D0=B4=D1=81?= =?UTF-8?q?=D0=BA=D0=B0=D0=B7=D0=BE=D0=BA.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/base_page.py | 8 +++++++ pages/session_tab.py | 51 +++++++++++++++++++++++++------------------- 2 files changed, 37 insertions(+), 22 deletions(-) diff --git a/pages/base_page.py b/pages/base_page.py index 21de03a..99953d5 100644 --- a/pages/base_page.py +++ b/pages/base_page.py @@ -182,3 +182,11 @@ class BasePage: return True assert compare_lists(actual, expected), msg + + def wait_for_tooltip_to_disappear(self, timeout: int = 5000) -> None: + """Ожидает исчезновения всех активных всплывающих подсказок.""" + + self.page.mouse.click(10, 10) + tooltip_locator = self.page.locator(".v-tooltip__content.menuable__content__active") + + tooltip_locator.wait_for(state="hidden", timeout=timeout) diff --git a/pages/session_tab.py b/pages/session_tab.py index 7100616..761c840 100644 --- a/pages/session_tab.py +++ b/pages/session_tab.py @@ -32,7 +32,7 @@ class SessionsTab(BasePage): self.toolbar = ToolbarComponent(page, "Сессия") self.sessions_table = TableComponent(page) - + self.delete_session_confirm = ConfirmComponent(page, " Отмена ", " Удалить ") # Действия: @@ -75,37 +75,37 @@ class SessionsTab(BasePage): button_locator = row_locator.locator(ButtonLocators.BUTTON_DELETE_SESSION) return TooltipButton(self.page, button_locator, "delete_session_button") - + def get_session_token(self) -> str: """Возвращает токен текущего пользователя. - + Args: - + Returns: str: Токен текущего пользователя - + Raises: """ return host.get_access_token() def find_session_in_table(self, token: str) -> int: """Ищет сессию пользователя в таблице по выданному ему токену. - + Args: token (str): Токен пользователя - + Returns: int: Индекс строки или -1 если не найден - + Raises: AssertionError: Если таблица пуста. """ table_content = self.sessions_table.read(TableLocators.TABLE_WORK_AREA) if len(table_content) == 0: assert False, "The contents of the table are missing" - + del table_content[0] # Удаляем заголовок - + for row_index, session_info in enumerate(table_content): if token in session_info: return row_index @@ -121,46 +121,46 @@ class SessionsTab(BasePage): """Прокручивает таблицу сессий вниз.""" self.sessions_table.scroll_down(TableLocators.TABLE_SCROLL_CONTAINER) - + # Проверки: def check_delete_session_confirm_window(self): """ Проверяет контент и возможность горизонтального скроллинга окна подтверждения удаления сессии. """ - + # Поиск в таблице сессий сроки для текущего пользователя session_token = self.get_session_token() row_index = self.find_session_in_table(session_token) if row_index == -1: assert False, "Session for this token has not been found" - + # Найти кнопку удаления сессии и нажать на нее delete_session_button = self.get_delete_session_button_from_row(row_index) delete_session_button.click() - + # Проверка открытия окна подтверждения с заголовком "Удаление" title = "Удаление" self.delete_session_confirm.check_title( title, f"Confirmation dialog window text '{title}' is missing" ) - + # Проверка текста в окне подтверждения confirm_message = f"Удалить сессию {session_token}?" self.delete_session_confirm.check_text( confirm_message, "Confirmation dialog window text does not match what is expected" ) - + # Проверка горизонтального скроллинга is_scrollable_horizontally = self.delete_session_confirm.check_window_horizontal_scrolling() assert is_scrollable_horizontally, "Should be horizontal scrolling" - + self.delete_session_confirm.scroll_window_right() self.page.wait_for_timeout(3000) self.delete_session_confirm.scroll_window_left() self.page.wait_for_timeout(2000) - + # Нажать кнопку "Отмена" - self.delete_session_confirm.click_cancel_button() + self.delete_session_confirm.click_cancel_button() def check_sessions_table_content(self, verify: bool = False) -> None: """Проверяет содержимое таблицы сессий. @@ -283,12 +283,19 @@ class SessionsTab(BasePage): AssertionError: Если кнопка отсутствует или подсказка неверна. """ + # Ожидаем исчезновения предыдущих подсказок перед проверкой + self.wait_for_tooltip_to_disappear() + delete_button = self.get_delete_session_button_from_row(row_index) delete_button.check_presence( f"Delete session button is missing on {row_index} row" ) delete_button.check_tooltip_with_text(ButtonLocators.TOOLTIP, tooltip) - + + # Ожидаем исчезновения подсказки после проверки + self.wait_for_tooltip_to_disappear() + + def should_be_session_in_table(self, token: str) -> None: """Проверяет наличие сессии пользователя в таблице. @@ -298,7 +305,7 @@ class SessionsTab(BasePage): Raises: AssertionError: Если сессия не найдена. """ - found = self.find_session_in_table(token) + found = self.find_session_in_table(token) if found == -1: assert False, "Session for this token has not been found" @@ -311,7 +318,7 @@ class SessionsTab(BasePage): Raises: AssertionError: Если сессия найдена. """ - found = self.find_session_in_table(token) + found = self.find_session_in_table(token) if found != -1: assert False, "Session for this token has been found"