"""Модуль компонента формы ввода и отображения полей настроек. Содержит класс для работы с формами ввода и отображения полей настроек,их элементами и проверками.""" 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")