Актуализированы тесты создания и редактирования пользователя
parent
aac422e2b2
commit
c239ce9916
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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):
|
||||||
"""Заполняет форму и добавляет нового пользователя.
|
"""Заполняет форму и добавляет нового пользователя.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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")
|
||||||
|
|
|
||||||
|
|
@ -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}"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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, "Ожидалась ошибка при создании существующего пользователя"
|
||||||
|
|
@ -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"])
|
||||||
|
|
@ -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"])
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue