Исходный код pages.main_page

"""Модуль главной страницы приложения.

Содержит класс MainPage для работы с элементами главной страницы.
Включает взаимодействие с панелью навигации, кнопками и карточкой пользователя.
"""

from playwright.sync_api import Page
from locators.navigation_panel_locators import NavigationPanelLocators
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_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_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_search_button() 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" )