Актуализированы тесты создания и редактирования пользователя

pull/1/head
nsubbot 2025-10-15 16:11:23 +03:00
parent aac422e2b2
commit c239ce9916
7 changed files with 619 additions and 330 deletions

View File

@ -52,7 +52,7 @@ class AddADUserModalWindow(ModalWindowComponent):
# Добавление элементов формы # Добавление элементов формы
checkbox_1 = Checkbox( checkbox_1 = Checkbox(
page, page,
self.page.get_by_role("checkbox").nth(0), input_form_locator.get_by_role("checkbox").nth(0),
"active_directory" "active_directory"
) )
self.add_content_item("active_directory_checkbox", checkbox_1) self.add_content_item("active_directory_checkbox", checkbox_1)
@ -65,6 +65,7 @@ class AddADUserModalWindow(ModalWindowComponent):
self.add_content_item("active_directory_checkbox_label", label_1) self.add_content_item("active_directory_checkbox_label", label_1)
# Начальный набор полей формы # Начальный набор полей формы
# Поле Группа
group_loc = input_form_locator.get_by_role("combobox").nth(0) group_loc = input_form_locator.get_by_role("combobox").nth(0)
group_input = TextInput(page, group_loc, "group_input") group_input = TextInput(page, group_loc, "group_input")
self.add_content_item("group_input", group_input) self.add_content_item("group_input", group_input)
@ -76,10 +77,28 @@ class AddADUserModalWindow(ModalWindowComponent):
locator_button_search = self.page.get_by_role("button", name="Поиск") locator_button_search = self.page.get_by_role("button", name="Поиск")
self.add_button(locator_button_search, "search") self.add_button(locator_button_search, "search")
# Поле Имя
loc = input_form_locator.locator("xpath=div[3]").locator(text_field_locator) loc = input_form_locator.locator("xpath=div[3]").locator(text_field_locator)
name_input = TextInput(page, loc, "name_input") name_input = TextInput(page, loc, "name_input")
self.add_content_item("name_input", name_input) self.add_content_item("name_input", name_input)
# Чекбокс "Блокировка" - индекс 1
checkbox_2 = Checkbox(
page,
input_form_locator.get_by_role("checkbox").nth(1),
"blocking"
)
self.add_content_item("blocking_checkbox", checkbox_2)
# Метка "Блокировка" - индекс 1
label_2 = Text(
page,
self.page.locator(label_locator).nth(1),
"blocking_checkbox_label"
)
self.add_content_item("blocking_checkbox_label", label_2)
# Поле Роль
role_loc = input_form_locator.get_by_role("combobox").nth(1) role_loc = input_form_locator.get_by_role("combobox").nth(1)
role_input = TextInput(page, role_loc, "role_input") role_input = TextInput(page, role_loc, "role_input")
self.add_content_item("role_input", role_input) self.add_content_item("role_input", role_input)
@ -88,31 +107,36 @@ class AddADUserModalWindow(ModalWindowComponent):
DropdownList(page) DropdownList(page)
) )
loc = input_form_locator.locator("xpath=div[6]").locator(text_field_locator) # Поле Комментарий
loc = input_form_locator.locator("xpath=div[7]").locator(text_field_locator)
commentary_input = TextInput(page, loc, "commentary_input") commentary_input = TextInput(page, loc, "commentary_input")
self.add_content_item("commentary_input", commentary_input) self.add_content_item("commentary_input", commentary_input)
loc = input_form_locator.locator("xpath=div[7]").locator(text_field_locator) # Поле E-mail
loc = input_form_locator.locator("xpath=div[8]").locator(text_field_locator)
email_input = TextInput(page, loc, "email_input") email_input = TextInput(page, loc, "email_input")
self.add_content_item("email_input", email_input) self.add_content_item("email_input", email_input)
loc = input_form_locator.locator("xpath=div[8]").locator(text_field_locator) # Поле Номер для СМС
loc = input_form_locator.locator("xpath=div[9]").locator(text_field_locator)
phone_input = TextInput(page, loc, "phone_input") phone_input = TextInput(page, loc, "phone_input")
self.add_content_item("phone_input", phone_input) self.add_content_item("phone_input", phone_input)
checkbox_2 = Checkbox( # Чекбокс "Подписка на Push-уведомления" - индекс 2
checkbox_3 = Checkbox(
page, page,
page.get_by_role("checkbox").nth(1), input_form_locator.get_by_role("checkbox").nth(2),
"push_notification" "push_notification"
) )
self.add_content_item("push_notification_checkbox", checkbox_2) self.add_content_item("push_notification_checkbox", checkbox_3)
label_2 = Text( # Метка "Подписка на Push-уведомления" - индекс 2
label_3 = Text(
page, page,
self.page.locator(label_locator).nth(1), self.page.locator(label_locator).nth(2),
"push_notification_checkbox_label" "push_notification_checkbox_label"
) )
self.add_content_item("push_notification_checkbox_label", label_2) self.add_content_item("push_notification_checkbox_label", label_3)
# Добавление кнопок действий # Добавление кнопок действий
locator_button_add = self.page.get_by_role("button", name="Добавить") locator_button_add = self.page.get_by_role("button", name="Добавить")
@ -134,6 +158,26 @@ class AddADUserModalWindow(ModalWindowComponent):
self.get_content_item("active_directory_checkbox").uncheck(force=True) self.get_content_item("active_directory_checkbox").uncheck(force=True)
def check_blocking_checkbox(self):
"""Включает чек-бокс Блокировка."""
self.get_content_item("blocking_checkbox").check(force=True)
def uncheck_blocking_checkbox(self):
"""Выключает чек-бокс Блокировка."""
self.get_content_item("blocking_checkbox").uncheck(force=True)
def check_push_notification_checkbox(self):
"""Включает чек-бокс Push-уведомления."""
self.get_content_item("push_notification_checkbox").check(force=True)
def uncheck_push_notification_checkbox(self):
"""Выключает чек-бокс Push-уведомления."""
self.get_content_item("push_notification_checkbox").uncheck(force=True)
def update_input_form_fields(self, expand): def update_input_form_fields(self, expand):
"""Персчитывает локаторы полей формы ввода при добавлении/удалении дополнительного поля. """ """Персчитывает локаторы полей формы ввода при добавлении/удалении дополнительного поля. """
@ -144,13 +188,13 @@ class AddADUserModalWindow(ModalWindowComponent):
new_loc = input_form_locator.locator("xpath=div[4]").locator(text_field_locator) new_loc = input_form_locator.locator("xpath=div[4]").locator(text_field_locator)
self.get_content_item("name_input").update_locator(new_loc) self.get_content_item("name_input").update_locator(new_loc)
new_loc = input_form_locator.locator("xpath=div[7]").locator(text_field_locator) new_loc = input_form_locator.locator("xpath=div[8]").locator(text_field_locator)
self.get_content_item("commentary_input").update_locator(new_loc) self.get_content_item("commentary_input").update_locator(new_loc)
new_loc = input_form_locator.locator("xpath=div[8]").locator(text_field_locator) new_loc = input_form_locator.locator("xpath=div[9]").locator(text_field_locator)
self.get_content_item("email_input").update_locator(new_loc) self.get_content_item("email_input").update_locator(new_loc)
new_loc = input_form_locator.locator("xpath=div[9]").locator(text_field_locator) new_loc = input_form_locator.locator("xpath=div[10]").locator(text_field_locator)
self.get_content_item("phone_input").update_locator(new_loc) self.get_content_item("phone_input").update_locator(new_loc)
role_loc = input_form_locator.get_by_role("combobox").nth(2) role_loc = input_form_locator.get_by_role("combobox").nth(2)
@ -159,13 +203,13 @@ class AddADUserModalWindow(ModalWindowComponent):
new_loc = input_form_locator.locator("xpath=div[3]").locator(text_field_locator) new_loc = input_form_locator.locator("xpath=div[3]").locator(text_field_locator)
self.get_content_item("name_input").update_locator(new_loc) self.get_content_item("name_input").update_locator(new_loc)
new_loc = input_form_locator.locator("xpath=div[6]").locator(text_field_locator) new_loc = input_form_locator.locator("xpath=div[7]").locator(text_field_locator)
self.get_content_item("commentary_input").update_locator(new_loc) self.get_content_item("commentary_input").update_locator(new_loc)
new_loc = input_form_locator.locator("xpath=div[7]").locator(text_field_locator) new_loc = input_form_locator.locator("xpath=div[8]").locator(text_field_locator)
self.get_content_item("email_input").update_locator(new_loc) self.get_content_item("email_input").update_locator(new_loc)
new_loc = input_form_locator.locator("xpath=div[8]").locator(text_field_locator) new_loc = input_form_locator.locator("xpath=div[9]").locator(text_field_locator)
self.get_content_item("phone_input").update_locator(new_loc) self.get_content_item("phone_input").update_locator(new_loc)
role_loc = input_form_locator.get_by_role("combobox").nth(1) role_loc = input_form_locator.get_by_role("combobox").nth(1)
@ -181,18 +225,25 @@ class AddADUserModalWindow(ModalWindowComponent):
menu_locator = self.page.locator(ModalWindowLocators.MENU_INPUT_FORM_USER_DATA) menu_locator = self.page.locator(ModalWindowLocators.MENU_INPUT_FORM_USER_DATA)
input_form_locator = self.page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA) input_form_locator = self.page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA)
# Поле "Группа" - выбор из списка
group_name = user_data.get("group") group_name = user_data.get("group")
if group_name is None: if group_name is None:
assert False, "Value of 'group' is missing" assert False, "Value of 'group' is missing"
name = user_data.get("name") # Поле "Пользователи AD" - выбор из списка
if name is None: name_AD = user_data.get("name_AD")
assert False, "Value of 'name' is missing" if name_AD is None:
assert False, "Value of 'name_AD' is missing"
# Поле "Имя" - если определено (не None) вводим вручную
name = user_data.get("name")
# Поле "Роль" - выбор из списка
role = user_data.get("role") role = user_data.get("role")
if role is None: if role is None:
assert False, "Value of 'role' is missing" assert False, "Value of 'role' is missing"
# Поиск и выбор заданной группы из списка существующих
group_field = self.get_content_item("group_input") group_field = self.get_content_item("group_input")
group_field.click() group_field.click()
@ -205,6 +256,7 @@ class AddADUserModalWindow(ModalWindowComponent):
group_list.check_item_with_text(group_name) group_list.check_item_with_text(group_name)
group_list.click_item_with_text(group_name) group_list.click_item_with_text(group_name)
# Нажатие кнопки "Поиск"
search_button = self.get_button_by_name("search") search_button = self.get_button_by_name("search")
search_button.click() search_button.click()
@ -212,6 +264,10 @@ class AddADUserModalWindow(ModalWindowComponent):
if count == 2: if count == 2:
assert False, f"Selected group {group_name} is empty. Use another group." assert False, f"Selected group {group_name} is empty. Use another group."
# Если в группе есть пользователи, открывается новое поле, персчет локаторов
self.update_input_form_fields(expand=True)
# Поиск и выбор заданного пользователя AD из списка существующих
user_AD_loc = input_form_locator.get_by_role("combobox").nth(1) user_AD_loc = input_form_locator.get_by_role("combobox").nth(1)
user_AD_input = TextInput(self.page, user_AD_loc, "user_AD_input") user_AD_input = TextInput(self.page, user_AD_loc, "user_AD_input")
self.add_content_item("user_AD_input", user_AD_input) self.add_content_item("user_AD_input", user_AD_input)
@ -224,12 +280,18 @@ class AddADUserModalWindow(ModalWindowComponent):
user_AD_list = self.get_content_item("user_AD_list") user_AD_list = self.get_content_item("user_AD_list")
user_AD_list.scroll_until_end(menu_locator) user_AD_list.scroll_until_end(menu_locator)
user_AD_names = group_list.get_item_names(menu_locator) user_AD_names = group_list.get_item_names(menu_locator)
if name not in user_AD_names: if name_AD not in user_AD_names:
assert False, f"Required user name {name} is missing" assert False, f"Required user name {name_AD} is missing"
user_AD_list.check_item_with_text(name) user_AD_list.check_item_with_text(name_AD)
user_AD_list.click_item_with_text(name) user_AD_list.click_item_with_text(name_AD)
# Заполнение поля "Имя" (ручной ввод) если задано
if name:
name_field = self.get_content_item("name_input")
name_field.input_value(name)
# Поиск и выбор заданной роли из списка существующих
role_field = self.get_content_item("role_input") role_field = self.get_content_item("role_input")
role_field.click() role_field.click()
@ -237,6 +299,32 @@ class AddADUserModalWindow(ModalWindowComponent):
roles_list.check_item_with_text(user_data["role"]) roles_list.check_item_with_text(user_data["role"])
roles_list.click_item_with_text(user_data["role"]) roles_list.click_item_with_text(user_data["role"])
if user_data.get("commentary"):
input_field = self.get_content_item("commentary_input")
input_field.input_value(user_data["commentary"])
if user_data.get("email"):
input_field = self.get_content_item("email_input")
input_field.input_value(user_data["email"])
if user_data.get("phone_number"):
input_field = self.get_content_item("phone_input")
input_field.input_value(user_data["phone_number"])
if user_data.get("blocking_checked"):
checkbox = self.get_content_item("blocking_checkbox")
if user_data["blocking_checked"]:
checkbox.check()
else:
checkbox.uncheck()
if user_data.get("push_notification_checked"):
checkbox = self.get_content_item("push_notification_checkbox")
if user_data["push_notification_checked"]:
checkbox.check()
else:
checkbox.uncheck()
# Отправка формы # Отправка формы
add_button = self.get_button_by_name("add") add_button = self.get_button_by_name("add")
add_button.click() add_button.click()
@ -247,10 +335,7 @@ class AddADUserModalWindow(ModalWindowComponent):
title, title,
f"Confirmation dialog window with title '{title}' is missing" f"Confirmation dialog window with title '{title}' is missing"
) )
self.new_user_confirm.click_allow_button()
# На первом этапе реального пользователя не создаем
self.new_user_confirm.click_cancel_button()
self.close_window()
def close_window(self): def close_window(self):
"""Закрывает модальное окно через кнопку 'Закрыть'.""" """Закрывает модальное окно через кнопку 'Закрыть'."""
@ -290,6 +375,11 @@ class AddADUserModalWindow(ModalWindowComponent):
"Active Directory", "Active Directory",
"Label 'Active Directory' is missing" "Label 'Active Directory' is missing"
) )
elif name == "blocking_checkbox_label":
item.check_have_text(
"Блокировка",
"Label 'Блокировка' is missing"
)
elif name == "push_notification_checkbox_label": elif name == "push_notification_checkbox_label":
item.check_have_text( item.check_have_text(
"Подписка на Push-уведомления", "Подписка на Push-уведомления",
@ -323,10 +413,24 @@ class AddADUserModalWindow(ModalWindowComponent):
elif name in no_op_names: elif name in no_op_names:
continue continue
else: else:
print(f"check item: {name}")
item.check_visibility( item.check_visibility(
f"Modal window content item with name '{name}' is missing" f"Modal window content item with name '{name}' is missing"
) )
# Дополнительная проверка состояния чекбоксов
blocking_checkbox = self.get_content_item("blocking_checkbox")
is_blocking_checked = blocking_checkbox.is_checked()
assert not is_blocking_checked, (
"Checkbox 'Блокировка' should not be checked by default"
)
push_checkbox = self.get_content_item("push_notification_checkbox")
is_push_checked = push_checkbox.is_checked()
assert not is_push_checked, (
"Checkbox 'Подписка на Push-уведомления' should not be checked by default"
)
self.check_button_visibility("search") self.check_button_visibility("search")
self.check_button_visibility("add") self.check_button_visibility("add")
self.check_button_visibility("close") self.check_button_visibility("close")
@ -334,6 +438,7 @@ class AddADUserModalWindow(ModalWindowComponent):
search_button = self.get_button_by_name("search") search_button = self.get_button_by_name("search")
search_button.click() search_button.click()
# Проверка что поле "Пользователи AD" появилось после поиска
user_AD_loc = input_form_locator.get_by_role("combobox").nth(1) user_AD_loc = input_form_locator.get_by_role("combobox").nth(1)
user_AD_input = TextInput(self.page, user_AD_loc, "user_AD_input") user_AD_input = TextInput(self.page, user_AD_loc, "user_AD_input")
self.add_content_item("user_AD_input", user_AD_input) self.add_content_item("user_AD_input", user_AD_input)

View File

@ -52,7 +52,7 @@ class AddLocalUserModalWindow(ModalWindowComponent):
self.add_toolbar_title(self.window_title) self.add_toolbar_title(self.window_title)
self.add_toolbar_button(locator_button_toolbar_close, "close") self.add_toolbar_button(locator_button_toolbar_close, "close")
# Добавление элементов формы # Добавление элементов формы по порядку расположения в окне
checkbox_1 = Checkbox( checkbox_1 = Checkbox(
page, page,
self.page.locator(input_form_locator).get_by_role("checkbox").nth(0), self.page.locator(input_form_locator).get_by_role("checkbox").nth(0),
@ -68,6 +68,7 @@ class AddLocalUserModalWindow(ModalWindowComponent):
) )
self.add_content_item("active_directory_checkbox_label", label_1) self.add_content_item("active_directory_checkbox_label", label_1)
# Поле Имя
loc = ( loc = (
self.page.locator(input_form_locator) self.page.locator(input_form_locator)
.locator("xpath=div[2]") .locator("xpath=div[2]")
@ -76,48 +77,10 @@ class AddLocalUserModalWindow(ModalWindowComponent):
name_input = TextInput(page, loc, "name_input") name_input = TextInput(page, loc, "name_input")
self.add_content_item("name_input", name_input) self.add_content_item("name_input", name_input)
role_loc = self.page.locator(input_form_locator).get_by_role("combobox").nth(0)
role_input = TextInput(page, role_loc, "role_input")
self.add_content_item("role_input", role_input)
self.add_content_item("roles_list", DropdownList(page))
loc = (
self.page.locator(input_form_locator)
.locator("xpath=div[5]")
.locator(text_field_locator)
)
password_input = TextInput(page, loc, "password_input")
self.add_content_item("password_input", password_input)
loc = (
self.page.locator(input_form_locator)
.locator("xpath=div[6]")
.locator(text_field_locator)
)
commentary_input = TextInput(page, loc, "commentary_input")
self.add_content_item("commentary_input", commentary_input)
loc = (
self.page.locator(input_form_locator)
.locator("xpath=div[7]")
.locator(text_field_locator)
)
email_input = TextInput(page, loc, "email_input")
self.add_content_item("email_input", email_input)
loc = (
self.page.locator(input_form_locator)
.locator("xpath=div[8]")
.locator(text_field_locator)
)
phone_input = TextInput(page, loc, "phone_input")
self.add_content_item("phone_input", phone_input)
# Чекбокс "Блокировка" - индекс 1 # Чекбокс "Блокировка" - индекс 1
checkbox_2 = Checkbox( checkbox_2 = Checkbox(
page, page,
self.page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA) self.page.locator(input_form_locator).get_by_role("checkbox").nth(1),
.get_by_role("checkbox").nth(1),
"blocking" "blocking"
) )
self.add_content_item("blocking_checkbox", checkbox_2) self.add_content_item("blocking_checkbox", checkbox_2)
@ -130,6 +93,48 @@ class AddLocalUserModalWindow(ModalWindowComponent):
) )
self.add_content_item("blocking_checkbox_label", label_2) self.add_content_item("blocking_checkbox_label", label_2)
# Поле Роль
role_loc = self.page.locator(input_form_locator).get_by_role("combobox").nth(0)
role_input = TextInput(page, role_loc, "role_input")
self.add_content_item("role_input", role_input)
self.add_content_item("roles_list", DropdownList(page))
# Поле Пароль
loc = (
self.page.locator(input_form_locator)
.locator("xpath=div[5]")
.locator(text_field_locator)
)
password_input = TextInput(page, loc, "password_input")
self.add_content_item("password_input", password_input)
# Поле Комментарий
loc = (
self.page.locator(input_form_locator)
.locator("xpath=div[6]")
.locator(text_field_locator)
)
commentary_input = TextInput(page, loc, "commentary_input")
self.add_content_item("commentary_input", commentary_input)
# Поле E-mail
loc = (
self.page.locator(input_form_locator)
.locator("xpath=div[7]")
.locator(text_field_locator)
)
email_input = TextInput(page, loc, "email_input")
self.add_content_item("email_input", email_input)
# Поле Номер для СМС
loc = (
self.page.locator(input_form_locator)
.locator("xpath=div[8]")
.locator(text_field_locator)
)
phone_input = TextInput(page, loc, "phone_input")
self.add_content_item("phone_input", phone_input)
# Чекбокс "Подписка на Push-уведомления" - индекс 2 # Чекбокс "Подписка на Push-уведомления" - индекс 2
checkbox_3 = Checkbox( checkbox_3 = Checkbox(
page, page,
@ -154,6 +159,7 @@ class AddLocalUserModalWindow(ModalWindowComponent):
locator_button_close = self.page.get_by_role("button", name="Закрыть") locator_button_close = self.page.get_by_role("button", name="Закрыть")
self.add_button(locator_button_close, "close") self.add_button(locator_button_close, "close")
# Добавление компонента подтверждения/отмены заведения пользователя
self.new_user_confirm = ConfirmComponent(page, " Отмена ", " Добавить ") self.new_user_confirm = ConfirmComponent(page, " Отмена ", " Добавить ")
# Действия: # Действия:
@ -167,6 +173,26 @@ class AddLocalUserModalWindow(ModalWindowComponent):
self.get_content_item("active_directory_checkbox").uncheck(force=True) self.get_content_item("active_directory_checkbox").uncheck(force=True)
def check_blocking_checkbox(self):
"""Включает чек-бокс Блокировка."""
self.get_content_item("blocking_checkbox").check(force=True)
def uncheck_blocking_checkbox(self):
"""Выключает чек-бокс Блокировка."""
self.get_content_item("blocking_checkbox").uncheck(force=True)
def check_push_notification_checkbox(self):
"""Включает чек-бокс Push-уведомления."""
self.get_content_item("push_notification_checkbox").check(force=True)
def uncheck_push_notification_checkbox(self):
"""Выключает чек-бокс Push-уведомления."""
self.get_content_item("push_notification_checkbox").uncheck(force=True)
def new_user(self, user_data): def new_user(self, user_data):
"""Заполняет форму и добавляет нового пользователя. """Заполняет форму и добавляет нового пользователя.

View File

@ -50,6 +50,7 @@ class EditUserModalWindow(ModalWindowComponent):
self.add_toolbar_button(locator_button_toolbar_close, "close") self.add_toolbar_button(locator_button_toolbar_close, "close")
# Добавление полей формы # Добавление полей формы
# Поле Имя
loc = ( loc = (
self.page.locator(input_form_locator) self.page.locator(input_form_locator)
.locator("xpath=div[1]") .locator("xpath=div[1]")
@ -58,11 +59,13 @@ class EditUserModalWindow(ModalWindowComponent):
name_input = TextInput(page, loc, "name_input") name_input = TextInput(page, loc, "name_input")
self.add_content_item("name_input", name_input) self.add_content_item("name_input", name_input)
# Поле Роль
role_loc = self.page.locator(input_form_locator).get_by_role("combobox").nth(0) role_loc = self.page.locator(input_form_locator).get_by_role("combobox").nth(0)
role_input = TextInput(page, role_loc, "role_input") role_input = TextInput(page, role_loc, "role_input")
self.add_content_item("role_input", role_input) self.add_content_item("role_input", role_input)
self.add_content_item("roles_list", DropdownList(page)) self.add_content_item("roles_list", DropdownList(page))
# Поле Комментарий
loc = ( loc = (
self.page.locator(input_form_locator) self.page.locator(input_form_locator)
.locator("xpath=div[4]") .locator("xpath=div[4]")
@ -71,6 +74,7 @@ class EditUserModalWindow(ModalWindowComponent):
commentary_input = TextInput(page, loc, "commentary_input") commentary_input = TextInput(page, loc, "commentary_input")
self.add_content_item("commentary_input", commentary_input) self.add_content_item("commentary_input", commentary_input)
# Поле E-mail
loc = ( loc = (
self.page.locator(input_form_locator) self.page.locator(input_form_locator)
.locator("xpath=div[5]") .locator("xpath=div[5]")
@ -79,6 +83,7 @@ class EditUserModalWindow(ModalWindowComponent):
email_input = TextInput(page, loc, "email_input") email_input = TextInput(page, loc, "email_input")
self.add_content_item("email_input", email_input) self.add_content_item("email_input", email_input)
# Поле Номер для СМС
loc = ( loc = (
self.page.locator(input_form_locator) self.page.locator(input_form_locator)
.locator("xpath=div[6]") .locator("xpath=div[6]")
@ -140,6 +145,27 @@ class EditUserModalWindow(ModalWindowComponent):
self.save_user_confirm = ConfirmComponent(page, " Отмена ", " Сохранить ") self.save_user_confirm = ConfirmComponent(page, " Отмена ", " Сохранить ")
self.delete_user_confirm = ConfirmComponent(page, " Отмена ", " Удалить ") self.delete_user_confirm = ConfirmComponent(page, " Отмена ", " Удалить ")
# Действия:
def check_blocking_checkbox(self):
"""Включает чек-бокс Блокировка."""
self.get_content_item("blocking_checkbox").check(force=True)
def uncheck_blocking_checkbox(self):
"""Выключает чек-бокс Блокировка."""
self.get_content_item("blocking_checkbox").uncheck(force=True)
def check_push_notification_checkbox(self):
"""Включает чек-бокс Push-уведомления."""
self.get_content_item("push_notification_checkbox").check(force=True)
def uncheck_push_notification_checkbox(self):
"""Выключает чек-бокс Push-уведомления."""
self.get_content_item("push_notification_checkbox").uncheck(force=True)
def close_window(self): def close_window(self):
"""Закрывает окно через кнопку 'Закрыть'.""" """Закрывает окно через кнопку 'Закрыть'."""
@ -227,6 +253,7 @@ class EditUserModalWindow(ModalWindowComponent):
reset_password_button = self.get_button_by_name("reset_password") reset_password_button = self.get_button_by_name("reset_password")
reset_password_button.click() reset_password_button.click()
# Проверки:
def check_content(self, user_name, role): def check_content(self, user_name, role):
"""Проверяет наличие и корректность элементов окна. """Проверяет наличие и корректность элементов окна.
@ -273,19 +300,6 @@ class EditUserModalWindow(ModalWindowComponent):
f"Modal window content item with name '{name}' is missing" f"Modal window content item with name '{name}' is missing"
) )
# Дополнительная проверка состояния чекбоксов
blocking_checkbox = self.get_content_item("blocking_checkbox")
is_blocking_checked = blocking_checkbox.is_checked()
assert not is_blocking_checked, (
"Checkbox 'Блокировка' should not be checked by default"
)
push_checkbox = self.get_content_item("push_notification_checkbox")
is_push_checked = push_checkbox.is_checked()
assert not is_push_checked, (
"Checkbox 'Подписка на Push-уведомления' should be checked by default"
)
self.check_button_visibility("save") self.check_button_visibility("save")
self.check_button_visibility("delete") self.check_button_visibility("delete")
self.check_button_visibility("reset_password") self.check_button_visibility("reset_password")

View File

@ -183,8 +183,6 @@ class UsersTab(BasePage):
add_user_window.check_active_directory_checkbox() add_user_window.check_active_directory_checkbox()
self.add_modal_window("add_AD_user", "") self.add_modal_window("add_AD_user", "")
add_user_window = self.get_modal_window("add_AD_user") add_user_window = self.get_modal_window("add_AD_user")
add_user_window.new_user(user_data)
return True
add_user_window.new_user(user_data) add_user_window.new_user(user_data)
@ -195,8 +193,9 @@ class UsersTab(BasePage):
self.alert.check_alert_absence(' Новый пользователь \n успешно добавлен! ') self.alert.check_alert_absence(' Новый пользователь \n успешно добавлен! ')
is_added = True is_added = True
elif alert_type == "error": elif alert_type == "error":
self.alert.check_alert_presence(f' Имя {user_data["name"]} уже используется ') print(f' Имя {user_data["name"]} уже используется ')
self.alert.check_alert_absence(f' Имя {user_data["name"]} уже используется ') self.alert.check_alert_presence(f' Имя {user_data["name"]} уже \n используется ')
self.alert.check_alert_absence(f' Имя {user_data["name"]} уже \n используется ')
else: else:
assert False, f"Got unexpected alert type {alert_type}" assert False, f"Got unexpected alert type {alert_type}"

179
tests/e2e/test_add_user.py Normal file
View File

@ -0,0 +1,179 @@
"""Модуль тестов вкладки 'Пользователи'.
Содержит тесты для проверки функциональности
работы с пользователями системы.
"""
from typing import Dict
import pytest
from playwright.sync_api import Page
from pages.users_tab import UsersTab
from pages.main_page import MainPage
from pages.login_page import LoginPage
class TestUsersTabAddUser:
"""Класс тестов для проверки вкладки 'Пользователи' - действия при создании пользователя.
Тесты покрывают следующие сценарии:
1. test_add_user_window_content: Проверяет содержимое окна добавления пользователя
2. test_add_user_window_close_buttons: Проверяет кнопки закрытия окна добавления
3. test_add_local_user: Проверяет добавление локального пользователя
4. test_add_AD_user: Проверяет добавление пользователя Active Directory
"""
@pytest.fixture(scope="function", autouse=True)
def setup(self, browser: Page) -> None:
"""Настраивает тестовое окружение.
Args:
browser: Экземпляр страницы Playwright.
"""
lp = LoginPage(browser)
lp.do_login()
mp = MainPage(browser)
mp.should_be_navigation_panel()
mp.click_main_navigation_panel_item("Настройки")
mp.click_subpanel_item("Пользователи")
@pytest.fixture(scope="function")
def cleanup_users(self, browser: Page) -> None:
"""Фикстура для очистки тестовых пользователей и их сеансов после теста."""
yield
# Выход из системы текущего пользователя
mp = MainPage(browser)
mp.do_logout()
# Авторизация администратором для очистки
login_page = LoginPage(browser)
login_page.do_login()
# Удаляем тестовых пользователей
self._cleanup_test_users(browser)
def _cleanup_test_users(self, browser: Page) -> None:
"""Удаляет тестовых пользователей."""
mp = MainPage(browser)
mp.click_main_navigation_panel_item("Настройки")
mp.click_subpanel_item("Пользователи")
ut = UsersTab(browser)
# Удаляем тестовых пользователей
test_users = ["TestUser", "TestUserAD"]
for user_name in test_users:
# Проверяем существует ли пользователь и удаляем его
user_index = ut.find_user_in_table(user_name, "Администратор")
if user_index != -1:
ut.open_edit_user_page_by_user(user_name, "Администратор")
ut.delete_user(user_name)
# @pytest.mark.develop
#@pytest.mark.skip(reason=" Временно исключено из тестирования")
def test_add_user_window_content(self, browser: Page) -> None:
"""Проверяет содержимое окна добавления пользователя.
Args:
browser: Экземпляр страницы Playwright.
"""
ut = UsersTab(browser)
ut.open_add_user_window()
ut.check_add_user_window_content()
ut.transform_to_add_AD_user_window()
ut.check_add_AD_user_window_content()
#@pytest.mark.skip(reason=" Временно исключено из тестирования")
def test_add_user_window_close_buttons(self, browser: Page) -> None:
"""Проверяет кнопки закрытия окна добавления.
Args:
browser: Экземпляр страницы Playwright.
"""
ut = UsersTab(browser)
ut.open_add_user_window()
ut.close_add_user_window_by_toolbar_button()
ut.open_add_user_window()
ut.close_add_user_window()
ut.open_add_user_window()
ut.transform_to_add_AD_user_window()
ut.close_add_AD_user_window_by_toolbar_button()
ut.open_add_user_window()
ut.transform_to_add_AD_user_window()
ut.close_add_AD_user_window()
# @pytest.mark.develop
#@pytest.mark.skip(reason=" Временно исключено из тестирования")
def test_add_local_user(self, browser: Page, cleanup_users: None) -> None:
"""Проверяет добавление локального пользователя.
Args:
browser: Экземпляр страницы Playwright.
cleanup_users: Фикстура для автоматического удаления пользователя после теста.
"""
user_data: Dict[str, str] = {"name": "TestUser", "role": "Администратор", "password": "987654321abcd"}
self._add_user(browser, user_data)
# @pytest.mark.develop
# @pytest.mark.skip(reason=" Временно исключено из тестирования")
def test_add_AD_user(self, browser: Page, cleanup_users: None) -> None:
"""Проверяет добавление пользователя Active Directory.
Args:
browser: Экземпляр страницы Playwright.
cleanup_users: Фикстура для автоматического удаления пользователя после теста.
"""
user_data: Dict[str, str] = {
"auth_type": "active_directory",
"group": "NMS_tester",
"name_AD": "tester1", # Выбор из списка "Пользователи AD"
"name": "TestUserAD", # Ручной ввод в поле "Имя"
"role": "Администратор"
}
self._add_user(browser, user_data)
def _add_user(self, browser: Page, user_data: Dict[str, str]) -> None:
"""Действия при добавлении пользователя.
Args:
browser: Экземпляр страницы Playwright.
user_data: Список полей для заполнения формы создания пользователя.
"""
ut = UsersTab(browser)
# Проверяем, есть ли такой пользователь
user_exists = ut.find_user_in_table(user_data["name"], user_data["role"]) != -1
if not user_exists:
# Создаем пользователя впервые
ut.open_add_user_window()
success = ut.add_new_user(user_data)
if success:
# Ждем обновления таблицы с использованием ожиданий Playwright
browser.wait_for_timeout(2000)
# Проверяем наличие пользователя в таблице
user_found = ut.find_user_in_table(user_data["name"], user_data["role"]) != -1
if not user_found:
# Если пользователь не найден, обновляем страницу
browser.reload()
browser.wait_for_timeout(2000)
else:
ut.close_add_user_window()
# Пытаемся создать такого же пользователя снова
ut.open_add_user_window()
success_second = ut.add_new_user(user_data)
# Должно вернуться False при попытке создания существующего пользователя
assert not success_second, "Ожидалась ошибка при создании существующего пользователя"

212
tests/e2e/test_edit_user.py Normal file
View File

@ -0,0 +1,212 @@
"""Модуль тестов вкладки 'Пользователи'.
Содержит тесты для проверки функциональности
работы с пользователями системы.
"""
from typing import Dict
import pytest
from playwright.sync_api import Page
from pages.users_tab import UsersTab
from pages.main_page import MainPage
from pages.login_page import LoginPage
class TestUsersTab:
"""Класс тестов для проверки вкладки 'Пользователи'.
Тесты покрывают следующие сценарии:
1. test_edit_user_window_content: Проверяет содержимое окна редактирования
2. test_edit_user_window_close_buttons: Проверяет кнопки закрытия окна редактирования
3. test_delete_user: Проверяет добавление и удаление пользователя
4. test_reset_password: Проверяет сброс пароля пользователя
5. test_edit_user_role: Проверяет изменение роли пользователя
"""
@pytest.fixture(scope="function", autouse=True)
def setup(self, browser: Page) -> None:
"""Настраивает тестовое окружение.
Args:
browser: Экземпляр страницы Playwright.
"""
lp = LoginPage(browser)
lp.do_login()
mp = MainPage(browser)
mp.should_be_navigation_panel()
mp.click_main_navigation_panel_item("Настройки")
mp.click_subpanel_item("Пользователи")
@pytest.fixture(scope="function")
def cleanup_users(self, browser: Page) -> None:
"""Фикстура для очистки тестовых пользователей и их сеансов после теста."""
yield
# Выход из системы текущего пользователя
mp = MainPage(browser)
mp.do_logout()
# Авторизация администратором для очистки
login_page = LoginPage(browser)
login_page.do_login()
# Удаляем тестовых пользователей
self._cleanup_test_users(browser)
def _cleanup_test_users(self, browser: Page) -> None:
"""Удаляет тестовых пользователей."""
mp = MainPage(browser)
mp.click_main_navigation_panel_item("Настройки")
mp.click_subpanel_item("Пользователи")
ut = UsersTab(browser)
# Удаляем тестовых пользователей
test_users = ["TestUser", "TestUserAutoOperator", "TestUserAutoAdmin"]
for user_name in test_users:
# Проверяем существует ли пользователь и удаляем его
user_index = ut.find_user_in_table(user_name, "Администратор")
if user_index != -1:
ut.open_edit_user_page_by_user(user_name, "Администратор")
ut.delete_user(user_name)
# @pytest.mark.develop
# @pytest.mark.skip(reason=" Временно исключено из тестирования")
def test_edit_user_window_content(self, browser: Page) -> None:
"""Проверяет содержимое окна редактирования.
Args:
browser: Экземпляр страницы Playwright.
"""
ut = UsersTab(browser)
user_name, role = ut.open_edit_user_page_by_index(0)
ut.check_edit_user_window_content(user_name, role)
#@pytest.mark.skip(reason=" Временно исключено из тестирования")
def test_edit_user_window_close_buttons(self, browser: Page) -> None:
"""Проверяет кнопки закрытия окна редактирования.
Args:
browser: Экземпляр страницы Playwright.
"""
ut = UsersTab(browser)
user_name, _ = ut.open_edit_user_page_by_index(0)
ut.close_edit_user_window_by_toolbar_button(user_name)
user_name, _ = ut.open_edit_user_page_by_index(0)
ut.close_edit_user_window(user_name)
# @pytest.mark.develop
#@pytest.mark.skip(reason=" Временно исключено из тестирования")
def test_delete_user(self, browser: Page, cleanup_users: None) -> None:
"""Проверяет удаление пользователя.
Args:
browser: Экземпляр страницы Playwright.
cleanup_users: Фикстура для автоматического удаления пользователя после теста.
"""
user_data: Dict[str, str] = {"name": "TestUser", "role": "Администратор", "password": "987654321abcd"}
mp = MainPage(browser)
ut = UsersTab(browser)
# Проверяем, есть ли такой пользователь
user_exists = ut.find_user_in_table(user_data["name"], user_data["role"]) != -1
if not user_exists:
# Создаем пользователя впервые
ut.open_add_user_window()
success = ut.add_new_user(user_data)
if success:
# Ждем обновления таблицы с использованием ожиданий Playwright
browser.wait_for_timeout(2000)
# Проверяем наличие пользователя в таблице
user_found = ut.find_user_in_table(user_data["name"], user_data["role"]) != -1
if not user_found:
# Если пользователь не найден, обновляем страницу
browser.reload()
browser.wait_for_timeout(2000)
else:
ut.close_add_user_window()
ut.open_edit_user_page_by_user(user_data["name"], user_data["role"])
ut.delete_user(user_data["name"])
mp.click_subpanel_item("Пользователи")
mp.click_subpanel_item("Пользователи")
ut.should_not_be_user_in_table(user_data["name"], user_data["role"])
#@pytest.mark.skip(reason=" Временно исключено из тестирования")
def test_reset_password(self, browser: Page, cleanup_users: None) -> None:
"""Проверяет сброс пароля пользователя.
Args:
browser: Экземпляр страницы Playwright.
cleanup_users: Фикстура для автоматического удаления пользователя после теста.
"""
user_data: Dict[str, str] = {"name": "TestUserAutoAdmin", "role": "Администратор", "password": "123456789abcd"}
mp = MainPage(browser)
ut = UsersTab(browser)
ut.open_add_user_window()
ut.add_new_user(user_data)
mp.click_subpanel_item("Пользователи")
mp.click_subpanel_item("Пользователи")
ut.open_edit_user_page_by_user(user_data["name"], user_data["role"])
new_password = ut.reset_password(user_data["name"])
if len(new_password) == 0:
assert False, "Unsuccessful password reset"
new_lp = LoginPage(browser)
new_lp.do_login(username=user_data["name"], password=new_password)
new_mp = MainPage(browser)
new_mp.do_logout()
lp_1 = LoginPage(browser)
lp_1.do_login()
mp_1 = MainPage(browser)
mp_1.should_be_navigation_panel()
mp_1.click_main_navigation_panel_item("Настройки")
mp_1.click_subpanel_item("Пользователи")
ut_1 = UsersTab(browser)
ut_1.open_edit_user_page_by_user(user_data["name"], user_data["role"])
ut_1.delete_user(user_data["name"])
mp_1.click_subpanel_item("Пользователи")
mp_1.click_subpanel_item("Пользователи")
ut_1.should_not_be_user_in_table(user_data["name"], user_data["role"])
#@pytest.mark.skip(reason=" Временно исключено из тестирования")
def test_edit_user_role(self, browser: Page, cleanup_users: None) -> None:
"""Проверяет изменение роли пользователя.
Args:
browser: Экземпляр страницы Playwright.
cleanup_users: Фикстура для автоматического удаления пользователя после теста.
"""
user_data: Dict[str, str] = {"name": "TestUserAutoOperator", "role": "Оператор", "password": "1232456789abcd"}
mp = MainPage(browser)
ut = UsersTab(browser)
ut.open_add_user_window()
ut.add_new_user(user_data)
mp.click_subpanel_item("Пользователи")
mp.click_subpanel_item("Пользователи")
ut.open_edit_user_page_by_user(user_data["name"], user_data["role"])
new_user_data = {"role": "Контактное лицо"}
ut.edit_user(user_data["name"], new_user_data)
mp.click_subpanel_item("Пользователи")
mp.click_subpanel_item("Пользователи")
ut.should_be_user_in_table(user_data["name"], new_user_data["role"])
ut.open_edit_user_page_by_user(user_data["name"], new_user_data["role"])
ut.delete_user(user_data["name"])
mp.click_subpanel_item("Пользователи")
mp.click_subpanel_item("Пользователи")
ut.should_not_be_user_in_table(user_data["name"], new_user_data["role"])

View File

@ -4,7 +4,6 @@
работы с пользователями системы. работы с пользователями системы.
""" """
from typing import Dict
import pytest import pytest
from playwright.sync_api import Page from playwright.sync_api import Page
from pages.users_tab import UsersTab from pages.users_tab import UsersTab
@ -17,14 +16,6 @@ class TestUsersTab:
Тесты покрывают следующие сценарии: Тесты покрывают следующие сценарии:
1. test_users_tab_content: Проверяет содержимое вкладки 'Пользователи' 1. test_users_tab_content: Проверяет содержимое вкладки 'Пользователи'
2. test_users_tab_toolbar_buttons: Проверяет кнопки на панели инструментов 2. test_users_tab_toolbar_buttons: Проверяет кнопки на панели инструментов
3. test_add_user_window_content: Проверяет содержимое окна добавления пользователя
4. test_add_user_window_close_buttons: Проверяет кнопки закрытия окна добавления
5 test_edit_user_window_content: Проверяет содержимое окна редактирования
6. test_edit_user_window_close_buttons: Проверяет кнопки закрытия окна редактирования
7. test_add_and_delete_user: Проверяет добавление и удаление пользователя
8. test_add_AD_user: Проверяет добавление пользователя Active Directory
9. test_reset_password: Проверяет сброс пароля пользователя
10.test_edit_user_role: Проверяет изменение роли пользователя
""" """
@pytest.fixture(scope="function", autouse=True) @pytest.fixture(scope="function", autouse=True)
@ -43,39 +34,6 @@ class TestUsersTab:
mp.click_main_navigation_panel_item("Настройки") mp.click_main_navigation_panel_item("Настройки")
mp.click_subpanel_item("Пользователи") mp.click_subpanel_item("Пользователи")
@pytest.fixture(scope="function")
def cleanup_users(self, browser: Page) -> None:
"""Фикстура для очистки тестовых пользователей и их сеансов после теста."""
yield
# Выход из системы текущего пользователя
mp = MainPage(browser)
mp.do_logout()
# Авторизация администратором для очистки
login_page = LoginPage(browser)
login_page.do_login()
# Удаляем тестовых пользователей
self._cleanup_test_users(browser)
def _cleanup_test_users(self, browser: Page) -> None:
"""Удаляет тестовых пользователей."""
mp = MainPage(browser)
mp.click_main_navigation_panel_item("Настройки")
mp.click_subpanel_item("Пользователи")
ut = UsersTab(browser)
# Удаляем тестовых пользователей
test_users = ["TestUser", "TestUserAutoOperator", "TestUserAutoAdmin"]
for user_name in test_users:
# Проверяем существует ли пользователь и удаляем его
user_index = ut.find_user_in_table(user_name, "Администратор")
if user_index != -1:
ut.open_edit_user_page_by_user(user_name, "Администратор")
ut.delete_user(user_name)
#@pytest.mark.skip(reason=" Временно исключено из тестирования") #@pytest.mark.skip(reason=" Временно исключено из тестирования")
def test_users_tab_content(self, browser: Page) -> None: def test_users_tab_content(self, browser: Page) -> None:
"""Проверяет содержимое вкладки 'Пользователи'. """Проверяет содержимое вкладки 'Пользователи'.
@ -99,207 +57,3 @@ class TestUsersTab:
ut = UsersTab(browser) ut = UsersTab(browser)
ut.should_be_toolbar_buttons() ut.should_be_toolbar_buttons()
# @pytest.mark.develop
#@pytest.mark.skip(reason=" Временно исключено из тестирования")
def test_add_user_window_content(self, browser: Page) -> None:
"""Проверяет содержимое окна добавления пользователя.
Args:
browser: Экземпляр страницы Playwright.
"""
ut = UsersTab(browser)
ut.open_add_user_window()
ut.check_add_user_window_content()
ut.transform_to_add_AD_user_window()
ut.check_add_AD_user_window_content()
#@pytest.mark.skip(reason=" Временно исключено из тестирования")
def test_add_user_window_close_buttons(self, browser: Page) -> None:
"""Проверяет кнопки закрытия окна добавления.
Args:
browser: Экземпляр страницы Playwright.
"""
ut = UsersTab(browser)
ut.open_add_user_window()
ut.close_add_user_window_by_toolbar_button()
ut.open_add_user_window()
ut.close_add_user_window()
ut.open_add_user_window()
ut.transform_to_add_AD_user_window()
ut.close_add_AD_user_window_by_toolbar_button()
ut.open_add_user_window()
ut.transform_to_add_AD_user_window()
ut.close_add_AD_user_window()
#@pytest.mark.skip(reason=" Временно исключено из тестирования")
def test_edit_user_window_content(self, browser: Page) -> None:
"""Проверяет содержимое окна редактирования.
Args:
browser: Экземпляр страницы Playwright.
"""
ut = UsersTab(browser)
user_name, role = ut.open_edit_user_page_by_index(0)
ut.check_edit_user_window_content(user_name, role)
#@pytest.mark.skip(reason=" Временно исключено из тестирования")
def test_edit_user_window_close_buttons(self, browser: Page) -> None:
"""Проверяет кнопки закрытия окна редактирования.
Args:
browser: Экземпляр страницы Playwright.
"""
ut = UsersTab(browser)
user_name, _ = ut.open_edit_user_page_by_index(0)
ut.close_edit_user_window_by_toolbar_button(user_name)
user_name, _ = ut.open_edit_user_page_by_index(0)
ut.close_edit_user_window(user_name)
# @pytest.mark.develop
#@pytest.mark.skip(reason=" Временно исключено из тестирования")
def test_add_and_delete_user(self, browser: Page, cleanup_users: None) -> None:
"""Проверяет добавление и удаление пользователя.
Args:
browser: Экземпляр страницы Playwright.
cleanup_users: Фикстура для автоматического удаления пользователя после теста.
"""
user_data: Dict[str, str] = {"name": "TestUser", "role": "Администратор", "password": "987654321abcd"}
mp = MainPage(browser)
ut = UsersTab(browser)
# Проверяем, есть ли такой пользователь
user_exists = ut.find_user_in_table(user_data["name"], user_data["role"]) != -1
if not user_exists:
# Создаем пользователя впервые
ut.open_add_user_window()
success = ut.add_new_user(user_data)
if success:
# Ждем обновления таблицы с использованием ожиданий Playwright
browser.wait_for_timeout(2000)
# Проверяем наличие пользователя в таблице
user_found = ut.find_user_in_table(user_data["name"], user_data["role"]) != -1
if not user_found:
# Если пользователь не найден, обновляем страницу
browser.reload()
browser.wait_for_timeout(2000)
else:
ut.close_add_user_window()
# Пытаемся создать такого же пользователя снова
ut.open_add_user_window()
success_second = ut.add_new_user(user_data)
# Должно вернуться False при попытке создания существующего пользователя
assert not success_second, "Ожидалась ошибка при создании существующего пользователя"
ut.open_edit_user_page_by_user(user_data["name"], user_data["role"])
ut.delete_user(user_data["name"])
mp.click_subpanel_item("Пользователи")
mp.click_subpanel_item("Пользователи")
ut.should_not_be_user_in_table(user_data["name"], user_data["role"])
# @pytest.mark.develop
@pytest.mark.skip(reason=" Временно исключено из тестирования")
def test_add_AD_user(self, browser: Page, cleanup_users: None) -> None:
"""Проверяет добавление пользователя Active Directory.
Args:
browser: Экземпляр страницы Playwright.
cleanup_users: Фикстура для автоматического удаления пользователя после теста.
"""
user_data: Dict[str, str] = {"auth_type":"active_directory",
"group": "Администраторы",
"name": "Администратор",
"role": "Администратор"}
ut = UsersTab(browser)
ut.open_add_user_window()
ut.add_new_user(user_data)
#@pytest.mark.skip(reason=" Временно исключено из тестирования")
def test_reset_password(self, browser: Page, cleanup_users: None) -> None:
"""Проверяет сброс пароля пользователя.
Args:
browser: Экземпляр страницы Playwright.
cleanup_users: Фикстура для автоматического удаления пользователя после теста.
"""
user_data: Dict[str, str] = {"name": "TestUserAutoAdmin", "role": "Администратор", "password": "123456789abcd"}
mp = MainPage(browser)
ut = UsersTab(browser)
ut.open_add_user_window()
ut.add_new_user(user_data)
mp.click_subpanel_item("Пользователи")
mp.click_subpanel_item("Пользователи")
ut.open_edit_user_page_by_user(user_data["name"], user_data["role"])
new_password = ut.reset_password(user_data["name"])
if len(new_password) == 0:
assert False, "Unsuccessful password reset"
new_lp = LoginPage(browser)
new_lp.do_login(username=user_data["name"], password=new_password)
new_mp = MainPage(browser)
new_mp.do_logout()
lp_1 = LoginPage(browser)
lp_1.do_login()
mp_1 = MainPage(browser)
mp_1.should_be_navigation_panel()
mp_1.click_main_navigation_panel_item("Настройки")
mp_1.click_subpanel_item("Пользователи")
ut_1 = UsersTab(browser)
ut_1.open_edit_user_page_by_user(user_data["name"], user_data["role"])
ut_1.delete_user(user_data["name"])
mp_1.click_subpanel_item("Пользователи")
mp_1.click_subpanel_item("Пользователи")
ut_1.should_not_be_user_in_table(user_data["name"], user_data["role"])
#@pytest.mark.skip(reason=" Временно исключено из тестирования")
def test_edit_user_role(self, browser: Page, cleanup_users: None) -> None:
"""Проверяет изменение роли пользователя.
Args:
browser: Экземпляр страницы Playwright.
cleanup_users: Фикстура для автоматического удаления пользователя после теста.
"""
user_data: Dict[str, str] = {"name": "TestUserAutoOperator", "role": "Оператор", "password": "1232456789abcd"}
mp = MainPage(browser)
ut = UsersTab(browser)
ut.open_add_user_window()
ut.add_new_user(user_data)
mp.click_subpanel_item("Пользователи")
mp.click_subpanel_item("Пользователи")
ut.open_edit_user_page_by_user(user_data["name"], user_data["role"])
new_user_data = {"role": "Контактное лицо"}
ut.edit_user(user_data["name"], new_user_data)
mp.click_subpanel_item("Пользователи")
mp.click_subpanel_item("Пользователи")
ut.should_be_user_in_table(user_data["name"], new_user_data["role"])
ut.open_edit_user_page_by_user(user_data["name"], new_user_data["role"])
ut.delete_user(user_data["name"])
mp.click_subpanel_item("Пользователи")
mp.click_subpanel_item("Пользователи")
ut.should_not_be_user_in_table(user_data["name"], new_user_data["role"])