Compare commits

..

No commits in common. "a07cb43b8056add517e3a8cf88f1fbb6244a034e" and "18f7873145992ac997b8e6f536a747cd54e09965" have entirely different histories.

1 changed files with 18 additions and 42 deletions

View File

@ -646,52 +646,28 @@ class EditRackMaker(ModalWindowComponent):
username: str,
field_label: str
) -> Tuple[bool, Optional[str]]:
"""Добавляет пользователя из выпадающего списка."""
"""Добавляет пользователя из выпадающего списка.
Args:
dropdown_menu: Выпадающее меню.
username: Имя пользователя.
field_label: Название поля.
Returns:
Кортеж (добавлен ли пользователь, сообщение об ошибке или None).
"""
try:
# Получаем все элементы списка
listitem_locator = dropdown_menu.get_by_role("listitem")
user_item = dropdown_menu.locator(f"[role='listitem']:has-text('{username}')").first
if user_item.count() == 0:
user_item = dropdown_menu.locator(f"div:has-text('{username}')").first
# Проверяем, что элементы есть
if listitem_locator.count() == 0:
return False, f"No list items found in dropdown for {field_label}"
# Прокручиваем к последнему элементу
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
if user_item.count() > 0:
user_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:
return False, f"Failed to add user '{username}' to {field_label}: {str(e)}"