"""Модуль modal_send_test_sms содержит класс для работы с модальным окном для посылки тестового СМС на базе настроек вкладки 'Уведомления/СМС'. Класс SendTestSMSModalWindow наследует базовый функционал ModalWindowComponent и реализует методы просмотра модального окна отображения задачи. """ from playwright.sync_api import Page, expect 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_SMS_MODAL_WINDOW") class SendTestSMSModalWindow(ModalWindowComponent): """Модальное окно для посылки тестового СМС. Наследует 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("Проверка sms уведомления") # Настройка кнопки закрытия toolbar_button_close_locator = window_locator.locator("//button[@data-testid='SMS_TEST_CARD__btn__close']") self.add_toolbar_button(toolbar_button_close_locator, "close") # Поле ввода номера телефона loc = window_locator.locator("//input[@data-testid='SMS_TEST_CARD__text-field_integer__sms_phone']") sms_phone_input = TextInput(page, loc, "sms_phone_input") self.add_content_item("sms_phone_input", sms_phone_input) # Добавление кнопок действий locator_button_test = window_locator.locator("//button[@data-testid='SMS_TEST_CARD__btn__testSmsSend']") self.add_button(locator_button_test, "test_button") # self.alert = AlertComponent(page) # Действия: def close_by_toolbar_button(self): """Закрывает окно кнопкой на тулбаре.""" self.click_toolbar_close_button() def click_test_button(self): """Отсылка sms по указанному номеру телефона нажатием кнопки 'Тест'.""" close_button = self.get_button_by_name("test_button") close_button.click() def get_sms_phone(self) -> str: """Возвращает текущее значение поля 'Номер для СМС'.""" sms_phone_input_field = self.get_content_item("sms_phone_input") return sms_phone_input_field.get_input_value() def input_sms_phone(self, sms_phone: str) -> None: """Заполнение поля 'Номер для СМС'.""" sms_phone_input_field = self.get_content_item("sms_phone_input") sms_phone_input_field.clear() sms_phone_input_field.input_value(sms_phone) # Проверки: def check_content(self) -> None: """Проверяет наличие элементов окна. """ self.check_by_window_title() self.check_toolbar_button_visibility("close") self.check_toolbar_button_tooltip("close", "Закрыть") sms_phone_input_field = self.get_content_item("sms_phone_input") sms_phone_input_field.check_visibility("SMS phone input field is missing") sms_phone_input_field.check_editable_input("SMS phone input field should be editable") loc = self.page.locator(ModalWindowLocators.MODAL_WINDOW). \ locator("//input[@data-testid='SMS_TEST_CARD__text-field_integer__sms_phone']") expect(loc).to_have_attribute("aria-label", "Номер для СМС") self.check_button_visibility("test_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')