diff --git a/components_derived/modal_send_test_sms.py b/components_derived/modal_send_test_sms.py new file mode 100644 index 0000000..3528374 --- /dev/null +++ b/components_derived/modal_send_test_sms.py @@ -0,0 +1,109 @@ +"""Модуль 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') diff --git a/pages/sms_notifications_settings_tab.py b/pages/sms_notifications_settings_tab.py index 3eadebd..b75cd58 100644 --- a/pages/sms_notifications_settings_tab.py +++ b/pages/sms_notifications_settings_tab.py @@ -11,8 +11,8 @@ from locators.settings_form_locators import SettingsFormLocators from elements.text_input_element import TextInput from elements.icon_element import Icon from components.toolbar_component import ToolbarComponent -# from components.alert_component import AlertComponent from components_derived.settings_form_component import SettingsFormComponent +from components_derived.modal_send_test_sms import SendTestSMSModalWindow from pages.base_page import BasePage @@ -70,9 +70,6 @@ class SMSNotificationsSettingsTab(BasePage): self.settings_form.add_tooltip_button(page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\ get_by_role("button", name='Тест'), "test_button") - - # self.alert = AlertComponent(page) - # Действия: def click_cancel_button(self) -> None: """Нажатие кнопки 'Отменить' на тулбаре.""" @@ -97,11 +94,12 @@ class SMSNotificationsSettingsTab(BasePage): self.settings_form.get_content_item("password_hidden_icon").click() - def click_test_button(self) -> None: + def click_test_button(self) -> SendTestSMSModalWindow: """Нажатие кнопки 'Тест' в форме ввода настроек.""" self.settings_form.check_button_visibility("test_button") self.settings_form.get_button_by_name("test_button").click() + return SendTestSMSModalWindow(self.page) def get_ip_setting_value(self) -> str: """Возвращает текущее значение поля настроек 'IP'. @@ -214,17 +212,3 @@ class SMSNotificationsSettingsTab(BasePage): """ self.settings_form.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') diff --git a/tests/e2e/notifications/test_sms_notifications_settings_tab.py b/tests/e2e/notifications/test_sms_notifications_settings_tab.py index 92301b3..4f261be 100644 --- a/tests/e2e/notifications/test_sms_notifications_settings_tab.py +++ b/tests/e2e/notifications/test_sms_notifications_settings_tab.py @@ -53,7 +53,31 @@ class TestSMSNotificationsSettingsTab: # Проверка элементов интерфейса sms_notification_settings_tab.check_content() - @pytest.mark.develop + # @pytest.mark.develop + def test_send_sms_window_content(self, browser: Page) -> None: + """Тест содержимого вкладки настройки СМС уведомлений. + + Проверяет: + Заполнение наличие и заполнение поля ввода номера + """ + + expected_sms_phone = "7(111) 111-11-11" + + # Инициализация вкладки + sms_notification_settings_tab = SMSNotificationsSettingsTab(browser) + sms_notification_settings_tab.should_be_test_button() + + send_sms_window = sms_notification_settings_tab.click_test_button() + send_sms_window.check_content() + + send_sms_window.input_sms_phone(expected_sms_phone) + actual_sms_phone = send_sms_window.get_sms_phone() + assert expected_sms_phone == actual_sms_phone, \ + f"Expected sms phone field value {expected_sms_phone} is not equal actual {actual_sms_phone}" + + send_sms_window.close_by_toolbar_button() + + # @pytest.mark.develop # TO-DO: rewrite tescase after feature release def test_send_sms_notification(self, browser: Page) -> None: """Тест содержимого вкладки настройки СМС уведомлений. @@ -63,6 +87,7 @@ class TestSMSNotificationsSettingsTab: """ field_values = ["8.8.8.8", "testadmin", "test12345678"] + # sms_phone = "7(910)123-34-40" # Инициализация вкладки sms_notification_settings_tab = SMSNotificationsSettingsTab(browser) @@ -93,5 +118,7 @@ class TestSMSNotificationsSettingsTab: sms_notification_settings_tab.should_be_test_button() - #sms_notification_settings_tab.click_test_button() - # sms_notification_settings_tab.should_be_success_alert() + # send_sms_window = sms_notification_settings_tab.click_test_button() + # send_sms_window.input_sms_phone(sms_phone) + + # send_sms_window.should_be_success_alert()