256 lines
10 KiB
Python
256 lines
10 KiB
Python
"""Модуль главной страницы приложения.
|
||
|
||
Содержит класс MainPage для работы с элементами главной страницы.
|
||
Включает взаимодействие с панелью навигации, кнопками и карточкой пользователя.
|
||
"""
|
||
|
||
from playwright.sync_api import Page
|
||
from locators.navigation_panel_locators import NavigationPanelLocators
|
||
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.eventbar_component import EventPanelComponent
|
||
from components.navbar_component import NavigationPanelComponent
|
||
from pages.base_page import BasePage
|
||
|
||
class MainPage(BasePage):
|
||
"""Класс для работы с главной страницей приложения.
|
||
|
||
Атрибуты:
|
||
page: Экземпляр страницы Playwright.
|
||
navigation_panel: Компонент панели навигации.
|
||
user_button: Кнопка пользователя.
|
||
user_card: Карточка пользователя.
|
||
"""
|
||
|
||
def __init__(self, page: Page) -> None:
|
||
"""Инициализирует элементы главной страницы.
|
||
|
||
Args:
|
||
page: Экземпляр страницы Playwright.
|
||
"""
|
||
|
||
super().__init__(page)
|
||
|
||
self.navigation_panel = NavigationPanelComponent(page)
|
||
self.event_panel = EventPanelComponent(page)
|
||
|
||
# Действия:
|
||
def click_events_panel_expand_less_button(self) -> None:
|
||
"""Выполняет нажатие кнопки галочка вверх."""
|
||
|
||
self.event_panel.click_expand_less_button()
|
||
|
||
def click_events_panel_expand_more_button(self) -> None:
|
||
"""Выполняет нажатие кнопки галочка вниз."""
|
||
|
||
self.event_panel.click_expand_more_button()
|
||
|
||
def click_events_panel_actions_tab(self) -> ActionsEventsContainer:
|
||
"""Выполняет нажатие tab-кнопки Действия."""
|
||
|
||
return self.event_panel.click_actions_tab()
|
||
|
||
def click_events_panel_audit_tab(self) -> AuditEventsContainer:
|
||
"""Выполняет нажатие tab-кнопки Аудит."""
|
||
|
||
return self.event_panel.click_audit_tab()
|
||
|
||
def click_events_panel_events_tab(self) -> EventsTabContainer:
|
||
"""Выполняет нажатие tab-кнопки События."""
|
||
|
||
return self.event_panel.click_events_tab()
|
||
|
||
def click_events_panel_maintenance_tab(self) -> MaintenanceEventsContainer:
|
||
"""Выполняет нажатие tab-кнопки Обслуживание."""
|
||
|
||
return self.event_panel.click_maintenance_tab()
|
||
|
||
def click_events_panel_system_log_tab(self) -> SystemLogEventsContainer:
|
||
"""Выполняет нажатие tab-кнопки Системный журнал."""
|
||
|
||
return self.event_panel.click_system_log_tab()
|
||
|
||
def click_main_navigation_panel_item(self, item_name: str) -> None:
|
||
"""Кликает по элементу основной панели навигации.
|
||
|
||
Args:
|
||
item_name: Название элемента для клика.
|
||
"""
|
||
|
||
self.navigation_panel.click_item(
|
||
NavigationPanelLocators.PANEL_MAIN,
|
||
item_name
|
||
)
|
||
|
||
def click_subpanel_item(self, item_name: str, parent=None) -> None:
|
||
"""Выполняет рекурсивный поиск по панели навигации
|
||
заданного элемента и делает клик по нему."""
|
||
|
||
active_item_locator = self.page.locator(
|
||
NavigationPanelLocators.PANEL_MAIN
|
||
).locator(NavigationPanelLocators.ACTIVE_CONTAINER)
|
||
node_locator = active_item_locator.locator(
|
||
NavigationPanelLocators.SUB_PANEL_MAIN
|
||
).locator(NavigationPanelLocators.TREEVIEW).first
|
||
|
||
# Рекурсивный поиск в дереве v-treeview заданного элемента
|
||
# и клик по нему
|
||
self.navigation_panel.click_sub_item(
|
||
node_locator, item_name, parent
|
||
)
|
||
|
||
def click_expand_workarea_button(self) -> None:
|
||
"""Выполняеи нажатие кнопки расширения рабочей области страницы"""
|
||
|
||
self.navigation_panel.expand_workarea()
|
||
|
||
def click_reduce_workarea_button(self) -> None:
|
||
"""Выполняеи нажатие кнопки сжатия рабочей области страницы"""
|
||
|
||
self.navigation_panel.reduce_workarea()
|
||
|
||
def click_user_button(self) -> UserCard:
|
||
"""Выполняет нажатие кнопки пользователя."""
|
||
|
||
return self.event_panel.click_user_button()
|
||
|
||
def do_logout(self) -> None:
|
||
"""Выполняет выход из системы."""
|
||
|
||
self.event_panel.do_logout()
|
||
|
||
def expand_navigation_subpanel(self) -> None:
|
||
"""Выполняет полное открытие активной главной
|
||
навигационной подпанели."""
|
||
|
||
active_item_locator = self.page.locator(
|
||
NavigationPanelLocators.PANEL_MAIN
|
||
).locator(NavigationPanelLocators.ACTIVE_CONTAINER)
|
||
node_locator = active_item_locator.locator(
|
||
NavigationPanelLocators.SUB_PANEL_MAIN
|
||
).locator(NavigationPanelLocators.TREEVIEW).first
|
||
|
||
# Рекурсивный обход дерева v-treeview выбранной подпанели
|
||
# и вывод информации об элементах в режиме отладки (debug=True)
|
||
self.navigation_panel.traverse_panel_tree(
|
||
node_locator, debug=False
|
||
)
|
||
|
||
def get_event_counters_by_buttons(self) -> dict:
|
||
"""Возвращает набор значений кнопок счетчиков событий."""
|
||
|
||
return self.event_panel.get_event_button_values()
|
||
|
||
def get_event_counters_by_tooltips(self) -> dict:
|
||
"""Возвращает набор текстов всплывающих подсказок
|
||
кнопок счетчиков событий."""
|
||
|
||
events = self.event_panel.get_event_tooltip_texts()
|
||
|
||
event_counters = {}
|
||
|
||
for event in events:
|
||
if len(event) > 0:
|
||
event_name, count = event.split(" ")
|
||
event_counters[event_name] = count
|
||
return event_counters
|
||
|
||
def get_events_panel_position(self) -> str:
|
||
"""Возвращает текущее положение панели событий
|
||
относительно страницы: "top", "center","bottom"."""
|
||
|
||
return self.event_panel.get_panel_position()
|
||
|
||
def scroll_navigation_panel_down(self) -> None:
|
||
"""Прокручивает панель навигации вниз."""
|
||
|
||
self.navigation_panel.scroll_down(
|
||
NavigationPanelLocators.PANEL_SCROLL_CONTAINER
|
||
)
|
||
|
||
def scroll_navigation_panel_up(self) -> None:
|
||
"""Прокручивает панель навигации вверх."""
|
||
|
||
self.navigation_panel.scroll_up(
|
||
NavigationPanelLocators.PANEL_SCROLL_CONTAINER
|
||
)
|
||
|
||
# Проверки:
|
||
def check_expand_less_button(self) -> bool:
|
||
"""Проверяет наличие кнопки галочка вверх."""
|
||
|
||
return self.event_panel.check_expand_less_button()
|
||
|
||
def check_expand_more_button(self) -> bool:
|
||
"""Проверяет наличие кнопки галочка вниз."""
|
||
|
||
return self.event_panel.check_expand_more_button()
|
||
|
||
|
||
def check_navigation_item_exists(self, item_name: str) -> bool:
|
||
"""Проверяет существование элемента в навигационной панели.
|
||
|
||
Args:
|
||
item_name: Название элемента для проверки
|
||
|
||
Returns:
|
||
bool: True если элемент существует, False если нет
|
||
"""
|
||
return self.navigation_panel.is_item_visible(
|
||
NavigationPanelLocators.PANEL_MAIN,
|
||
item_name
|
||
)
|
||
|
||
def check_navigation_panel_item_visibility(self, item_name: str) -> None:
|
||
"""Проверяет видимость элемента в панели навигации.
|
||
|
||
Args:
|
||
item_name: Название элемента для проверки.
|
||
"""
|
||
|
||
self.navigation_panel.check_item_visibility(
|
||
NavigationPanelLocators.PANEL_MAIN,
|
||
item_name
|
||
)
|
||
|
||
def check_navigation_panel_verticall_scrolling(self) -> bool:
|
||
"""Проверяет возможность вертикальной прокрутки панели.
|
||
|
||
Returns:
|
||
bool: True если прокрутка возможна, иначе False.
|
||
"""
|
||
|
||
return self.navigation_panel.is_scrollable_vertically(
|
||
NavigationPanelLocators.PANEL_SCROLL_CONTAINER
|
||
)
|
||
|
||
def should_be_event_panel(self) -> None:
|
||
"""Проверяет наличие элементов панели событий."""
|
||
|
||
## to-do: кнопки галочки???
|
||
self.event_panel.should_be_tab_buttons()
|
||
self.event_panel.should_be_event_buttons()
|
||
self.event_panel.should_be_user_button()
|
||
|
||
def should_be_navigation_panel(self) -> None:
|
||
"""Проверяет наличие панели навигации."""
|
||
|
||
self.navigation_panel.check_visibility(
|
||
NavigationPanelLocators.PANEL_MAIN,
|
||
"Navigation panel is missing"
|
||
)
|
||
|
||
def should_be_expand_workarea_button(self) -> None:
|
||
"""Проверяет наличие кнопки расширения рабочей области страницы."""
|
||
|
||
self.navigation_panel.should_be_expand_workarea_button()
|
||
|
||
def should_be_reduce_workarea_button(self) -> None:
|
||
"""Проверяет наличие кнопки сжатия рабочей области страницы."""
|
||
|
||
self.navigation_panel.should_be_reduce_workarea_button()
|