"""Модуль диалогового окна просмотра сессионных данных пользователя. Содержит класс для работы с диалоговым окном просмотра сессионных данных пользователя через Playwright. """ from playwright.sync_api import Page, Locator from tools.logger import get_logger from locators.user_card_locators import UserCardLocators from elements.tooltip_button_element import TooltipButton from elements.text_element import Text from elements.button_element import Button from components.table_component import TableComponent from components.base_component import BaseComponent logger = get_logger("USER_SETTINGS_DIALOG") class UserSettingsDialogWindow(BaseComponent): """Компонент диалоговое окно просмотра сессионных данных пользователя. Предоставляет методы для взаимодействия с элементами диалогового окна просмотра сессионных данных пользовател. """ def __init__(self, page: Page): """Инициализирует компонент диалоговое окно просмотра сессионных данных пользовател. Args: page: Экземпляр страницы Playwright. """ super().__init__(page) dialog_window_locator = page.locator(UserCardLocators.DIALOG_USER_SETTINGS) self.dialog_window_title = Text(page, dialog_window_locator.\ locator(UserCardLocators.TITLE_DIALOG_USER_SETTINGS), "dialog window title") self.close_button = Button(page, dialog_window_locator.\ locator(UserCardLocators.HEADER_DIALOG_USER_SETTINGS). \ get_by_role("button"), "close button") self.user_settings_table = TableComponent(page) # Действия: def click_close_button(self): """Нажимает кнопку закрытия окна. Выполняет клик по кнопке 'Закрыть' на строке с заголовком окна. """ self.close_button.click() def get_delete_button_from_row(self, row_index: int) -> TooltipButton: """Возвращает кнопку удаления сеанса для указанной строки. Args: row_index: Индекс строки в таблице. Returns: TooltipButton: Кнопка с подсказкой. Raises: AssertionError: Если строка не найдена. """ row_locator = self.user_settings_table.get_row_locator( UserCardLocators.TABLE_WORK_AREA, row_index ) assert isinstance(row_locator, Locator), f"Row with index {row_index} is missing" button_locator = row_locator.get_by_role("button") return TooltipButton(self.page, button_locator, "delete_button") # Проверки: def check_content(self) -> None: """Проверяет содержимое окно просмотра сессионных данных пользователя.""" self.dialog_window_title.check_have_text("Настройки", \ "Title 'Настройки' is missing on user settings window top") self.close_button.check_visibility("Close button is missing on user settings window top") self.should_be_user_settings_table() self.check_user_settings_table_content() def check_window_absence(self) -> None: """Проверка отсутствия окна на странице. Raises: AssertionError: если окнo присутствует на странице. """ self.check_absence(UserCardLocators.DIALOG_USER_SETTINGS, \ "User settings dialog window is present") def check_window_visibility(self) -> None: """Проверка видимости окна на странице. Raises: AssertionError: если окнo отсутствует на странице. """ self.check_visibility(UserCardLocators.DIALOG_USER_SETTINGS, \ "User settings dialog window is missing") def check_user_settings_table_content(self) -> None: """Проверяет содержимое таблицы сессионных данных пользователя. Raises: AssertionError: Если таблица пуста или заголовки неверны. """ expected_headers = [ 'ПОЛЬЗОВАТЕЛЬ', 'IP АДРЕС', 'ВРЕМЯ НАЧАЛА СЕССИИ', 'ДЕЙСТВИЯ' ] table_content = self.user_settings_table.read(UserCardLocators.TABLE_WORK_AREA) len_table_content = len(table_content) if len_table_content == 0: assert False, "The contents of the table are missing" actual_headers = table_content[0] assert actual_headers == expected_headers,\ f"Expected table headers {expected_headers} are not equal {actual_headers}" if len_table_content == 1: assert False, "Table body is missing" for index in range(len_table_content - 1): self.should_be_delete_button_on_user_settings_table_row(index, "Удалить") def should_be_user_settings_table(self) -> None: """Проверяет наличие таблицы сессионных данных пользователя. Raises: AssertionError: Если таблица отсутствует. """ self.user_settings_table.check_visibility( UserCardLocators.TABLE_WORK_AREA, "User settings table is missing") def should_be_delete_button_on_user_settings_table_row(self, row_index: int, tooltip: str ) -> None: """Проверяет наличие кнопки удаления в строке таблицы. Args: row_index: Индекс проверяемой строки. tooltip: Ожидаемый текст подсказки. Raises: AssertionError: Если кнопка отсутствует или подсказка неверна. """ delete_button = self.get_delete_button_from_row(row_index) # Ожидаем исчезновения предыдущих подсказок перед проверкой delete_button.wait_for_tooltip_to_disappear() delete_button.check_visibility( f"Delete session button is missing on {row_index} row" ) delete_button.check_tooltip_with_text(tooltip) # Ожидаем исчезновения подсказки после проверки delete_button.wait_for_tooltip_to_disappear()