Перевод локаторов элементов окон работы с пользователями на использование testid

ra4/management_rack
nsubbot 2026-01-27 14:02:37 +03:00
parent 891502d3ca
commit 29d8aa8354
3 changed files with 63 additions and 63 deletions

View File

@ -35,7 +35,6 @@ class AddUserModalWindow(ModalWindowComponent):
super().__init__(page)
# Локаторы элементов формы
text_field_locator = f"//{ModalWindowLocators.TEXT_FIELD_INPUT_FORM_USER_DATA}"
input_form_locator = ModalWindowLocators.INPUT_FORM_USER_DATA
# Настройка заголовка и кнопки закрытия тулбара
@ -49,16 +48,16 @@ class AddUserModalWindow(ModalWindowComponent):
self.add_toolbar_title(self.window_title)
self.add_toolbar_button(locator_button_toolbar_close, "close")
elements_locators = self._get_fields_locators(page)
elements_locators = self.get_input_fields_locators(page.locator(input_form_locator))
# Поле Тип авторизации
loc = elements_locators.get("Тип авторизации")
if loc:
if loc:
auth_type_selector = SelectionBarComponent(page, loc.get_by_role("combobox"))
self.add_content_item("auth_type_selector", auth_type_selector)
# Поле Имя
loc = elements_locators.get("Имя").locator(text_field_locator)
loc = elements_locators.get("Имя").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_NAME)
name_input = TextInput(page, loc, "name_input")
self.add_content_item("name_input", name_input)
@ -76,34 +75,34 @@ class AddUserModalWindow(ModalWindowComponent):
# Чекбокс "Блокировка"
checkbox_blocking = Checkbox(
page,
label_blocking_locator.locator("../..").get_by_role("checkbox"),
page.locator(input_form_locator).locator(ModalWindowLocators.INPUT_FORM_USER_DATA_CHECKBOX_BLOCKED),
"blocking"
)
self.add_content_item("blocking_checkbox", checkbox_blocking)
# Поле Роль
role_loc = elements_locators.get("Роль").get_by_role("combobox")
role_loc = elements_locators.get("Роль").get_by_role("combobox").first
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 = elements_locators.get("Пароль").locator(text_field_locator)
loc = elements_locators.get("Пароль").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_PASSWORD)
password_input = TextInput(page, loc, "password_input")
self.add_content_item("password_input", password_input)
# Поле Комментарий
loc = elements_locators.get("Комментарий").locator(text_field_locator)
loc = elements_locators.get("Комментарий").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_COMMENT)
commentary_input = TextInput(page, loc, "commentary_input")
self.add_content_item("commentary_input", commentary_input)
# Поле E-mail
loc = elements_locators.get("E-mail").locator(text_field_locator)
loc = elements_locators.get("E-mail").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_EMAIL)
email_input = TextInput(page, loc, "email_input")
self.add_content_item("email_input", email_input)
# Поле Номер для СМС
loc = elements_locators.get("Номер для СМС").locator(text_field_locator)
loc = elements_locators.get("Номер для СМС").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_SMS)
phone_input = TextInput(page, loc, "phone_input")
self.add_content_item("phone_input", phone_input)
@ -120,7 +119,7 @@ class AddUserModalWindow(ModalWindowComponent):
# Чекбокс "Подписка на Push-уведомления"
checkbox_push = Checkbox(
page,
label_push_locator.locator("../..").get_by_role("checkbox"),
page.locator(input_form_locator).locator(ModalWindowLocators.INPUT_FORM_USER_DATA_CHECKBOX_PUSH_ACTIVE),
"push_notification"
)
self.add_content_item("push_notification_checkbox", checkbox_push)
@ -161,7 +160,7 @@ class AddUserModalWindow(ModalWindowComponent):
auth_type = None
auth_type_selector = self.get_content_item("auth_type_selector")
if auth_type_selector:
if auth_type_selector:
values = auth_type_selector.get_selected_values()
auth_type = values[0]
return auth_type
@ -192,7 +191,8 @@ class AddUserModalWindow(ModalWindowComponent):
if auth_type == "LDAP":
menu_locator = self.page.locator(ModalWindowLocators.MENU_ACTIVE_INPUT_FORM)
elements_locators = self._get_fields_locators(self.page)
elements_locators = self.get_input_fields_locators(
self.page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA))
# Добавилось поле Группа
group_loc = elements_locators.get("Группа").get_by_role("combobox")
@ -223,7 +223,8 @@ class AddUserModalWindow(ModalWindowComponent):
search_button.click()
# Если в группе есть пользователи, открывается новое поле, заново вычисляем локаторы
elements_locators = self._get_fields_locators(self.page)
elements_locators = self.get_input_fields_locators(
self.page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA))
users_ad_loc = elements_locators.get("Пользователи AD")
# users_ad_loc = elements_locators.get("Пользователи LDAP")
assert users_ad_loc, f"Selected group {group_name} is empty. Use another group."
@ -323,39 +324,28 @@ class AddUserModalWindow(ModalWindowComponent):
def locators_recalculation(self, is_active_directory=False) -> None:
"""Пересчет локаторов полей ввода"""
text_field_locator = f"//{ModalWindowLocators.TEXT_FIELD_INPUT_FORM_USER_DATA}"
elements_locators = self.get_input_fields_locators(
self.page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA))
elements_locators = self._get_fields_locators(self.page)
new_loc = elements_locators.get("Имя").locator(text_field_locator)
new_loc = elements_locators.get("Имя").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_NAME)
self.get_content_item("name_input").update_locator(new_loc)
if not is_active_directory:
new_loc = elements_locators.get("Пароль").locator(text_field_locator)
new_loc = elements_locators.get("Пароль").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_PASSWORD)
self.get_content_item("password_input").update_locator(new_loc)
new_loc = elements_locators.get("Роль").get_by_role("combobox")
new_loc = elements_locators.get("Роль").get_by_role("combobox").first
self.get_content_item("role_input").update_locator(new_loc)
new_loc = elements_locators.get("Комментарий").locator(text_field_locator)
new_loc = elements_locators.get("Комментарий").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_COMMENT)
self.get_content_item("commentary_input").update_locator(new_loc)
new_loc = elements_locators.get("E-mail").locator(text_field_locator)
new_loc = elements_locators.get("E-mail").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_EMAIL)
self.get_content_item("email_input").update_locator(new_loc)
new_loc = elements_locators.get("Номер для СМС").locator(text_field_locator)
new_loc = elements_locators.get("Номер для СМС").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_SMS)
self.get_content_item("phone_input").update_locator(new_loc)
def _get_fields_locators(self, page) -> dict:
fields_locators = {}
elements = page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA). \
locator("div.v-text-field__slot > input").all()
for el in elements:
val = el.input_value().strip()
if val:
fields_locators[val] = el.locator("../ancestor::div[5]")
return fields_locators
# Проверки:
def check_content(self):
"""Проверяет наличие и корректность всех элементов формы создания локального пользователя.
@ -419,8 +409,8 @@ class AddUserModalWindow(ModalWindowComponent):
elif name == "roles_list":
continue
else:
print(f"check item: {name}")
print(item)
# print(f"check item: {name}")
# print(item)
item.check_visibility(
f"Modal window content item with name '{name}' is missing"
)
@ -442,22 +432,23 @@ class AddUserModalWindow(ModalWindowComponent):
auth_type_selector = self.get_content_item("auth_type_selector")
if auth_type_selector:
self.select_auth_type("LDAP")
elements_locators = self._get_fields_locators(self.page)
elements_locators = self.get_input_fields_locators(
self.page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA))
# Добавилось поле Группа
group_loc = elements_locators.get("Группа").get_by_role("combobox")
group_input = TextInput(self.page, group_loc, "group_input")
self.add_content_item("group_input", group_input)
self.add_content_item("group_list", DropdownList(self.page))
group_field = self.get_content_item("group_input")
group_field.click()
group_list = self.get_content_item("group_list")
group_list.check_visibility(menu_locator,
"Groups list is missing")
is_scrollable_vertically = group_list.check_vertical_scrolling(menu_locator)
assert is_scrollable_vertically, "Groups list should be scrollable_vertically"
self.page.keyboard.press("Escape")

View File

@ -34,8 +34,6 @@ class EditUserModalWindow(ModalWindowComponent):
super().__init__(page)
# Локаторы элементов формы
# text_field_locator = ModalWindowLocators.TEXT_FIELD_INPUT_FORM_USER_DATA
text_field_locator = f"xpath={ModalWindowLocators.TEXT_FIELD_INPUT_FORM_USER_DATA}"
input_form_locator = ModalWindowLocators.INPUT_FORM_USER_DATA
# Настройка заголовка и кнопки закрытия
@ -50,31 +48,32 @@ class EditUserModalWindow(ModalWindowComponent):
self.add_toolbar_button(locator_button_toolbar_close, "close")
# Добавление полей формы
elements_locators = self._get_fields_locators(page)
elements_locators = self.get_input_fields_locators(
self.page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA))
# Поле Имя
loc = elements_locators.get("Имя").locator(text_field_locator)
loc = elements_locators.get("Имя").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_NAME)
name_input = TextInput(page, loc, "name_input")
self.add_content_item("name_input", name_input)
# Поле Роль
role_loc = self.page.locator(input_form_locator).get_by_role("combobox")
role_loc = self.page.locator(input_form_locator).get_by_role("combobox").first
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 = elements_locators.get("Комментарий").locator(text_field_locator)
loc = elements_locators.get("Комментарий").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_COMMENT)
commentary_input = TextInput(page, loc, "commentary_input")
self.add_content_item("commentary_input", commentary_input)
# Поле E-mail
loc = elements_locators.get("E-mail").locator(text_field_locator)
loc = elements_locators.get("E-mail").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_EMAIL)
email_input = TextInput(page, loc, "email_input")
self.add_content_item("email_input", email_input)
# Поле Номер для СМС
loc = elements_locators.get("Номер для СМС").locator(text_field_locator)
loc = elements_locators.get("Номер для СМС").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_SMS)
phone_input = TextInput(page, loc, "phone_input")
self.add_content_item("phone_input", phone_input)
@ -93,7 +92,7 @@ class EditUserModalWindow(ModalWindowComponent):
# Чекбокс "Блокировка"
checkbox_blocking = Checkbox(
page,
label_blocking_locator.locator("../..").get_by_role("checkbox"),
page.locator(input_form_locator).locator(ModalWindowLocators.INPUT_FORM_USER_DATA_CHECKBOX_BLOCKED),
"blocking"
)
self.add_content_item("blocking_checkbox", checkbox_blocking)
@ -111,7 +110,7 @@ class EditUserModalWindow(ModalWindowComponent):
# Чекбокс "Подписка на Push-уведомления"
checkbox_push = Checkbox(
page,
label_push_locator.locator("../..").get_by_role("checkbox"),
page.locator(input_form_locator).locator(ModalWindowLocators.INPUT_FORM_USER_DATA_CHECKBOX_PUSH_ACTIVE),
"push_notification"
)
self.add_content_item("push_notification_checkbox", checkbox_push)
@ -241,15 +240,15 @@ class EditUserModalWindow(ModalWindowComponent):
reset_password_button = self.get_button_by_name("reset_password")
reset_password_button.click()
def _get_fields_locators(self, page) -> dict:
fields_locators = {}
elements = page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA). \
locator("div.v-text-field__slot > input").all()
for el in elements:
val = el.input_value().strip()
if val:
fields_locators[val] = el.locator("../ancestor::div[5]")
return fields_locators
# def _get_fields_locators(self, page) -> dict:
# fields_locators = {}
# elements = page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA). \
# locator("div.v-text-field__slot > input").all()
# for el in elements:
# val = el.input_value().strip()
# if val:
# fields_locators[val] = el.locator("../ancestor::div[5]")
# return fields_locators
# Проверки:
def check_content(self, user_name, role):

View File

@ -24,14 +24,24 @@ class ModalWindowLocators:
MODAL_WINDOW_TEXT_FIELD_INPUT = f"{MODAL_WINDOW}//input"
INPUT_FORM_USER_DATA = f"{MODAL_WINDOW}//form[@class='v-form']"
TEXT_FIELD_INPUT_FORM_USER_DATA = "div[2]/div/div/div/div/input"
# TEXT_FIELD_INPUT_FORM_USER_DATA = "xpath=div[2]/div/div/div/div/input"
INPUT_FORM_USER_DATA_FIELD_NAME = "//input[@data-testid='USER_CARD__text-field__name']"
INPUT_FORM_USER_DATA_FIELD_ROLE = "//input[@data-testid='USER_CARD__select__role']"
INPUT_FORM_USER_DATA_FIELD_PASSWORD = "//input[@data-testid='USER_CARD__text-field__password']"
INPUT_FORM_USER_DATA_FIELD_COMMENT = "//input[@data-testid='USER_CARD__text-field__comment']"
INPUT_FORM_USER_DATA_FIELD_EMAIL = "//input[@data-testid='USER_CARD__text-field__email']"
INPUT_FORM_USER_DATA_FIELD_SMS = "//input[@data-testid='USER_CARD__text-field__sms_phone']"
INPUT_FORM_USER_DATA_CHECKBOX_BLOCKED = "//input[@data-testid='USER_CARD__checkbox__blocked']"
INPUT_FORM_USER_DATA_CHECKBOX_PUSH_ACTIVE = "//input[@data-testid='USER_CARD__checkbox__push_active']"
# TEXT_FIELD_INPUT_FORM_USER_DATA = "div[2]/div/div/div/div/input"
MENU_ACTIVE_INPUT_FORM = "//div[contains(@class, 'menuable__content__active')]"
MENU_ACTIVE_ITEMS = "//div[@role='list']//div[@role='listitem']"
LABEL_INPUT_FORM_USER_DATA = "//label[contains(@class,'v-label')]/span"
TASK_MODAL_WINDOW = "//div[@data-testid='BASELINE__dialog-drag__modal_0']"
CHANDE_PASSWORD_WINDOW_CURRENT_PASSWORD = "//input[@data-testid='CHANGE_PASS_CARD__text-field__current_password']"
CHANDE_PASSWORD_WINDOW_NEW_PASSWORD = "//input[@data-testid='CHANGE_PASS_CARD__text-field__new_password']"
CHANDE_PASSWORD_WINDOW_CHECK_PASSWORD = "//input[@data-testid='CHANGE_PASS_CARD__text-field__check_password']"