Модуль главной страницы приложения.
Содержит класс MainPage для работы с элементами главной страницы.
Включает взаимодействие с панелью навигации, кнопками и карточкой пользователя.
MainPage
Bases: BasePage
Класс для работы с главной страницей приложения.
Атрибуты
page: Экземпляр страницы Playwright.
navigation_panel: Компонент панели навигации.
user_button: Кнопка пользователя.
user_card: Карточка пользователя.
Source code in pages\main_page.py
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
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 | 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) -> 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_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 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
23
24
25
26
27
28
29
30
31
32
33 | 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
| 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
| 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
150
151
152
153
154
155
156
157
158
159
160 | 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
139
140
141
142
143
144
145
146
147
148 | 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
| 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
| def click_events_panel_expand_more_button(self) -> None:
"""Выполняет нажатие кнопки галочка вниз."""
self.event_panel.click_expand_more_button()
|
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)
|
do_logout()
Выполняет выход из системы.
Source code in pages\main_page.py
| def do_logout(self) -> None:
"""Выполняет выход из системы."""
self.event_panel.do_logout()
|
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)
|
get_event_counters_by_buttons()
Возвращает набор значений кнопок счетчиков событий.
Source code in pages\main_page.py
| 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
78
79
80
81
82
83
84
85
86
87
88
89 | 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
| 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
| 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_event_panel()
Проверяет наличие элементов панели событий.
Source code in pages\main_page.py
120
121
122
123
124
125
126
127 | 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
112
113
114
115
116
117
118 | def should_be_navigation_panel(self) -> None:
"""Проверяет наличие панели навигации."""
self.navigation_panel.check_visibility(
NavigationPanelLocators.PANEL_MAIN,
"Navigation panel is missing"
)
|