e-nms_qa_automation/components/modal_window_component.py

124 lines
5.2 KiB
Python
Raw Permalink 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
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)