Модуль главной страницы приложения.
Содержит класс 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
| 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
| 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
| def click_user_button(self) -> None:
"""Кликает по кнопке пользователя."""
self.user_button.click()
|
do_logout()
Выполняет выход из системы.
Source code in pages\main_page.py
| 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
| 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
| 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
| 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
| 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
| def should_be_user_button(self) -> None:
"""Проверяет наличие кнопки пользователя."""
self.user_button.check_presence("User button is missing on event panel")
|