From 025b171724ab46dabf15df7c5f9db3c4c8f1fdf8 Mon Sep 17 00:00:00 2001 From: Radislav Date: Mon, 21 Jul 2025 15:27:22 +0300 Subject: [PATCH] =?UTF-8?q?feat(navbar=5Fcomponent):=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=B0=D0=BD=D0=BD=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D1=86=D0=B8=D0=B8=20=D1=82=D0=B8=D0=BF=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=BF=D0=B0=D0=BD=D0=B5=D0=BB=D0=B8=20=D0=BD=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=B3=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлены аннотации параметров: * locator: str | Locator во всех методах * item_name: str в click_item(), click_sub_item() и check_item_visibility() * sublevel_number: int в click_sub_item() - Добавлены возвращаемые типы: * -> list[str] для get_item_names() * -> None для методов действий и проверок Изменения улучшают документирование API компонента и помогают в статическом анализе кода. --- components/navbar_component.py | 58 ++++++---------------------------- 1 file changed, 10 insertions(+), 48 deletions(-) diff --git a/components/navbar_component.py b/components/navbar_component.py index d605e25..ce130b5 100644 --- a/components/navbar_component.py +++ b/components/navbar_component.py @@ -1,4 +1,4 @@ -from playwright.sync_api import Page +from playwright.sync_api import Page, Locator from components.base_component import BaseComponent from locators.navigation_panel_locators import NavigationPanelLocators @@ -9,57 +9,24 @@ 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: Список текстов элементов - """ + def get_item_names(self, locator: str | Locator) -> list[str]: + """Получает тексты всех элементов по указанному локатору.""" loc = self.get_locator(locator) return loc.all_inner_texts() - def click_item(self, locator, item_name): - """Кликает по элементу с указанным текстом. - - Args: - locator: Локатор для поиска элемента - item_name: Текст элемента для клика - """ + def click_item(self, locator: str | Locator, item_name: str) -> None: + """Кликает по элементу с указанным текстом.""" 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: Если указан недопустимый уровень вложенности - """ + def click_sub_item(self, locator: str | Locator, sublevel_number: int, item_name: str) -> None: + """Кликает по вложенному элементу с указанным текстом.""" root_locator = self.get_locator(NavigationPanelLocators.NODE_ROOT) children_locator = self.get_locator(NavigationPanelLocators.NODE_CHILDREN) @@ -73,13 +40,8 @@ class NavigationPanelComponent(BaseComponent): raise ValueError("the navigation panel has two levels of nesting only") # Проверки: - def check_item_visibility(self, locator, item_name): - """Проверяет видимость элемента с указанным текстом. - - Args: - locator: Локатор для поиска элемента - item_name: Текст элемента для проверки - """ + def check_item_visibility(self, locator: str | Locator, item_name: str) -> None: + """Проверяет видимость элемента с указанным текстом.""" 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) \ No newline at end of file