"""Модуль компонента панели событий. Содержит класс для работы с элементами панели.""" from playwright.sync_api import Page from tools.logger import get_logger from locators.event_panel_locators import EventPanelLocators from elements.tooltip_button_element import TooltipButton from elements.tab_button_element import TabButton from elements.button_element import Button from components_derived.container_actions_events import ActionsEventsContainer from components_derived.container_audit_events import AuditEventsContainer from components_derived.container_events import EventsTabContainer from components_derived.container_maintenance_events import MaintenanceEventsContainer from components_derived.container_system_log_events import SystemLogEventsContainer from components_derived.user_card import UserCard from components.base_component import BaseComponent logger = get_logger("EVENT_PANEL") class EventPanelComponent(BaseComponent): """Компонент панели событий. Предоставляет методы для взаимодействия с ней.""" def __init__(self, page: Page): """Инициализирует компонент панели событий. Args: page: Экземпляр страницы Playwright. """ super().__init__(page) self.expand_less_button = Button(page, page. locator(EventPanelLocators.BUTTON_EXPAND_LESS), "expand_less_button") self.expand_more_button = Button(page, page. locator(EventPanelLocators.BUTTON_EXPAND_MORE), "expand_more_button") self.states_tab = TabButton(page, page.locator(EventPanelLocators.TAB_STATES), "states_tab") self.actions_tab = TabButton(page, page.locator(EventPanelLocators.TAB_ACTIONS), "actions_tab") self.events_tab = TabButton(page, page.locator(EventPanelLocators.TAB_EVENTS), "events_tab") self.maintenance_tab = TabButton(page, page.locator(EventPanelLocators.TAB_MAINTENANCE), "maintenance_tab") self.system_log_tab = TabButton(page, page.locator(EventPanelLocators.TAB_SYSTEM_LOG), "system_log_tab") self.audit_tab = TabButton(page, page.locator(EventPanelLocators.TAB_AUDIT), "audit_tab") self.unknown_reason_button = TooltipButton(page, page.locator(EventPanelLocators.BUTTONS_EVENT).nth(0), "unknown_reason_button") self.warning_button = TooltipButton(page, page.locator(EventPanelLocators.BUTTONS_EVENT).nth(1), "warning_button") self.damage_button = TooltipButton(page, page.locator(EventPanelLocators.BUTTONS_EVENT).nth(2), "damage_button") self.failure_button = TooltipButton(page, page.locator(EventPanelLocators.BUTTONS_EVENT).nth(3), "failure_button") self.user_button = Button(page, page.locator(EventPanelLocators.BUTTON_USER), "user_button") # Действия: def click_expand_less_button(self) -> None: """Выполняет нажатие кнопки галочка вверх.""" self.expand_less_button.click() def click_expand_more_button(self) -> None: """Выполняет нажатие кнопки галочка вниз.""" self.expand_more_button.click() def click_actions_tab(self) -> ActionsEventsContainer: """Выполняет нажатие tab-кнопки Действия.""" self.actions_tab.check_visibility("Actions tab button is missing on event panel") self.actions_tab.click() actions_tab = ActionsEventsContainer(self.page, EventPanelLocators.CONTAINER_ACTIONS_TAB) return actions_tab def click_audit_tab(self) -> AuditEventsContainer: """Выполняет нажатие tab-кнопки Аудит.""" self.audit_tab.check_visibility("Audit tab button is missing on event panel") self.audit_tab.click() audit_tab = AuditEventsContainer(self.page, EventPanelLocators.CONTAINER_AUDIT_EVENTS) return audit_tab def click_events_tab(self) -> EventsTabContainer: """Выполняет нажатие tab-кнопки События.""" self.events_tab.check_visibility("Events tab button is missing on event panel") self.events_tab.click() events_tab = EventsTabContainer(self.page, EventPanelLocators.CONTAINER_EVENTS_TAB) return events_tab def click_maintenance_tab(self) -> MaintenanceEventsContainer: """Выполняет нажатие tab-кнопки Обслуживание.""" self.maintenance_tab.check_visibility("Maintenance tab button is missing on event panel") self.maintenance_tab.click() maintenance_tab = MaintenanceEventsContainer(self.page, EventPanelLocators.CONTAINER_MAINTENANCE_EVENTS) return maintenance_tab def click_system_log_tab(self) -> SystemLogEventsContainer: """Выполняет нажатие tab-кнопки Системный журнал.""" self.system_log_tab.check_visibility("System log tab button is missing on event panel") self.system_log_tab.click() system_log_events = SystemLogEventsContainer(self.page, EventPanelLocators.CONTAINER_SYSTEM_LOG_EVENTS) return system_log_events def click_user_button(self) -> UserCard: """Выполняет нажатие кнопки пользователя.""" self.should_be_user_button() self.user_button.click(force=True) user_card = UserCard(self.page) return user_card def do_logout(self) -> None: """Выполняет выход из системы.""" user_card = self.click_user_button() user_card.click_logout_button() def get_event_tooltip_texts(self) -> []: """Возвращает список текстов всплывающих подсказок кнопок счетчиков событий.""" tooltip_texts = [] tooltip_texts.append(self.unknown_reason_button.get_tooltip_text()) tooltip_texts.append(self.warning_button.get_tooltip_text()) tooltip_texts.append(self.damage_button.get_tooltip_text()) tooltip_texts.append(self.failure_button.get_tooltip_text()) return tooltip_texts def get_event_button_values(self) -> {}: """Возвращает набор значений кнопок счетчиков событий.""" event_buttons_texts = {} event_buttons_texts['Неизвестно'] = self.unknown_reason_button.get_text(0) event_buttons_texts['Предупреждение'] = self.warning_button.get_text(0) event_buttons_texts['Повреждение'] = self.damage_button.get_text(0) event_buttons_texts['Авария'] = self.failure_button.get_text(0) return event_buttons_texts def get_panel_position(self) -> str: """Возвращает текущее положение панели событий относительно страницы: "top", "center","bottom".""" style_attr = self.page.locator(EventPanelLocators.AREA_EVENTS).get_attribute("style") position = "top" if style_attr.find("display: none;") == -1: height = style_attr.replace("position: relative;","").replace("height: ","").replace(";", "").lstrip() if height == "100%": position = "bottom" else: position = "center" return position # Проверки: def check_expand_less_button(self) -> bool: """Проверяет наличие кнопки галочка вниз.""" try: _ = self.page.locator(EventPanelLocators.BUTTON_EXPAND_LESS) except TimeoutError: return False return True def check_expand_more_button(self) -> bool: """Проверяет наличие кнопки галочка вверх""" try: _ = self.page.locator(EventPanelLocators.BUTTON_EXPAND_MORE) except TimeoutError: return False return True def should_be_user_button(self) -> None: """Проверяет наличие кнопки пользователя.""" self.user_button.check_visibility("User button is missing on event panel") def should_be_tab_buttons(self) -> None: """Проверяет наличие блока tab-кнопок Состояния, Действия, События, Обслуживание, Системный журнал, Аудит.""" self.states_tab.check_have_text('Состояния', "Tab button with text Состояния is missing on event panel") self.actions_tab.check_have_text('Действия',"Tab button with text Действия is missing on event panel") self.events_tab.check_have_text('События', "Tab button with text События is missing on event panel") self.maintenance_tab.check_have_text('Обслуживание', "Tab button with text Обслуживание is missing on event panel") self.system_log_tab.check_have_text('Системный журнал', "Tab button with text Системный журнал is missing on event panel") self.audit_tab.check_have_text('Аудит', "Tab button with text Аудит is missing on event panel") def should_be_event_buttons(self) -> None: """Проверяет наличие блока кнопок-счетчиков событий.""" self.unknown_reason_button.check_visibility("Unknown reason event button is missing on event panel") self.warning_button.check_visibility("Warning event button is missing on event panel") self.damage_button.check_visibility("Damage event button is missing on event panel") self.failure_button.check_visibility("Failure event button is missing on event panel")