128 lines
4.9 KiB
Python
128 lines
4.9 KiB
Python
"""Модуль главной страницы приложения.
|
||
|
||
Содержит класс MainPage для работы с элементами главной страницы.
|
||
Включает взаимодействие с панелью навигации, кнопками и карточкой пользователя.
|
||
"""
|
||
|
||
from playwright.sync_api import Page
|
||
from locators.navigation_panel_locators import NavigationPanelLocators
|
||
from locators.event_panel_locators import EventPanelLocators
|
||
from elements.button_element import Button
|
||
from components.navbar_component import NavigationPanelComponent
|
||
from components.card_component import CardComponent
|
||
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)
|
||
|
||
locators = self.page.locator(EventPanelLocators.BUTTONS_BLOCK).get_by_role("button").all()
|
||
self.user_button = Button(page, locators[0], "search_button")
|
||
self.user_button = Button(page, locators[1], "user_button")
|
||
|
||
self.user_card = CardComponent(page)
|
||
|
||
# Действия:
|
||
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_configuration_navigation_panel_item(self, item_name: str) -> None:
|
||
"""Кликает по элементу подраздела 'Конфигурация'.
|
||
|
||
Args:
|
||
item_name: Название элемента для клика.
|
||
"""
|
||
|
||
self.navigation_panel.click_sub_item(NavigationPanelLocators.PANEL_MAIN, 1, item_name)
|
||
|
||
def click_maintenance_navigation_panel_item(self, item_name: str) -> None:
|
||
"""Кликает по элементу подраздела 'Обслуживание'.
|
||
|
||
Args:
|
||
item_name: Название элемента для клика.
|
||
"""
|
||
|
||
self.navigation_panel.click_sub_item(NavigationPanelLocators.PANEL_MAIN, 2, item_name)
|
||
|
||
def click_user_button(self) -> None:
|
||
"""Кликает по кнопке пользователя."""
|
||
|
||
self.user_button.click()
|
||
|
||
def do_logout(self) -> None:
|
||
"""Выполняет выход из системы."""
|
||
|
||
self.should_be_user_button()
|
||
self.click_user_button()
|
||
self.user_card.click_logout_button()
|
||
|
||
def scroll_navigation_panel_up(self) -> None:
|
||
"""Прокручивает панель навигации вверх."""
|
||
|
||
self.navigation_panel.scroll_up(NavigationPanelLocators.PANEL_SCROLL_CONTAINER)
|
||
|
||
def scroll_navigation_panel_down(self) -> None:
|
||
"""Прокручивает панель навигации вниз."""
|
||
|
||
self.navigation_panel.scroll_down(NavigationPanelLocators.PANEL_SCROLL_CONTAINER)
|
||
|
||
# Проверки:
|
||
def should_be_navigation_panel(self) -> None:
|
||
"""Проверяет наличие панели навигации."""
|
||
|
||
self.navigation_panel.check_presence(
|
||
NavigationPanelLocators.PANEL_MAIN,
|
||
"Navigation panel is missing"
|
||
)
|
||
|
||
def should_be_user_button(self) -> None:
|
||
"""Проверяет наличие кнопки пользователя."""
|
||
|
||
self.user_button.check_presence("User button is missing on event panel")
|
||
|
||
def check_navigation_panel_verticall_scrolling(self) -> bool:
|
||
"""Проверяет возможность вертикальной прокрутки панели.
|
||
|
||
Returns:
|
||
bool: True если прокрутка возможна, иначе False.
|
||
"""
|
||
|
||
return self.navigation_panel.is_scrollable_vertically(
|
||
NavigationPanelLocators.PANEL_SCROLL_CONTAINER
|
||
)
|
||
|
||
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
|
||
)
|