e-nms_qa_automation/components/toolbar_component.py

144 lines
5.2 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, expect, Locator
from components.base_component import BaseComponent
from elements.tooltip_button_element import TooltipButton
from locators.toolbar_locators import ToolbarLocators
from tools.logger import get_logger
logger = get_logger("TOOLBAR")
class ToolbarComponent(BaseComponent):
"""Компонент тулбара (панели инструментов).
Предоставляет методы для работы с панелью инструментов:
- Добавление/управление кнопками
- Проверка видимости элементов
- Взаимодействие с элементами тулбара
Args:
page (Page): Экземпляр страницы Playwright
title (str): Заголовок тулбара
"""
def __init__(self, page: Page, title: str):
"""Инициализация компонента тулбара."""
super().__init__(page)
self.title = title
self.buttons = []
def add_title(self, title: str) -> None:
"""Устанавливает заголовок тулбара.
Args:
title (str): Новый заголовок тулбара
"""
self.title = title
def add_button(self, locator: Locator, name: str) -> None:
"""Добавляет кнопку в тулбар.
Args:
locator (Locator): Локатор кнопки
name (str): Уникальное имя кнопки
"""
self.buttons.append(TooltipButton(self.page, locator, name))
def get_button_by_name(self, name: str) -> TooltipButton | None:
"""Возвращает кнопку по имени.
Args:
name (str): Имя кнопки
Returns:
TooltipButton | None: Экземпляр кнопки или None если не найдена
"""
for button in self.buttons:
if button.name == name:
return button
return None
def click_button(self, name: str) -> None:
"""Кликает по кнопке тулбара.
Args:
name (str): Имя кнопки
Raises:
AssertionError: Если кнопка не найдена
"""
button = self.get_button_by_name(name)
if button is None:
raise AssertionError(f"Unsupported button name {name}")
button.click()
def is_button_present(self, name: str) -> bool:
"""Проверяет наличие кнопки.
Args:
name (str): Имя кнопки
Returns:
bool: True если кнопка присутствует
Raises:
AssertionError: Если имя кнопки не поддерживается
"""
button = self.get_button_by_name(name)
if button is None:
raise AssertionError(f"Unsupported button name {name}")
return button.is_present(timeout=1000) # Ожидание 1 секунда
def is_button_not_present(self, name: str) -> bool:
"""Проверяет отсутствие кнопки.
Args:
name (str): Имя кнопки
Returns:
bool: True если кнопка отсутствует
Raises:
AssertionError: Если имя кнопки не поддерживается
"""
button = self.get_button_by_name(name)
if button is None:
raise AssertionError(f"Unsupported button name {name}")
return button.is_not_present(timeout=1000) # Ожидание 1 секунда
def check_presence(self, message: str) -> None:
"""Проверяет видимость тулбара.
Args:
message (str): Сообщение об ошибке если тулбар не виден
"""
locator = self.get_locator(ToolbarLocators.TITLE).filter(has_text=self.title)
expect(locator).to_be_visible(), message
def check_button_presence(self, name: str) -> None:
"""Проверяет наличие и видимость кнопки.
Args:
name (str): Имя кнопки
Raises:
AssertionError: Если кнопка не найдена или не видна
"""
button = self.get_button_by_name(name)
if button is None:
raise AssertionError(f"Unsupported button name {name}")
button.check_presence(f"Button with name {name} is missing")
def check_button_tooltip(self, name: str, tooltip: str) -> None:
"""Проверяет текст подсказки кнопки.
Args:
name (str): Имя кнопки
tooltip (str): Ожидаемый текст подсказки
Raises:
AssertionError: Если кнопка не найдена или текст подсказки не совпадает
"""
button = self.get_button_by_name(name)
if button is None:
raise AssertionError(f"Unsupported button name {name}")
button.check_tooltip_with_text(ToolbarLocators.TOOLTIP, tooltip)