e-nms_qa_automation/components/eventbar_component.py

216 lines
10 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"""Модуль компонента панели событий. Содержит класс для работы с элементами панели."""
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 = "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")