e-nms_qa_automation/pages/main_page.py

212 lines
8.3 KiB
Python
Raw 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.

"""Модуль главной страницы приложения.
Содержит класс 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_user_button()
def should_be_navigation_panel(self) -> None:
"""Проверяет наличие панели навигации."""
self.navigation_panel.check_visibility(
NavigationPanelLocators.PANEL_MAIN,
"Navigation panel is missing"
)