110 lines
4.8 KiB
Python
110 lines
4.8 KiB
Python
"""Модуль modal_send_test_email содержит класс для работы с модальным окном для посылки тестового E-mail на
|
||
базе настроек вкладки 'Уведомления/E-mail'.
|
||
|
||
Класс SendTestEmailModalWindow наследует базовый функционал ModalWindowComponent
|
||
и реализует методы просмотра модального окна отображения задачи.
|
||
"""
|
||
|
||
from playwright.sync_api import Page
|
||
from tools.logger import get_logger
|
||
from locators.modal_window_locators import ModalWindowLocators
|
||
from elements.text_input_element import TextInput
|
||
from components.modal_window_component import ModalWindowComponent
|
||
from components.alert_component import AlertComponent
|
||
|
||
logger = get_logger("SEND_TEST_EMAIL_MODAL_WINDOW")
|
||
|
||
|
||
class SendTestEmailModalWindow(ModalWindowComponent):
|
||
"""Модальное окно для посылки тестового E-mail.
|
||
|
||
Наследует ModalWindowComponent и добавляет функционал для:
|
||
1. Инициализации модального окна
|
||
2. Закрытия модального окна через тулбар
|
||
3. Проверки содержимого модального окна
|
||
"""
|
||
|
||
def __init__(self, page: Page):
|
||
"""Инициализирует элементы формы модального окна отображения задачи."""
|
||
super().__init__(page)
|
||
|
||
|
||
window_locator = page.locator(ModalWindowLocators.MODAL_WINDOW)
|
||
|
||
self.window_title_locator = window_locator.locator("//div[@class='v-toolbar__title']")
|
||
self.add_toolbar_title("Тест")
|
||
|
||
# Настройка кнопки закрытия
|
||
toolbar_button_close_locator = window_locator.locator("//button[@data-testid='E_MAIL_CARD__btn__close']")
|
||
self.add_toolbar_button(toolbar_button_close_locator, "close")
|
||
|
||
# Поле ввода адреса
|
||
elements_locators = self.get_input_fields_locators(window_locator)
|
||
loc = elements_locators.get("E-mail").locator("div.v-text-field__slot > input")
|
||
email_input = TextInput(page, loc, "email_input")
|
||
self.add_content_item("email_input", email_input)
|
||
|
||
# Добавление кнопок действий
|
||
locator_button_test = window_locator.locator("//button[@data-testid='E_MAIL_CARD__footer_btn__test']")
|
||
self.add_button(locator_button_test, "test_button")
|
||
|
||
locator_button_close = window_locator.locator("//button[@data-testid='E_MAIL_CARD__footer_btn__close']")
|
||
self.add_button(locator_button_close, "close_button")
|
||
|
||
self.alert = AlertComponent(page)
|
||
|
||
# Действия:
|
||
def close_by_toolbar_button(self):
|
||
"""Закрывает окно кнопкой на тулбаре."""
|
||
|
||
self.click_toolbar_close_button()
|
||
|
||
def close(self):
|
||
"""Закрывает окно кнопкой на 'Закрыть'."""
|
||
|
||
close_button = self.get_button_by_name("close_button")
|
||
close_button.click()
|
||
|
||
def click_test_button(self):
|
||
"""Отсылка письма по указанному адресу нажатием кнопки 'Тест'."""
|
||
|
||
close_button = self.get_button_by_name("test_button")
|
||
close_button.click()
|
||
|
||
def input_email(self, address: str) -> None:
|
||
"""Заполнение поля 'E-MAIL'."""
|
||
|
||
email_input_field = self.get_content_item("email_input")
|
||
email_input_field.clear()
|
||
email_input_field.input_value(address)
|
||
|
||
# Проверки:
|
||
def check_content(self) -> None:
|
||
"""Проверяет наличие элементов окна.
|
||
"""
|
||
|
||
self.check_by_window_title()
|
||
self.check_toolbar_button_visibility("close")
|
||
self.check_toolbar_button_tooltip("close", "Закрыть")
|
||
|
||
email_input_field = self.get_content_item("email_input")
|
||
email_input_field.check_visibility("E-mail input field is missing")
|
||
email_input_field.check_editable_input("E-mail input field should be editable")
|
||
|
||
|
||
self.check_button_visibility("test_button")
|
||
self.check_button_visibility("close_button")
|
||
|
||
def should_be_success_alert(self) -> None:
|
||
"""Проверяет наличие сообщения об успешной отправке тестового сообщения.
|
||
|
||
Raises:
|
||
AssertionError: Если тулбар отсутствует.
|
||
"""
|
||
|
||
alert_type = self.alert.get_alert_type()
|
||
assert alert_type == "success", f"Expected success alert, but got {alert_type} alert"
|
||
|
||
self.alert.check_alert_presence('\nТестовое сообщение\nотправлено\n')
|
||
self.alert.check_alert_absence('\nТестовое сообщение\nотправлено\n')
|