Skip to content

# MainPage

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

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

## `MainPage`

Bases: `BasePage`

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

Атрибуты

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

Source code in `pages\main_page.py`

     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
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    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_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_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_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):
            """Выполняет полное открытие активной главной навигационной подпанели."""

            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_tooltips(self) -> {}:
            """Возвращает набор текстов всплывающих подсказок кнопок счетчиков событий."""

            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_event_counters_by_buttons(self) -> {}:
            """Возвращает набор значений кнопок счетчиков событий."""

            return self.event_panel.get_event_button_values()

        def get_events_panel_position(self) -> str:
            """Возвращает текущее положение панели событий относительно страницы: "top", "center","bottom"."""

            return self.event_panel.get_panel_position()

        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_visibility(
                NavigationPanelLocators.PANEL_MAIN,
                "Navigation panel is missing"
            )

        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 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_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`

    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    def __init__(self, page: Page) -> None:
        """Инициализирует элементы главной страницы.

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

        super().__init__(page)

        self.navigation_panel = NavigationPanelComponent(page)
        self.event_panel = EventPanelComponent(page)

### `check_expand_less_button()`

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

Source code in `pages\main_page.py`

    141
    142
    143
    144
    def check_expand_less_button(self) -> bool:
        """Проверяет наличие кнопки галочка вверх."""

        return self.event_panel.check_expand_less_button()

### `check_expand_more_button()`

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

Source code in `pages\main_page.py`

    146
    147
    148
    149
    def check_expand_more_button(self) -> bool:
        """Проверяет наличие кнопки галочка вниз."""

        return self.event_panel.check_expand_more_button()

### `check_navigation_panel_item_visibility(item_name)`

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

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`item_name` | `str` | Название элемента для проверки. | required

Source code in `pages\main_page.py`

    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    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`

    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    def check_navigation_panel_verticall_scrolling(self) -> bool:
        """Проверяет возможность вертикальной прокрутки панели.

        Returns:
            bool: True если прокрутка возможна, иначе False.
        """

        return self.navigation_panel.is_scrollable_vertically(
            NavigationPanelLocators.PANEL_SCROLL_CONTAINER
        )

### `click_events_panel_expand_less_button()`

Выполняет нажатие кнопки галочка вверх.

Source code in `pages\main_page.py`

    56
    57
    58
    59
    def click_events_panel_expand_less_button(self) -> None:
        """Выполняет нажатие кнопки галочка вверх."""

        self.event_panel.click_expand_less_button()

### `click_events_panel_expand_more_button()`

Выполняет нажатие кнопки галочка вниз.

Source code in `pages\main_page.py`

    61
    62
    63
    64
    def click_events_panel_expand_more_button(self) -> None:
        """Выполняет нажатие кнопки галочка вниз."""

        self.event_panel.click_expand_more_button()

### `click_events_panel_system_log_tab()`

Выполняет нажатие tab-кнопки Системный журнал.

Source code in `pages\main_page.py`

    66
    67
    68
    69
    def click_events_panel_system_log_tab(self) -> SystemLogEventsContainer:
        """Выполняет нажатие tab-кнопки Системный журнал."""

        return self.event_panel.click_system_log_tab()

### `click_main_navigation_panel_item(item_name)`

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

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`item_name` | `str` | Название элемента для клика. | required

Source code in `pages\main_page.py`

    38
    39
    40
    41
    42
    43
    44
    45
    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_subpanel_item(item_name, parent=None)`

Выполняет рекурсивный поиск по панели навигации заданного элемента и делает клик по нему.

Source code in `pages\main_page.py`

    47
    48
    49
    50
    51
    52
    53
    54
    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)

### `click_user_button()`

Выполняет нажатие кнопки пользователя.

Source code in `pages\main_page.py`

    71
    72
    73
    74
    def click_user_button(self) -> UserCard:
        """Выполняет нажатие кнопки пользователя."""

        return self.event_panel.click_user_button()

### `do_logout()`

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

Source code in `pages\main_page.py`

    76
    77
    78
    79
    def do_logout(self) -> None:
        """Выполняет выход из системы."""

        self.event_panel.do_logout()

### `expand_navigation_subpanel()`

Выполняет полное открытие активной главной навигационной подпанели.

Source code in `pages\main_page.py`

    81
    82
    83
    84
    85
    86
    87
    88
    def expand_navigation_subpanel(self):
        """Выполняет полное открытие активной главной навигационной подпанели."""

        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)

### `get_event_counters_by_buttons()`

Возвращает набор значений кнопок счетчиков событий.

Source code in `pages\main_page.py`

    103
    104
    105
    106
    def get_event_counters_by_buttons(self) -> {}:
        """Возвращает набор значений кнопок счетчиков событий."""

        return self.event_panel.get_event_button_values()

### `get_event_counters_by_tooltips()`

Возвращает набор текстов всплывающих подсказок кнопок счетчиков событий.

Source code in `pages\main_page.py`

     90
     91
     92
     93
     94
     95
     96
     97
     98
     99
    100
    101
    def get_event_counters_by_tooltips(self) -> {}:
        """Возвращает набор текстов всплывающих подсказок кнопок счетчиков событий."""

        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

### `get_events_panel_position()`

Возвращает текущее положение панели событий относительно страницы: "top", "center","bottom".

Source code in `pages\main_page.py`

    108
    109
    110
    111
    def get_events_panel_position(self) -> str:
        """Возвращает текущее положение панели событий относительно страницы: "top", "center","bottom"."""

        return self.event_panel.get_panel_position()

### `scroll_navigation_panel_down()`

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

Source code in `pages\main_page.py`

    118
    119
    120
    121
    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`

    113
    114
    115
    116
    def scroll_navigation_panel_up(self) -> None:
        """Прокручивает панель навигации вверх."""

        self.navigation_panel.scroll_up(NavigationPanelLocators.PANEL_SCROLL_CONTAINER)

### `should_be_event_panel()`

Проверяет наличие элементов панели событий.

Source code in `pages\main_page.py`

    132
    133
    134
    135
    136
    137
    138
    139
    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()

### `should_be_navigation_panel()`

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

Source code in `pages\main_page.py`

    124
    125
    126
    127
    128
    129
    130
    def should_be_navigation_panel(self) -> None:
        """Проверяет наличие панели навигации."""

        self.navigation_panel.check_visibility(
            NavigationPanelLocators.PANEL_MAIN,
            "Navigation panel is missing"
        )