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)