e-nms_qa_automation/components/navbar_component.py

85 lines
3.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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)