e-nms_qa_automation/components_derived/settings_form_component.py

98 lines
4.3 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, Locator
from tools.logger import get_logger
from locators.settings_form_locators import SettingsFormLocators
from elements.tooltip_button_element import TooltipButton
from elements.button_element import Button
from components.toolbar_component import ToolbarComponent
from components.base_component import BaseComponent
logger = get_logger("SETTINGS_FORM")
class SettingsFormComponent(BaseComponent):
"""Компонент формы ввода и отображения полей настроек. Предоставляет методы для взаимодействия с формой,
ее содержимым и проверок."""
def __init__(self, page: Page):
super().__init__(page)
self.toolbar = ToolbarComponent(page, "")
self.content_items = {}
self.buttons = []
# Действия:
def add_content_item(self, name: str, item: object) -> None:
"""Добавляет элемент содержимого в форму по заданному имени."""
self.content_items[name] = item
def get_content_item(self, name: str) -> object | None:
"""Возвращает элемент содержимого по имени или None, если не найден."""
return self.content_items.get(name)
def add_toolbar_title(self, title: str) -> None:
"""Добавляет заголовок в панель инструментов модального окна."""
self.toolbar.add_title(title)
def add_button(self, locator: str, name: str) -> None:
"""Добавляет кнопку в форму."""
self.buttons.append(Button(self.page, locator, name))
def add_tooltip_button(self, locator: str, name: str) -> None:
"""Добавляет кнопку в форму."""
self.buttons.append(TooltipButton(self.page, locator, name))
def get_button_by_name(self, name: str) -> Button | TooltipButton | None:
"""Ищет и возвращает кнопку по имени или None, если не найдена."""
for button in self.buttons:
if button.name == name:
return button
return None
def click_button(self, name: str) -> None:
"""Кликает по кнопке с заданным именем. Вызывает ошибку, если не найдена."""
button = self.get_button_by_name(name)
if button is None:
assert False, f"Button with name '{name}' not found"
button.click()
# Проверки:
def check_vertical_scrolling(self, locator: str| Locator) -> bool:
"""Проверяет возможность вертикальной прокрутки формы."""
return self.is_scrollable_vertically(locator)
def check_button_tooltip(self, name: str, tooltip: str) -> None:
"""Проверяет текст подсказки кнопки. """
button = self.get_button_by_name(name)
if button is None:
raise AssertionError(f"Unsupported button name {name}")
button.check_tooltip_with_text(tooltip)
def check_button_visibility(self, name: str) -> None:
"""Проверяет наличие кнопки по имени. Вызывает ошибку, если не найдена."""
button = self.get_button_by_name(name)
if button is None:
assert False, f"Button with name '{name}' not found"
button.check_visibility(f"Button with name '{name}' is missing")
def should_be_toolbar(self) -> None:
"""Проверяет наличие тулбара.
Raises:
AssertionError: Если тулбар или кнопка редактирования отсутствуют.
"""
self.toolbar.check_toolbar_presence_by_locator_and_title(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER,
"Session settings form toolbar is missing")