Skip to content

MainPage

MainPage

Bases: BasePage

Класс для работы с главной страницей приложения.

Атрибуты

page (Page): Экземпляр страницы Playwright. navigation_panel (NavigationPanelComponent): Компонент панели навигации. user_button (Button): Кнопка пользователя. user_card (CardComponent): Карточка пользователя.

Source code in pages\main_page.py
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
class MainPage(BasePage):
    """Класс для работы с главной страницей приложения.

    Атрибуты:
        page (Page): Экземпляр страницы Playwright.
        navigation_panel (NavigationPanelComponent): Компонент панели навигации.
        user_button (Button): Кнопка пользователя.
        user_card (CardComponent): Карточка пользователя.
    """

    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
        )

__init__(page)

Инициализирует элементы главной страницы.

Parameters:

Name Type Description Default
page Page

Экземпляр страницы Playwright.

required
Source code in pages\main_page.py
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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)

check_navigation_panel_item_visibility(item_name)

Проверяет видимость элемента в панели навигации.

Parameters:

Name Type Description Default
item_name str

Название элемента для проверки.

required
Source code in pages\main_page.py
101
102
103
104
105
106
107
108
109
110
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
    )

check_navigation_panel_verticall_scrolling()

Проверяет возможность вертикальной прокрутки панели навигации.

Returns:

Name Type Description
bool bool

True если панель можно прокручивать, иначе False.

Source code in pages\main_page.py
91
92
93
94
95
96
97
98
99
def check_navigation_panel_verticall_scrolling(self) -> bool:
    """Проверяет возможность вертикальной прокрутки панели навигации.

    Returns:
        bool: True если панель можно прокручивать, иначе False.
    """
    return self.navigation_panel.is_scrollable_vertically(
        NavigationPanelLocators.PANEL_SCROLL_CONTAINER
    )

click_configuration_navigation_panel_item(item_name)

Кликает по элементу подраздела 'Конфигурация' в панели навигации.

Parameters:

Name Type Description Default
item_name str

Название элемента для клика.

required
Source code in pages\main_page.py
45
46
47
48
49
50
51
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)

click_main_navigation_panel_item(item_name)

Кликает по элементу основной панели навигации.

Parameters:

Name Type Description Default
item_name str

Название элемента для клика.

required
Source code in pages\main_page.py
37
38
39
40
41
42
43
def click_main_navigation_panel_item(self, item_name: str) -> None:
    """Кликает по элементу основной панели навигации.

    Args:
        item_name: Название элемента для клика.
    """
    self.navigation_panel.click_item(NavigationPanelLocators.PANEL_MAIN, item_name)

click_maintenance_navigation_panel_item(item_name)

Кликает по элементу подраздела 'Обслуживание' в панели навигации.

Parameters:

Name Type Description Default
item_name str

Название элемента для клика.

required
Source code in pages\main_page.py
53
54
55
56
57
58
59
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)

click_user_button()

Кликает по кнопке пользователя.

Source code in pages\main_page.py
61
62
63
def click_user_button(self) -> None:
    """Кликает по кнопке пользователя."""
    self.user_button.click()

do_logout()

Выполняет выход из системы.

Source code in pages\main_page.py
65
66
67
68
69
def do_logout(self) -> None:
    """Выполняет выход из системы."""
    self.should_be_user_button()
    self.click_user_button()
    self.user_card.click_logout_button()

scroll_navigation_panel_down()

Прокручивает панель навигации вниз.

Source code in pages\main_page.py
75
76
77
def scroll_navigation_panel_down(self) -> None:
    """Прокручивает панель навигации вниз."""
    self.navigation_panel.scroll_down(NavigationPanelLocators.PANEL_SCROLL_CONTAINER)

scroll_navigation_panel_up()

Прокручивает панель навигации вверх.

Source code in pages\main_page.py
71
72
73
def scroll_navigation_panel_up(self) -> None:
    """Прокручивает панель навигации вверх."""
    self.navigation_panel.scroll_up(NavigationPanelLocators.PANEL_SCROLL_CONTAINER)

should_be_navigation_panel()

Проверяет наличие панели навигации.

Source code in pages\main_page.py
80
81
82
83
84
85
def should_be_navigation_panel(self) -> None:
    """Проверяет наличие панели навигации."""
    self.navigation_panel.check_presence(
        NavigationPanelLocators.PANEL_MAIN,
        "Navigation panel is missing"
    )

should_be_user_button()

Проверяет наличие кнопки пользователя.

Source code in pages\main_page.py
87
88
89
def should_be_user_button(self) -> None:
    """Проверяет наличие кнопки пользователя."""
    self.user_button.check_presence("User button is missing on event panel")