e-nms_qa_automation/pages/push_notifications_settings...

187 lines
8.9 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.

"""Модуль вкладки настройки Push уведомлений.
Содержит класс PushNotificationsSettings для работы с вкладкой настройки Push уведомлений.
Позволяет проверять состояние и взаимодействовать с элементами вкладки.
"""
from playwright.sync_api import Page
from locators.settings_form_locators import SettingsFormLocators
from elements.text_input_element import TextInput
from components.alert_component import AlertComponent
from components_derived.settings_form_component import SettingsFormComponent
from components_derived.interactive_dropdown_list import InteractiveDropdownList
from pages.base_page import BasePage
class PushNotificationsSettingsTab(BasePage):
"""Класс для работы с вкладкой настройки Push уведомлений.
Предоставляет методы для взаимодействия с вкладкой настройки Push уведомлений.
Args:
page: Экземпляр страницы Playwright.
"""
def __init__(self, page: Page) -> None:
"""Инициализирует компоненты вкладки настройки Push уведомлений."""
super().__init__(page)
# Форма для отображения/редактирования полей настроек Push уведомлений
self.settings_form = SettingsFormComponent(page)
self.settings_form.add_toolbar_title("Push уведомления")
container_locator = self.page.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FORM_CONTAINER)
self.input_fields_locators = self.settings_form.get_input_fields_locators(container_locator)
print(self.input_fields_locators)
loc = self.input_fields_locators.get("Сообщение")
loc_message_input = loc.locator("//input[@data-testid='PUSH_NOTIFICATIONS__text-field__message']")
message_setting_input = TextInput(page, loc_message_input, "message_setting_input")
self.settings_form.add_content_item("message_setting_input", message_setting_input)
loc = self.input_fields_locators.get("Пользователи")
users_setting_input = TextInput(page,
loc.get_by_role("combobox"),
"users_setting_input")
self.settings_form.add_content_item("users_setting_input", users_setting_input)
self.settings_form.add_content_item("users_list", InteractiveDropdownList(page))
self.settings_form.add_tooltip_button(page.locator(SettingsFormLocators.PUSH_NOTIFICATIONS_BUTTON_SUBMIT),
"submit_button")
self.alert = AlertComponent(page)
# Действия:
def clear_users_setting_value(self) -> None:
"""Очищает текущее значение поля настроек 'Пользователи'."""
selected_users = self.get_users_setting_value()
if len(selected_users) > 0:
clear_selection_button = self.page.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FORM_CONTAINER).\
get_by_role("combobox").locator(SettingsFormLocators.CLEAR_SELECTION_BUTTON)
clear_selection_button.click()
def click_submit_button(self) -> None:
"""Нажатие кнопки 'Отправить' в форме ввода настроек."""
self.settings_form.check_button_visibility("submit_button")
self.settings_form.get_button_by_name("submit_button").click()
def get_message_setting_value(self) -> str:
"""Возвращает текущее значение поля настроек 'Сообщение'.
Returns:
str : Текущее значение поля настроек 'Сообщение'.
"""
input_field = self.settings_form.get_content_item("message_setting_input")
return input_field.get_input_value().strip()
def get_users_setting_value(self) -> str:
"""Возвращает текущее значение поля настроек 'Пользователи'.
Returns:
str : Текущее значение поля настроек 'Пользователи'.
"""
users_setting_field_loc = self.page.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FORM_CONTAINER).\
get_by_role("combobox").locator(SettingsFormLocators.SELECTED_VALUES)
return users_setting_field_loc.text_content().strip()
def input_message(self, text: str) -> None:
"""Заполнение поля 'Сообщение'."""
message_input = self.settings_form.get_content_item("message_setting_input")
message_input.clear()
message_input.input_value(text)
def deselect_users(self, users: list[str]) -> None:
"""Изменение значения поля 'Пользователи' путем отмены выбора из выпадающего списка заданных имен."""
assert len(users) != 0, "Users list should not be empty"
self.settings_form.get_content_item("users_setting_input").click()
users_list = self.settings_form.get_content_item("users_list")
for user in users:
users_list.deselect_item_with_text(user)
# Закрываем выпадающий список (кликаем вне его)
self.page.mouse.click(10, 10)
def select_users(self, users: list[str]) -> None:
"""Заполнение поля 'Пользователи' путем выбора из выпадающего списка заданных имен."""
assert len(users) != 0, "Users list should not be empty"
self.settings_form.get_content_item("users_setting_input").click()
users_list = self.settings_form.get_content_item("users_list")
for user in users:
users_list.select_item_with_text(user)
# Закрываем выпадающий список (кликаем вне его)
self.page.mouse.click(10, 10)
# Проверки:
def check_content(self):
"""Проверяет наличие и корректность всех элементов страницы."""
expected_input_field_names = ["Сообщение", "Пользователи"]
self.should_be_form_toolbar()
self.settings_form.check_button_visibility("submit_button")
self.settings_form.check_button_tooltip("submit_button", "Отправить Push уведомление")
actual_input_field_names = self.input_fields_locators.keys()
assert set(actual_input_field_names) == set(expected_input_field_names), \
f"Misscomparison input field names: Expected {expected_input_field_names}, Actual {actual_input_field_names}"
for name in self.settings_form.content_items.keys():
if name == "users_list":
self.settings_form.get_content_item("users_setting_input").click()
users_list = self.settings_form.get_content_item(name)
selected_users = users_list.get_selected_items(SettingsFormLocators.DROPDOWN_LIST)
assert len(selected_users) == 0, "There should be no selected users"
else:
item = self.settings_form.get_content_item(name)
item.check_visibility(
f"Push notifications settings input form item with name '{name}' is missing"
)
def should_be_form_toolbar(self) -> None:
"""Проверяет наличие тулбара формы редактирования настроек.
Raises:
AssertionError: Если тулбар отсутствует.
"""
self.settings_form.should_be_toolbar()
def should_be_success_alert(self) -> None:
"""Проверяет наличие сообщения об успешной отправке push-уведомления.
Raises:
AssertionError: Если alert отсутствует.
"""
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('\nPush-уведомление\nуспешно отправлено\n')
self.alert.check_alert_absence('\nPush-уведомление\nуспешно отправлено\n')
def should_be_disabled_button(self) -> None:
"""Проверяет, что кнопка 'Отправить' отключена.
Raises:
AssertionError: Если кнопка включена.
"""
submit_button = self.settings_form.get_button_by_name("submit_button")
assert submit_button.is_disabled, "Submit button should be disabled"