from playwright.sync_api import Page from components.base_component import BaseComponent from components.toolbar_component import ToolbarComponent from elements.button_element import Button from locators.modal_window_locators import ModalWindowLocators from tools.logger import get_logger 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: """Получение элемента содержимого по имени.""" 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_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: """Поиск кнопки по имени.""" 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_presence(f"Modal window with '{self.toolbar.title}' is missing") def check_button_presence(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_presence(f"Button with name '{name}' is missing") def check_toolbar_button_presence(self, name: str) -> None: """Проверка наличия кнопки в панели инструментов.""" self.toolbar.check_button_presence(name) def check_toolbar_button_tooltip(self, name: str, tooltip: str) -> None: """Проверка подсказки кнопки в панели инструментов.""" self.toolbar.check_button_tooltip(name, tooltip)