Добавление в локаторы data-testid для элементов вкладки 'Настройки/Лицензии', 'Настройки/Пользователи', карточки текущего пользователя

ra4/management_rack
nsubbot 2026-02-05 14:14:16 +03:00
parent 1ad9ceb256
commit ce9ff3e27d
7 changed files with 37 additions and 39 deletions

View File

@ -47,7 +47,7 @@ class ChangePasswordModalWindow(ModalWindowComponent):
"old password hidden icon") "old password hidden icon")
self.add_content_item("old_password_hidden_icon", old_password_hidden_icon) self.add_content_item("old_password_hidden_icon", old_password_hidden_icon)
loc = loc = page.locator(ModalWindowLocators.CHANDE_PASSWORD_WINDOW_NEW_PASSWORD) loc = page.locator(ModalWindowLocators.CHANDE_PASSWORD_WINDOW_NEW_PASSWORD)
new_password_input = TextInput(page, loc, "new_password_input") new_password_input = TextInput(page, loc, "new_password_input")
self.add_content_item("new_password_input", new_password_input) self.add_content_item("new_password_input", new_password_input)
@ -56,7 +56,7 @@ class ChangePasswordModalWindow(ModalWindowComponent):
"new password hidden icon") "new password hidden icon")
self.add_content_item("new_password_hidden_icon", new_password_hidden_icon) self.add_content_item("new_password_hidden_icon", new_password_hidden_icon)
loc = loc = page.locator(ModalWindowLocators.CHANDE_PASSWORD_WINDOW_CHECK_PASSWORD) loc = page.locator(ModalWindowLocators.CHANDE_PASSWORD_WINDOW_CHECK_PASSWORD)
confirm_password_input = TextInput(page, loc, "confirm_password_input") confirm_password_input = TextInput(page, loc, "confirm_password_input")
self.add_content_item("confirm_password_input", confirm_password_input) self.add_content_item("confirm_password_input", confirm_password_input)
@ -71,10 +71,10 @@ class ChangePasswordModalWindow(ModalWindowComponent):
self.add_content_item("input_form_error_message", input_form_error_message) self.add_content_item("input_form_error_message", input_form_error_message)
# Добавление кнопок действий # Добавление кнопок действий
locator_button_save = self.page.get_by_role("button", name="Сохранить") locator_button_save = page.locator(ModalWindowLocators.CHANDE_PASSWORD_WINDOW_BUTTON_SAVE)
self.add_button(locator_button_save, "save") self.add_button(locator_button_save, "save")
locator_button_cancel = self.page.get_by_role("button", name="Отменить") locator_button_cancel = page.locator(ModalWindowLocators.CHANDE_PASSWORD_WINDOW_BUTTON_CANCEL)
self.add_button(locator_button_cancel, "cancel") self.add_button(locator_button_cancel, "cancel")
# Alert при успешном добавлении пользователя # Alert при успешном добавлении пользователя

View File

@ -15,7 +15,6 @@ from components_derived.modal_change_password import ChangePasswordModalWindow
logger = get_logger("USER_CARD") logger = get_logger("USER_CARD")
class UserCard(BaseComponent): class UserCard(BaseComponent):
"""Компонент карточка. """Компонент карточка.
@ -36,37 +35,37 @@ class UserCard(BaseComponent):
# Обновленные локаторы согласно новой структуре карточки # Обновленные локаторы согласно новой структуре карточки
self.current_user_name = Text( self.current_user_name = Text(
page, page,
card_locator.locator("xpath=/div/div[1]"), # Изменено с div[2] на div[1] card_locator.locator("xpath=/div[@class='v-card__text']/div/div[1]"), # Изменено с div[2] на div[1]
"current user name" "current user name"
) )
self.current_user_role = Text( self.current_user_role = Text(
page, page,
card_locator.locator("xpath=/div/div[2]"), # Изменено с div[3] на div[2] card_locator.locator("xpath=/div[@class='v-card__text']/div/div[2]"), # Изменено с div[3] на div[2]
"current user role" "current user role"
) )
self.login_time = Text( self.login_time = Text(
page, page,
card_locator.locator("xpath=/div/div[3]"), # Изменено с div[4] на div[3] card_locator.locator("xpath=/div[@class='v-card__text']/div/div[3]"), # Изменено с div[4] на div[3]
"login time" "login time"
) )
self.session_time = Text( self.session_time = Text(
page, page,
card_locator.locator("xpath=/div/div[4]"), # Изменено с div[5] на div[4] card_locator.locator("xpath=/div[@class='v-card__text']/div/div[4]"), # Изменено с div[5] на div[4]
"session time" # Исправлено имя с "current user name" на "session time" "session time" # Исправлено имя с "current user name" на "session time"
) )
self.logout_button = Button( self.logout_button = Button(
page, page,
page.get_by_role("button", name="Выйти"), card_locator.locator(UserCardLocators.BUTTON_LOGOUT),
"logout button" "logout button"
) )
self.change_password_button = Button( self.change_password_button = Button(
page, page,
page.get_by_role("button", name="Изменить пароль"), card_locator.locator(UserCardLocators.BUTTON_CHANGE_PASSWORD),
"change password button" "change password button"
) )
self.close_button = Button( self.close_button = Button(
page, page,
page.get_by_role("button", name="Закрыть"), card_locator.locator(UserCardLocators.BUTTON_CLOSE),
"close button" "close button"
) )
@ -148,6 +147,6 @@ class UserCard(BaseComponent):
Raises: Raises:
AssertionError: Если карточка пользователя все еще открыта. AssertionError: Если карточка пользователя все еще открыта.
""" """
card_locator = self.page.locator(UserCardLocators.CARD_USER).locator("xpath=../..") card_locator = self.page.locator(UserCardLocators.CARD_USER).locator("..")
class_attr = card_locator.get_attribute('class') class_attr = card_locator.get_attribute('class')
assert 'menuable__content__active' not in class_attr, "User card should be closed" assert 'menuable__content__active' not in class_attr, "User card should be closed"

View File

@ -13,6 +13,7 @@ class ButtonLocators:
- Кнопка удаления сессии - Кнопка удаления сессии
""" """
BUTTON_LICENSE_UPDATE = "//div[@class='scrollarea__footer']//button" BUTTON_LICENSE_UPDATE = "//button[@data-testid='LICENSE__btn__setLicense']"
TOOLTIP = "//div[contains(@class,'v-tooltip__content menuable__content__active')]" TOOLTIP = "//div[contains(@class,'v-tooltip__content menuable__content__active')]"
BUTTON_DELETE_SESSION = "button.v-btn--icon svg[fill='#4caf50']" BUTTON_DELETE_SESSION = "button.v-btn--icon svg[fill='#4caf50']"

View File

@ -10,10 +10,6 @@ class InputLocators:
Содержит XPath локаторы для: Содержит XPath локаторы для:
LICENSE_ID_UPDATE (str): поля ввода идентификатора лицензии в подвале LICENSE_ID_UPDATE (str): поля ввода идентификатора лицензии в подвале
""" """
LICENSE_ID_UPDATE = "//div[@class='scrollarea__footer']//div[@class='v-input__control']//textarea" LICENSE_ID_UPDATE = "//div[@class='v-input__control']//textarea[@data-testid='LICENSE__textarea__licenseKey']"

View File

@ -45,3 +45,6 @@ class ModalWindowLocators:
CHANDE_PASSWORD_WINDOW_CURRENT_PASSWORD = "//input[@data-testid='CHANGE_PASS_CARD__text-field__current_password']" 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_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']" CHANDE_PASSWORD_WINDOW_CHECK_PASSWORD = "//input[@data-testid='CHANGE_PASS_CARD__text-field__check_password']"
CHANDE_PASSWORD_WINDOW_BUTTON_SAVE = "//button[@data-testid='CHANGE_PASS_CARD__btn__save']"
CHANDE_PASSWORD_WINDOW_BUTTON_CANCEL = "//button[@data-testid='CHANGE_PASS_CARD__btn__cancel']"

View File

@ -9,15 +9,13 @@ class UserCardLocators:
Содержит XPath локаторы для: Содержит XPath локаторы для:
CARD_USER (str): карточки текущего пользователя. CARD_USER (str): карточки текущего пользователя.
DIALOG_USER_SETTINGS (str): окна просмотра сессионных данных пользователей. BUTTON_LOGOUT (str): кнопка выхода из приложения.
HEADER_DIALOG_USER_SETTINGS (str): строки с заголовком окна и кнопкой закрытия. BUTTON_CHANGE_PASSWORD (str): кнопка открытия окна смены пароля.
TITLE_DIALOG_USER_SETTINGS (str): заголовка окна. BUTTON_CLOSE (str): кнопка закрытия окна текущего пользователя.
TABLE_WORK_AREA (str): таблицы с сессионными данными пользователей.
""" """
CARD_USER = "//div[@class='v-card__text']" # CARD_USER = "//div[@class='v-card__text']"
CARD_USER = "//div[@data-testid='BASELINE__card__user']"
DIALOG_USER_SETTINGS = "//div[@class='dialog-drag']" BUTTON_LOGOUT = "//button[@data-testid='BASELINE__btn__user.menu__logout']"
HEADER_DIALOG_USER_SETTINGS = "xpath=/div[@class='dialog-header']" BUTTON_CHANGE_PASSWORD = "//button[@data-testid='BASELINE__btn__user.menu__change_password']"
TITLE_DIALOG_USER_SETTINGS = "xpath=/div[@class='dialog-header']/div[@class='title']" BUTTON_CLOSE = "//button[@data-testid='BASELINE__btn__user.menu__close']"
TABLE_WORK_AREA = "//div[@class='dialog-body']//table"

View File

@ -32,17 +32,18 @@ class UsersTab(BasePage):
super().__init__(page) super().__init__(page)
locator_button_1 = self.page.get_by_role("navigation").filter(
has_text=re.compile("Пользователи")
).get_by_role("button").nth(0)
locator_button_2 = self.page.get_by_role("navigation").filter(
has_text=re.compile("Пользователи")
).get_by_role("button").nth(1)
self.toolbar = ToolbarComponent(page, "Пользователи") self.toolbar = ToolbarComponent(page, "Пользователи")
self.toolbar.add_tooltip_button(locator_button_1, "edit") toolbar_button_edit = self.page.get_by_role("navigation").filter(has_text=re.compile("Пользователи")). \
self.toolbar.add_tooltip_button(locator_button_1, "add_user") locator("//button[@data-testid='USERS__btn__edit']")
self.toolbar.add_tooltip_button(locator_button_2, "close") self.toolbar.add_tooltip_button(toolbar_button_edit, "edit")
toolbar_button_add_user = self.page.get_by_role("navigation").filter(has_text=re.compile("Пользователи")). \
locator("//button[@data-testid='USERS__btn__onAdd']")
self.toolbar.add_tooltip_button(toolbar_button_add_user, "add_user")
toolbar_button_close = self.page.get_by_role("navigation").filter(has_text=re.compile("Пользователи")). \
locator("//button[@data-testid='USERS__btn__close']")
self.toolbar.add_tooltip_button(toolbar_button_close, "close")
self.users_table = TableComponent(page) self.users_table = TableComponent(page)
self.modal_windows = {} self.modal_windows = {}