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