feat: добавление проверки существования элемента навигации

- Добавлен метод check_navigation_item_exists с возвратом boolean
- Реализована мягкая проверка элементов навигационной панели
radislav/tests_rack
Radislav 2025-11-25 14:59:44 +03:00
parent a2d37a8090
commit ad7cb98bb3
1 changed files with 99 additions and 60 deletions

View File

@ -8,8 +8,8 @@ from playwright.sync_api import Page
from locators.navigation_panel_locators import NavigationPanelLocators from locators.navigation_panel_locators import NavigationPanelLocators
from components_derived.container_system_log_events import SystemLogEventsContainer from components_derived.container_system_log_events import SystemLogEventsContainer
from components_derived.user_card import UserCard from components_derived.user_card import UserCard
from components.navbar_component import NavigationPanelComponent
from components.eventbar_component import EventPanelComponent from components.eventbar_component import EventPanelComponent
from components.navbar_component import NavigationPanelComponent
from pages.base_page import BasePage from pages.base_page import BasePage
class MainPage(BasePage): class MainPage(BasePage):
@ -35,24 +35,6 @@ class MainPage(BasePage):
self.event_panel = EventPanelComponent(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: def click_events_panel_expand_less_button(self) -> None:
"""Выполняет нажатие кнопки галочка вверх.""" """Выполняет нажатие кнопки галочка вверх."""
@ -68,6 +50,35 @@ class MainPage(BasePage):
return self.event_panel.click_system_log_tab() 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: def click_user_button(self) -> UserCard:
"""Выполняет нажатие кнопки пользователя.""" """Выполняет нажатие кнопки пользователя."""
@ -78,17 +89,31 @@ class MainPage(BasePage):
self.event_panel.do_logout() 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) active_item_locator = self.page.locator(
node_locator = active_item_locator.locator(NavigationPanelLocators.SUB_PANEL_MAIN).locator(NavigationPanelLocators.TREEVIEW).first 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) # Рекурсивный обход дерева v-treeview выбранной подпанели
self.navigation_panel.traverse_panel_tree(node_locator, debug=False) # и вывод информации об элементах в режиме отладки (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() events = self.event_panel.get_event_tooltip_texts()
@ -100,44 +125,27 @@ class MainPage(BasePage):
event_counters[event_name] = count event_counters[event_name] = count
return event_counters 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: def get_events_panel_position(self) -> str:
"""Возвращает текущее положение панели событий относительно страницы: "top", "center","bottom".""" """Возвращает текущее положение панели событий
относительно страницы: "top", "center","bottom"."""
return self.event_panel.get_panel_position() 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: 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 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: def scroll_navigation_panel_up(self) -> None:
"""Проверяет наличие элементов панели событий.""" """Прокручивает панель навигации вверх."""
## to-do: кнопки галочки??? self.navigation_panel.scroll_up(
self.event_panel.should_be_tab_buttons() NavigationPanelLocators.PANEL_SCROLL_CONTAINER
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: def check_expand_less_button(self) -> bool:
"""Проверяет наличие кнопки галочка вверх.""" """Проверяет наличие кнопки галочка вверх."""
@ -148,15 +156,18 @@ class MainPage(BasePage):
return self.event_panel.check_expand_more_button() 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: Returns:
bool: True если прокрутка возможна, иначе False. bool: True если элемент существует, False если нет
""" """
return self.navigation_panel.is_item_visible(
return self.navigation_panel.is_scrollable_vertically( NavigationPanelLocators.PANEL_MAIN,
NavigationPanelLocators.PANEL_SCROLL_CONTAINER item_name
) )
def check_navigation_panel_item_visibility(self, item_name: str) -> None: def check_navigation_panel_item_visibility(self, item_name: str) -> None:
@ -170,3 +181,31 @@ class MainPage(BasePage):
NavigationPanelLocators.PANEL_MAIN, NavigationPanelLocators.PANEL_MAIN,
item_name 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"
)