176 lines
8.5 KiB
Python
176 lines
8.5 KiB
Python
"""Модуль компонента панели событий. Содержит класс для работы с элементами панели."""
|
||
|
||
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_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_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 = "bottom"
|
||
|
||
if style_attr.find("display: none;") == -1:
|
||
height = style_attr.replace("height: ","").replace(";", "")
|
||
if height == "100%":
|
||
position = "top"
|
||
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")
|