feat(navbar_component): добавлены аннотации типов для методов панели навигации

- Добавлены аннотации параметров:
  * 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 компонента и помогают в статическом анализе кода.
pull/1/head
Radislav 2025-07-21 15:27:22 +03:00
parent ad8eb5599c
commit 025b171724
1 changed files with 10 additions and 48 deletions

View File

@ -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)