e-nms_qa_automation/pages/push_notifications_settings...

196 lines
9.5 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.

"""Модуль вкладки настройки Push уведомлений.
Содержит класс PushNotificationsSettings для работы с вкладкой настройки Push уведомлений.
Позволяет проверять состояние и взаимодействовать с элементами вкладки.
"""
import re
from playwright.sync_api import Page
from locators.settings_form_locators import SettingsFormLocators
from elements.text_input_element import TextInput
from elements.text_element import Text
from components.toolbar_component import ToolbarComponent
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)
self.toolbar = ToolbarComponent(page, "Push уведомления")
# Форма для отображения/редактирования полей настроек Push уведомлений
self.settings_form = SettingsFormComponent(page)
self.settings_form.add_toolbar_title("Общие")
message_setting_label = Text(page,
page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\
get_by_text('Сообщение'),
"message_setting_label")
self.settings_form.add_content_item("message_setting_label", message_setting_label)
loc_message_input = page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\
get_by_label('Сообщение').nth(1)
message_setting_input = TextInput(page, loc_message_input, "message_setting_input")
self.settings_form.add_content_item("message_setting_input", message_setting_input)
users_settings_locator = page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\
get_by_label('Пользователи')
users_setting_label = Text(page, users_settings_locator, "users_setting_label")
self.settings_form.add_content_item("users_setting_label", users_setting_label)
users_setting_input = TextInput(page,
page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\
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.SETTTINGS_FORM_SCROLL_CONTAINER).\
get_by_role("button", name='Отправить'),
"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.SETTTINGS_FORM_SCROLL_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.SETTTINGS_FORM_SCROLL_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):
"""Проверяет наличие и корректность всех элементов страницы."""
self.should_be_toolbar()
self.should_be_form_toolbar()
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"
)
self.settings_form.check_button_visibility("submit_button")
self.settings_form.check_button_tooltip("submit_button", "Отправить Push уведомление")
def should_be_toolbar(self) -> None:
"""Проверяет наличие тулбара страницы.
Raises:
AssertionError: Если тулбар или кнопка редактирования отсутствуют.
"""
loc = self.page.get_by_role("navigation").filter(
has_text=re.compile("Push уведомления")).locator("div").nth(1)
self.toolbar.check_toolbar_presence_by_locator(loc, "Toolbar with title 'Push уведомления' 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_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')