e-nms_qa_automation/components/modal_window_component.py

188 lines
6.7 KiB
Python
Raw 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 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):
"""Компонент модального окна.
Предоставляет методы для работы с модальными окнами:
- управление содержимым и кнопками
- прокрутка содержимого
- проверка элементов интерфейса
Атрибуты:
page: экземпляр страницы Playwright
toolbar: компонент панели инструментов окна
content_items: словарь элементов содержимого
buttons: список кнопок окна
"""
def __init__(self, page: Page):
"""Инициализация компонента модального окна.
Args:
page: экземпляр страницы Playwright
"""
super().__init__(page)
self.toolbar = ToolbarComponent(page, "")
self.content_items = {}
self.buttons = []
# Действия:
def add_content_item(self, name, item):
"""Добавление элемента содержимого в окно.
Args:
name: имя элемента
item: объект элемента
"""
self.content_items[name] = item
def get_content_item(self, name):
"""Получение элемента содержимого по имени.
Args:
name: имя элемента
Returns:
Элемент содержимого или None, если не найден
"""
return self.content_items.get(name)
def add_toolbar_title(self, title: str):
"""Добавление заголовка в панель инструментов.
Args:
title: текст заголовка
"""
self.toolbar.add_title(title)
def add_toolbar_button(self, locator, name):
"""Добавление кнопки в панель инструментов.
Args:
locator: локатор кнопки
name: имя кнопки
"""
self.toolbar.add_button(locator, name)
def add_button(self, locator, name):
"""Добавление кнопки в окно.
Args:
locator: локатор кнопки
name: имя кнопки
"""
self.buttons.append(Button(self.page, locator, name))
def get_button_by_name(self, name) -> Button | None:
"""Поиск кнопки по имени.
Args:
name: имя кнопки
Returns:
Button: найденная кнопка или None
"""
for button in self.buttons:
if button.name == name:
return button
return None
def click_button(self, name):
"""Нажатие кнопки по имени.
Args:
name: имя кнопки
Raises:
AssertionError: если кнопка не найдена
"""
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):
"""Нажатие кнопки закрытия в панели инструментов."""
self.toolbar.click_button("close")
def scroll_window_down(self):
"""Прокрутка содержимого окна вниз."""
self.scroll_down(ModalWindowLocators.MODAL_WINDOW)
def scroll_window_up(self):
"""Прокрутка содержимого окна вверх."""
self.scroll_up(ModalWindowLocators.MODAL_WINDOW)
def scroll_window_left(self):
"""Прокрутка содержимого окна влево."""
self.scroll_left(ModalWindowLocators.MODAL_WINDOW)
def scroll_window_right(self):
"""Прокрутка содержимого окна вправо."""
self.scroll_right(ModalWindowLocators.MODAL_WINDOW)
# Проверки:
def check_window_vertical_scrolling(self):
"""Проверка возможности вертикальной прокрутки.
Returns:
bool: True если прокрутка возможна
"""
return self.is_scrollable_vertically(ModalWindowLocators.MODAL_WINDOW)
def check_window_horizontal_scrolling(self):
"""Проверка возможности горизонтальной прокрутки.
Returns:
bool: True если прокрутка возможна
"""
return self.is_scrollable_horizontally(ModalWindowLocators.MODAL_WINDOW)
def check_by_window_title(self):
"""Проверка наличия окна по заголовку.
Raises:
AssertionError: если окно не найдено
"""
self.toolbar.check_presence(f"Modal window with '{self.toolbar.title}' is missing")
def check_button_presence(self, name):
"""Проверка наличия кнопки по имени.
Args:
name: имя кнопки
Raises:
AssertionError: если кнопка не найдена
"""
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):
"""Проверка наличия кнопки в панели инструментов.
Args:
name: имя кнопки
"""
self.toolbar.check_button_presence(name)
def check_toolbar_button_tooltip(self, name, tooltip):
"""Проверка подсказки кнопки в панели инструментов.
Args:
name: имя кнопки
tooltip: ожидаемый текст подсказки
"""
self.toolbar.check_button_tooltip(name, tooltip)