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
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_subpanel_item(self, item_name: str) -> 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)

    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 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 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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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
117
118
119
120
121
122
123
124
125
126
127
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
106
107
108
109
110
111
112
113
114
115
def check_navigation_panel_verticall_scrolling(self) -> bool:
    """Проверяет возможность вертикальной прокрутки панели.

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

    return self.navigation_panel.is_scrollable_vertically(
        NavigationPanelLocators.PANEL_SCROLL_CONTAINER
    )

click_main_navigation_panel_item(item_name)

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

Parameters:

Name Type Description Default
item_name str

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

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

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

Source code in pages\main_page.py
52
53
54
55
56
57
58
59
def click_subpanel_item(self, item_name: str) -> 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)

click_user_button()

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

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

    self.user_button.click()

do_logout()

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

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

    self.should_be_user_button()
    self.click_user_button()
    self.user_card.click_logout_button()

expand_navigation_subpanel()

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

Source code in pages\main_page.py
73
74
75
76
77
78
79
80
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)

scroll_navigation_panel_down()

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

Source code in pages\main_page.py
87
88
89
90
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
82
83
84
85
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
93
94
95
96
97
98
99
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
101
102
103
104
def should_be_user_button(self) -> None:
    """Проверяет наличие кнопки пользователя."""

    self.user_button.check_presence("User button is missing on event panel")