85 lines
3.4 KiB
Python
85 lines
3.4 KiB
Python
from playwright.sync_api import Page
|
||
|
||
from components.base_component import BaseComponent
|
||
from locators.navigation_panel_locators import NavigationPanelLocators
|
||
|
||
from tools.logger import get_logger
|
||
|
||
logger = get_logger("NAVIGATION_PANEL")
|
||
|
||
|
||
class NavigationPanelComponent(BaseComponent):
|
||
"""Компонент панели навигации.
|
||
|
||
Предоставляет методы для взаимодействия с элементами навигационной панели.
|
||
Наследуется от BaseComponent.
|
||
|
||
Атрибуты:
|
||
page: Page - экземпляр страницы Playwright
|
||
"""
|
||
|
||
def __init__(self, page: Page):
|
||
"""Инициализация компонента панели навигации.
|
||
|
||
Args:
|
||
page: Page - экземпляр страницы Playwright
|
||
"""
|
||
super().__init__(page)
|
||
|
||
# Действия:
|
||
def get_item_names(self, locator):
|
||
"""Получает тексты всех элементов по указанному локатору.
|
||
|
||
Args:
|
||
locator: Локатор для поиска элементов
|
||
|
||
Returns:
|
||
list: Список текстов элементов
|
||
"""
|
||
loc = self.get_locator(locator)
|
||
return loc.all_inner_texts()
|
||
|
||
def click_item(self, locator, item_name):
|
||
"""Кликает по элементу с указанным текстом.
|
||
|
||
Args:
|
||
locator: Локатор для поиска элемента
|
||
item_name: Текст элемента для клика
|
||
"""
|
||
loc = self.get_locator(locator)
|
||
loc.get_by_text(item_name).click()
|
||
|
||
def click_sub_item(self, locator, sublevel_number, item_name):
|
||
"""Кликает по вложенному элементу с указанным текстом.
|
||
|
||
Args:
|
||
locator: Локатор для поиска элемента
|
||
sublevel_number: Уровень вложенности (1 или 2)
|
||
item_name: Текст элемента для клика
|
||
|
||
Raises:
|
||
ValueError: Если указан недопустимый уровень вложенности
|
||
"""
|
||
root_locator = self.get_locator(NavigationPanelLocators.NODE_ROOT)
|
||
children_locator = self.get_locator(NavigationPanelLocators.NODE_CHILDREN)
|
||
|
||
loc = self.get_locator(locator)
|
||
|
||
if sublevel_number == 1:
|
||
loc.locator(root_locator).get_by_text(item_name).click()
|
||
elif sublevel_number == 2:
|
||
loc.locator(children_locator).locator(root_locator).get_by_text(item_name).click()
|
||
else:
|
||
raise ValueError("the navigation panel has two levels of nesting only")
|
||
|
||
# Проверки:
|
||
def check_item_visibility(self, locator, item_name):
|
||
"""Проверяет видимость элемента с указанным текстом.
|
||
|
||
Args:
|
||
locator: Локатор для поиска элемента
|
||
item_name: Текст элемента для проверки
|
||
"""
|
||
loc = self.get_locator(locator).get_by_text(item_name)
|
||
msg = f"Navigation panel item '{item_name}' is not visible"
|
||
self.check_presence(loc, msg) |