Compare commits
2 Commits
18f7873145
...
a07cb43b80
| Author | SHA1 | Date |
|---|---|---|
|
|
a07cb43b80 | |
|
|
06e680675c |
|
|
@ -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)}"
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue