Compare commits

...

2 Commits

Author SHA1 Message Date
Radislav a07cb43b80 Merge branch 'main' of http://192.168.2.61/AlexL/e-nms_qa_automation 2026-04-24 08:11:47 +03:00
Radislav 06e680675c fix: исправлен выбор пользователей в правилах доступа стойки
- Добавлен скроллинг в выпадающем списке
- Исправлено частичное совпадение имен пользователей
- Добавлена проверка на уже выбранных пользователей
2026-04-24 08:08:22 +03:00
1 changed files with 42 additions and 18 deletions

View File

@ -646,28 +646,52 @@ class EditRackMaker(ModalWindowComponent):
username: str, username: str,
field_label: str field_label: str
) -> Tuple[bool, Optional[str]]: ) -> Tuple[bool, Optional[str]]:
"""Добавляет пользователя из выпадающего списка. """Добавляет пользователя из выпадающего списка."""
Args:
dropdown_menu: Выпадающее меню.
username: Имя пользователя.
field_label: Название поля.
Returns:
Кортеж (добавлен ли пользователь, сообщение об ошибке или None).
"""
try: try:
user_item = dropdown_menu.locator(f"[role='listitem']:has-text('{username}')").first # Получаем все элементы списка
if user_item.count() == 0: listitem_locator = dropdown_menu.get_by_role("listitem")
user_item = dropdown_menu.locator(f"div:has-text('{username}')").first
if user_item.count() > 0: # Проверяем, что элементы есть
user_item.click() if listitem_locator.count() == 0:
self.wait_for_timeout(500) return False, f"No list items found in dropdown for {field_label}"
return True, None
# Прокручиваем к последнему элементу
listitem_locator.last.scroll_into_view_if_needed()
# Ждем, пока последний элемент станет видимым
listitem_locator.last.wait_for(state="visible")
# Ищем элемент с точным совпадением текста
all_items = listitem_locator.all()
target_item = None
for item in all_items:
# Ищем span с текстом внутри элемента
span = item.locator("span").first
if span.inner_text().strip() == username:
target_item = item
break
if target_item is None:
return False, f"User '{username}' not found in dropdown for {field_label}"
# Проверяем, не выбран ли уже этот пользователь
class_attribute = target_item.get_attribute("class") or ""
# Если элемент уже выбран (есть класс v-list__tile--active)
if "v-list__tile--active" in class_attribute:
logger.debug(f"User '{username}' is already selected in {field_label}, skipping")
return True, None # Считаем как успех, т.к. пользователь уже есть
# Прокручиваем к найденному элементу
target_item.scroll_into_view_if_needed()
target_item.wait_for(state="visible")
# Кликаем
target_item.click()
self.wait_for_timeout(500)
return True, None
return False, f"User '{username}' not found in dropdown for {field_label}"
except Exception as e: except Exception as e:
return False, f"Failed to add user '{username}' to {field_label}: {str(e)}" return False, f"Failed to add user '{username}' to {field_label}: {str(e)}"