"""Модуль компонента модального окна. Содержит класс для работы с модальными окнами, их элементами и проверками.""" from playwright.sync_api import Page from tools.logger import get_logger from locators.modal_window_locators import ModalWindowLocators from elements.button_element import Button from components.toolbar_component import ToolbarComponent from components.base_component import BaseComponent logger = get_logger("MODAL_WINDOW") class ModalWindowComponent(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_toolbar_button(self, locator: str, name: str) -> None: """Добавляет кнопку в панель инструментов модального окна.""" self.toolbar.add_tooltip_button(locator, name) def add_button(self, locator: str, name: str) -> None: """Добавляет кнопку в модальное окно.""" self.buttons.append(Button(self.page, locator, name)) def get_button_by_name(self, name: str) -> Button | 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 click_toolbar_close_button(self) -> None: """Кликает по кнопке закрытия в панели инструментов.""" self.toolbar.click_button("close") def scroll_window_down(self) -> None: """Прокручивает содержимое окна вниз.""" self.scroll_down(ModalWindowLocators.MODAL_WINDOW) def scroll_window_up(self) -> None: """Прокручивает содержимое окна вверх.""" self.scroll_up(ModalWindowLocators.MODAL_WINDOW) def scroll_window_left(self) -> None: """Прокручивает содержимое окна влево.""" self.scroll_left(ModalWindowLocators.MODAL_WINDOW) def scroll_window_right(self) -> None: """Прокручивает содержимое окна вправо.""" self.scroll_right(ModalWindowLocators.MODAL_WINDOW) # Проверки: def check_window_vertical_scrolling(self) -> bool: """Проверяет возможность вертикальной прокрутки окна.""" return self.is_scrollable_vertically(ModalWindowLocators.MODAL_WINDOW) def check_window_horizontal_scrolling(self) -> bool: """Проверяет возможность горизонтальной прокрутки окна.""" return self.is_scrollable_horizontally(ModalWindowLocators.MODAL_WINDOW) def check_by_window_title(self) -> None: """Проверяет наличие окна по заголовку.""" self.toolbar.check_toolbar_presence(f"Modal window with '{self.toolbar.title}' is missing") 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 check_toolbar_button_visibility(self, name: str) -> None: """Проверяет наличие кнопки в панели инструментов.""" self.toolbar.check_button_visibility(name) def check_toolbar_button_tooltip(self, name: str, tooltip: str) -> None: """Проверяет подсказку у кнопки в панели инструментов.""" self.toolbar.check_button_tooltip(name, tooltip)