195 lines
9.3 KiB
Python
195 lines
9.3 KiB
Python
"""Модуль 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 = page.locator(ModalWindowLocators.CHANDE_PASSWORD_WINDOW_CURRENT_PASSWORD)
|
||
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 = page.locator(ModalWindowLocators.CHANDE_PASSWORD_WINDOW_NEW_PASSWORD)
|
||
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 = page.locator(ModalWindowLocators.CHANDE_PASSWORD_WINDOW_CHECK_PASSWORD)
|
||
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 = page.locator(ModalWindowLocators.CHANDE_PASSWORD_WINDOW_BUTTON_SAVE)
|
||
self.add_button(locator_button_save, "save")
|
||
|
||
locator_button_cancel = page.locator(ModalWindowLocators.CHANDE_PASSWORD_WINDOW_BUTTON_CANCEL)
|
||
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")
|