e-nms_qa_automation/components_derived/modal_change_password.py

195 lines
9.3 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.

"""Модуль modal_change_password содержит класс для работы с окном изменения пароля текущего пользователя.
Класс ChangePasswordModalWindow наследует базовый функционал ModalWindowComponent
и реализует методы для изменения пароля пользователя.
"""
from playwright.sync_api import Page
from tools.logger import get_logger
from locators.text_input_locators import TextInputLocators
from locators.modal_window_locators import ModalWindowLocators
from elements.text_element import Text
from elements.text_input_element import TextInput
from elements.icon_element import Icon
from data.environment import host
from components.modal_window_component import ModalWindowComponent
from components.alert_component import AlertComponent
logger = get_logger("CHANGE_PASSWORD_MODAL_WINDOW")
class ChangePasswordModalWindow(ModalWindowComponent):
"""Модальное окно изменения пароля текущего пользователя.
Наследует ModalWindowComponent и добавляет:
- Поля задания пароля
- Кнопки действий (Сохранить, Отменить)
"""
def __init__(self, page: Page):
"""Инициализирует элементы формы редактирования пользователя."""
super().__init__(page)
modal_window_locator = page.locator(ModalWindowLocators.MODAL_WINDOW)
# Тулбар с заголовком
user_name = host.get_current_user_name()
self.add_toolbar_title(f"Изменить пароль для пользователя {user_name}?")
# Поля ввода пароля
loc = modal_window_locator.get_by_label("Введите текущий пароль *")
old_password_input = TextInput(page, loc, "old_password_input")
self.add_content_item("old_password_input", old_password_input)
icon_locator = loc.locator("xpath=../..").locator(TextInputLocators.ICON_PASSWORD_HIDING)
old_password_hidden_icon = Icon(page, icon_locator,
"old password hidden icon")
self.add_content_item("old_password_hidden_icon", old_password_hidden_icon)
loc = modal_window_locator.get_by_label("Введите новый пароль *")
new_password_input = TextInput(page, loc, "new_password_input")
self.add_content_item("new_password_input", new_password_input)
icon_locator = loc.locator("xpath=../..").locator(TextInputLocators.ICON_PASSWORD_HIDING)
new_password_hidden_icon = Icon(page, icon_locator,
"new password hidden icon")
self.add_content_item("new_password_hidden_icon", new_password_hidden_icon)
loc = modal_window_locator.get_by_label("Введите повторно новый пароль *")
confirm_password_input = TextInput(page, loc, "confirm_password_input")
self.add_content_item("confirm_password_input", confirm_password_input)
icon_locator = loc.locator("xpath=../..").locator(TextInputLocators.ICON_PASSWORD_HIDING)
confirm_password_hidden_icon = Icon(page, icon_locator,
"confirm password hidden icon")
self.add_content_item("confirm_password_hidden_icon", confirm_password_hidden_icon)
input_form_error_message = Text(page,
modal_window_locator.locator(TextInputLocators.INPUT_FORM_MESSAGE),
"input form error message")
self.add_content_item("input_form_error_message", input_form_error_message)
# Добавление кнопок действий
locator_button_save = self.page.get_by_role("button", name="Сохранить")
self.add_button(locator_button_save, "save")
locator_button_cancel = self.page.get_by_role("button", name="Отменить")
self.add_button(locator_button_cancel, "cancel")
# Alert при успешном добавлении пользователя
self.alert = AlertComponent(page)
# Действия:
def click_cancel_button(self) -> None:
"""Нажимает кнопку 'Отменить'"""
self.get_button_by_name("cancel").click()
def click_old_password_hidden_icon(self) -> None:
"""Нажатие на иконку скрытия старого пароля."""
self.get_content_item("old_password_hidden_icon").click()
def click_new_password_hidden_icon(self) -> None:
"""Нажатие на иконку скрытия нового пароля."""
self.get_content_item("new_password_hidden_icon").click()
def click_confirm_password_hidden_icon(self) -> None:
"""Нажатие на иконку скрытия пароля подтверждения."""
self.get_content_item("confirm_password_hidden_icon").click()
def change_password(self, old_password: str, new_password: str):
"""Заполняет элементы формы, нажимает кнопку 'Сохранить'"""
error = ""
self.get_content_item("old_password_input").input_value(old_password)
self.get_content_item("new_password_input").input_value(new_password)
self.get_content_item("confirm_password_input").input_value(new_password)
button_save = self.get_button_by_name("save")
if button_save.is_disabled():
error_message = self.get_content_item("input_form_error_message")
error = error_message.get_text(0)
return False, error
button_save.click()
is_changed = False
alert_type = self.alert.get_alert_type()
if alert_type == "success":
self.alert.check_alert_presence(' Пароль успешно изменён ')
self.alert.check_alert_absence(' Пароль успешно изменён ')
is_changed = True
elif alert_type == "error":
self.alert.check_alert_presence(' Неверно указан текущий пароль ')
self.alert.check_alert_absence(' Неверно указан текущий пароль ')
error = "Old password is not equal real password"
else:
error = f"Got unexpected alert type {alert_type}"
return is_changed, error
def get_password_inputs(self) -> []:
"""Возвращает список полей ввода пароля (для тестовых целей)."""
text_inputs = []
text_inputs.append(self.get_content_item("old_password_input"))
text_inputs.append(self.get_content_item("new_password_input"))
text_inputs.append(self.get_content_item("confirm_password_input"))
return text_inputs
# Проверки:
def check_content(self):
"""Проверяет наличие и корректность всех элементов формы."""
self.check_by_window_title()
self.get_content_item("old_password_input").check_visibility(
"Old password input form is missing"
)
old_password_hidden_icon = self.get_content_item("old_password_hidden_icon")
old_password_hidden_icon.check_visibility(
"Old password hidden icon is missing"
)
is_hidden_state = old_password_hidden_icon.is_password_hidden()
assert is_hidden_state, "Old password hidden icon should be in hidden state"
self.get_content_item("new_password_input").check_visibility(
"New password input form is missing"
)
new_password_hidden_icon = self.get_content_item("new_password_hidden_icon")
new_password_hidden_icon.check_visibility(
"New password hidden icon is missing"
)
is_hidden_state = new_password_hidden_icon.is_password_hidden()
assert is_hidden_state, "New password hidden icon should be in hidden state"
self.get_content_item("confirm_password_input").check_visibility(
"Confirm password input form is missing"
)
confirm_password_hidden_icon = self.get_content_item("confirm_password_hidden_icon")
confirm_password_hidden_icon.check_visibility(
"Confirm password hidden icon is missing"
)
is_hidden_state = confirm_password_hidden_icon.is_password_hidden()
assert is_hidden_state, "Confirm password hidden icon should be in hidden state"
self.check_button_visibility("cancel")
button_save = self.get_button_by_name("save")
is_disabled = button_save.is_disabled()
assert is_disabled, "Button 'Сохранить' should be hidden"
def check_error_message(self, text: str) -> None:
"""Проверяет сообщение об ошибке, возникшее при заполнении полей формы."""
error_message = self.get_content_item("input_form_error_message")
error_message.check_have_text(text, "Unexpected error message")