Добавлено ожидает исчезновения всех активных всплывающих подсказок.

pull/1/head
Radislav 2025-09-02 09:41:58 +03:00
parent d39ce05c4f
commit ae2cd5611b
2 changed files with 37 additions and 22 deletions

View File

@ -182,3 +182,11 @@ class BasePage:
return True return True
assert compare_lists(actual, expected), msg 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)

View File

@ -32,7 +32,7 @@ class SessionsTab(BasePage):
self.toolbar = ToolbarComponent(page, "Сессия") self.toolbar = ToolbarComponent(page, "Сессия")
self.sessions_table = TableComponent(page) self.sessions_table = TableComponent(page)
self.delete_session_confirm = ConfirmComponent(page, " Отмена ", " Удалить ") self.delete_session_confirm = ConfirmComponent(page, " Отмена ", " Удалить ")
# Действия: # Действия:
@ -75,37 +75,37 @@ class SessionsTab(BasePage):
button_locator = row_locator.locator(ButtonLocators.BUTTON_DELETE_SESSION) button_locator = row_locator.locator(ButtonLocators.BUTTON_DELETE_SESSION)
return TooltipButton(self.page, button_locator, "delete_session_button") return TooltipButton(self.page, button_locator, "delete_session_button")
def get_session_token(self) -> str: def get_session_token(self) -> str:
"""Возвращает токен текущего пользователя. """Возвращает токен текущего пользователя.
Args: Args:
Returns: Returns:
str: Токен текущего пользователя str: Токен текущего пользователя
Raises: Raises:
""" """
return host.get_access_token() return host.get_access_token()
def find_session_in_table(self, token: str) -> int: def find_session_in_table(self, token: str) -> int:
"""Ищет сессию пользователя в таблице по выданному ему токену. """Ищет сессию пользователя в таблице по выданному ему токену.
Args: Args:
token (str): Токен пользователя token (str): Токен пользователя
Returns: Returns:
int: Индекс строки или -1 если не найден int: Индекс строки или -1 если не найден
Raises: Raises:
AssertionError: Если таблица пуста. AssertionError: Если таблица пуста.
""" """
table_content = self.sessions_table.read(TableLocators.TABLE_WORK_AREA) table_content = self.sessions_table.read(TableLocators.TABLE_WORK_AREA)
if len(table_content) == 0: if len(table_content) == 0:
assert False, "The contents of the table are missing" assert False, "The contents of the table are missing"
del table_content[0] # Удаляем заголовок del table_content[0] # Удаляем заголовок
for row_index, session_info in enumerate(table_content): for row_index, session_info in enumerate(table_content):
if token in session_info: if token in session_info:
return row_index return row_index
@ -121,46 +121,46 @@ class SessionsTab(BasePage):
"""Прокручивает таблицу сессий вниз.""" """Прокручивает таблицу сессий вниз."""
self.sessions_table.scroll_down(TableLocators.TABLE_SCROLL_CONTAINER) self.sessions_table.scroll_down(TableLocators.TABLE_SCROLL_CONTAINER)
# Проверки: # Проверки:
def check_delete_session_confirm_window(self): def check_delete_session_confirm_window(self):
""" Проверяет контент и возможность горизонтального скроллинга окна подтверждения удаления сессии. """ """ Проверяет контент и возможность горизонтального скроллинга окна подтверждения удаления сессии. """
# Поиск в таблице сессий сроки для текущего пользователя # Поиск в таблице сессий сроки для текущего пользователя
session_token = self.get_session_token() session_token = self.get_session_token()
row_index = self.find_session_in_table(session_token) row_index = self.find_session_in_table(session_token)
if row_index == -1: if row_index == -1:
assert False, "Session for this token has not been found" 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 = self.get_delete_session_button_from_row(row_index)
delete_session_button.click() delete_session_button.click()
# Проверка открытия окна подтверждения с заголовком "Удаление" # Проверка открытия окна подтверждения с заголовком "Удаление"
title = "Удаление" title = "Удаление"
self.delete_session_confirm.check_title( self.delete_session_confirm.check_title(
title, title,
f"Confirmation dialog window text '{title}' is missing" f"Confirmation dialog window text '{title}' is missing"
) )
# Проверка текста в окне подтверждения # Проверка текста в окне подтверждения
confirm_message = f"Удалить сессию {session_token}?" confirm_message = f"Удалить сессию {session_token}?"
self.delete_session_confirm.check_text( self.delete_session_confirm.check_text(
confirm_message, confirm_message,
"Confirmation dialog window text does not match what is expected" "Confirmation dialog window text does not match what is expected"
) )
# Проверка горизонтального скроллинга # Проверка горизонтального скроллинга
is_scrollable_horizontally = self.delete_session_confirm.check_window_horizontal_scrolling() is_scrollable_horizontally = self.delete_session_confirm.check_window_horizontal_scrolling()
assert is_scrollable_horizontally, "Should be horizontal scrolling" assert is_scrollable_horizontally, "Should be horizontal scrolling"
self.delete_session_confirm.scroll_window_right() self.delete_session_confirm.scroll_window_right()
self.page.wait_for_timeout(3000) self.page.wait_for_timeout(3000)
self.delete_session_confirm.scroll_window_left() self.delete_session_confirm.scroll_window_left()
self.page.wait_for_timeout(2000) 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: def check_sessions_table_content(self, verify: bool = False) -> None:
"""Проверяет содержимое таблицы сессий. """Проверяет содержимое таблицы сессий.
@ -283,12 +283,19 @@ class SessionsTab(BasePage):
AssertionError: Если кнопка отсутствует или подсказка неверна. AssertionError: Если кнопка отсутствует или подсказка неверна.
""" """
# Ожидаем исчезновения предыдущих подсказок перед проверкой
self.wait_for_tooltip_to_disappear()
delete_button = self.get_delete_session_button_from_row(row_index) delete_button = self.get_delete_session_button_from_row(row_index)
delete_button.check_presence( delete_button.check_presence(
f"Delete session button is missing on {row_index} row" f"Delete session button is missing on {row_index} row"
) )
delete_button.check_tooltip_with_text(ButtonLocators.TOOLTIP, tooltip) 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: def should_be_session_in_table(self, token: str) -> None:
"""Проверяет наличие сессии пользователя в таблице. """Проверяет наличие сессии пользователя в таблице.
@ -298,7 +305,7 @@ class SessionsTab(BasePage):
Raises: Raises:
AssertionError: Если сессия не найдена. AssertionError: Если сессия не найдена.
""" """
found = self.find_session_in_table(token) found = self.find_session_in_table(token)
if found == -1: if found == -1:
assert False, "Session for this token has not been found" assert False, "Session for this token has not been found"
@ -311,7 +318,7 @@ class SessionsTab(BasePage):
Raises: Raises:
AssertionError: Если сессия найдена. AssertionError: Если сессия найдена.
""" """
found = self.find_session_in_table(token) found = self.find_session_in_table(token)
if found != -1: if found != -1:
assert False, "Session for this token has been found" assert False, "Session for this token has been found"