From 85491b7cb9252ea28c423bcc4c66ff1b23d97f02 Mon Sep 17 00:00:00 2001 From: Radislav Date: Tue, 25 Nov 2025 14:57:08 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D0=B8=20=D1=81=D1=83=D1=89=D0=B5=D1=81=D1=82=D0=B2=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B0=20=D0=BD=D0=B0=D0=B2=D0=B8=D0=B3=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлен метод check_navigation_item_exists с возвратом boolean - Реализована мягкая проверка элементов навигационной панели --- pages/main_page.py | 178 +++++++++++++++++++++++++-------------------- 1 file changed, 101 insertions(+), 77 deletions(-) diff --git a/pages/main_page.py b/pages/main_page.py index 3d74ef9..773e561 100644 --- a/pages/main_page.py +++ b/pages/main_page.py @@ -8,8 +8,8 @@ from playwright.sync_api import Page from locators.navigation_panel_locators import NavigationPanelLocators from components_derived.container_system_log_events import SystemLogEventsContainer from components_derived.user_card import UserCard -from components.navbar_component import NavigationPanelComponent from components.eventbar_component import EventPanelComponent +from components.navbar_component import NavigationPanelComponent from pages.base_page import BasePage class MainPage(BasePage): @@ -35,24 +35,6 @@ class MainPage(BasePage): 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: """Выполняет нажатие кнопки галочка вверх.""" @@ -68,6 +50,35 @@ class MainPage(BasePage): return self.event_panel.click_system_log_tab() + 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_user_button(self) -> UserCard: """Выполняет нажатие кнопки пользователя.""" @@ -78,17 +89,31 @@ class MainPage(BasePage): self.event_panel.do_logout() - def expand_navigation_subpanel(self): - """Выполняет полное открытие активной главной навигационной подпанели.""" + def expand_navigation_subpanel(self) -> 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 + 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) + # Рекурсивный обход дерева v-treeview выбранной подпанели + # и вывод информации об элементах в режиме отладки (debug=True) + self.navigation_panel.traverse_panel_tree( + node_locator, debug=False + ) - def get_event_counters_by_tooltips(self) -> {}: - """Возвращает набор текстов всплывающих подсказок кнопок счетчиков событий.""" + def get_event_counters_by_buttons(self) -> dict: + """Возвращает набор значений кнопок счетчиков событий.""" + + return self.event_panel.get_event_button_values() + + def get_event_counters_by_tooltips(self) -> dict: + """Возвращает набор текстов всплывающих подсказок + кнопок счетчиков событий.""" events = self.event_panel.get_event_tooltip_texts() @@ -100,59 +125,27 @@ class MainPage(BasePage): 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".""" + """Возвращает текущее положение панели событий + относительно страницы: "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) + self.navigation_panel.scroll_down( + NavigationPanelLocators.PANEL_SCROLL_CONTAINER + ) + + def scroll_navigation_panel_up(self) -> None: + """Прокручивает панель навигации вверх.""" + + self.navigation_panel.scroll_up( + 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_navigation_item_exists(self, item_name: str) -> bool: - """ - Проверяет существование элемента в навигационной панели. - - Args: - item_name: Название элемента для проверки - - Returns: - bool: True если элемент существует, False если нет - """ - return self.navigation_panel.is_item_visible( - NavigationPanelLocators.PANEL_MAIN, - item_name - ) - def check_expand_less_button(self) -> bool: """Проверяет наличие кнопки галочка вверх.""" @@ -163,15 +156,18 @@ class MainPage(BasePage): return self.event_panel.check_expand_more_button() - def check_navigation_panel_verticall_scrolling(self) -> bool: - """Проверяет возможность вертикальной прокрутки панели. + def check_navigation_item_exists(self, item_name: str) -> bool: + """Проверяет существование элемента в навигационной панели. + + Args: + item_name: Название элемента для проверки Returns: - bool: True если прокрутка возможна, иначе False. + bool: True если элемент существует, False если нет """ - - return self.navigation_panel.is_scrollable_vertically( - NavigationPanelLocators.PANEL_SCROLL_CONTAINER + return self.navigation_panel.is_item_visible( + NavigationPanelLocators.PANEL_MAIN, + item_name ) def check_navigation_panel_item_visibility(self, item_name: str) -> None: @@ -185,3 +181,31 @@ class MainPage(BasePage): NavigationPanelLocators.PANEL_MAIN, item_name ) + + def check_navigation_panel_verticall_scrolling(self) -> bool: + """Проверяет возможность вертикальной прокрутки панели. + + Returns: + bool: True если прокрутка возможна, иначе False. + """ + + return self.navigation_panel.is_scrollable_vertically( + NavigationPanelLocators.PANEL_SCROLL_CONTAINER + ) + + 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 should_be_navigation_panel(self) -> None: + """Проверяет наличие панели навигации.""" + + self.navigation_panel.check_visibility( + NavigationPanelLocators.PANEL_MAIN, + "Navigation panel is missing" + )