Compare commits
2 Commits
18f7873145
...
a07cb43b80
| Author | SHA1 | Date |
|---|---|---|
|
|
a07cb43b80 | |
|
|
06e680675c |
|
|
@ -646,28 +646,52 @@ class EditRackMaker(ModalWindowComponent):
|
|||
username: str,
|
||||
field_label: str
|
||||
) -> Tuple[bool, Optional[str]]:
|
||||
"""Добавляет пользователя из выпадающего списка.
|
||||
|
||||
Args:
|
||||
dropdown_menu: Выпадающее меню.
|
||||
username: Имя пользователя.
|
||||
field_label: Название поля.
|
||||
|
||||
Returns:
|
||||
Кортеж (добавлен ли пользователь, сообщение об ошибке или None).
|
||||
"""
|
||||
"""Добавляет пользователя из выпадающего списка."""
|
||||
|
||||
try:
|
||||
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
|
||||
# Получаем все элементы списка
|
||||
listitem_locator = dropdown_menu.get_by_role("listitem")
|
||||
|
||||
if user_item.count() > 0:
|
||||
user_item.click()
|
||||
self.wait_for_timeout(500)
|
||||
return True, None
|
||||
# Проверяем, что элементы есть
|
||||
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
|
||||
|
||||
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)}"
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue