This commit is contained in:
unknown
2026-02-09 14:28:39 +05:00
parent 5fd5de3baf
commit be7aadf218
10 changed files with 754 additions and 16 deletions

View File

@@ -360,21 +360,86 @@ class BrowserService:
def close_current_tab(self):
"""Закрывает текущую вкладку и переходит на предыдущую."""
try:
if len(self.driver.window_handles) > 1:
logging.info("📑 Закрываю текущую вкладку...")
self.driver.close()
# Переходим на последнюю оставшуюся вкладку
self.driver.switch_to.window(self.driver.window_handles[-1])
time.sleep(1)
logging.info("✅ Перешел на предыдущую вкладку.")
return True
else:
logging.warning("⚠️ Это последняя вкладка, не закрываю.")
return False
logging.info("📑 Метод close_current_tab вызван, но вкладки не будут закрываться.")
# Удаляем логику закрытия вкладок
return True
except Exception as e:
logging.error(f"❌ Ошибка при закрытии вкладки: {e}")
logging.error(f"❌ Ошибка при попытке закрыть вкладку: {e}")
return False
def get_tabs_count(self):
"""Возвращает количество открытых вкладок."""
return len(self.driver.window_handles)
def select_tab_by_name(self, tab_name):
"""Выбирает вкладку на странице по её названию."""
try:
logging.info(f"🔍 Поиск вкладки с названием: {tab_name}")
# Ищем элемент вкладки по тексту
tab_element = self.wait.until(
EC.presence_of_element_located((By.XPATH, f"//a[text()='{tab_name}']"))
)
tab_element.click()
logging.info(f"✅ Вкладка '{tab_name}' выбрана.")
return True
except Exception as e:
logging.error(f"❌ Ошибка при выборе вкладки '{tab_name}': {e}")
return False
def select_tab_by_text_or_name(self, target_text, timeout=30):
"""Ищет и выбирает вкладку по тексту или названию, делая повторные попытки.
Args:
target_text (str): Текст или название вкладки для поиска.
timeout (int): Общее время ожидания в секундах.
Returns:
bool: True, если вкладка найдена и выбрана, иначе False.
"""
end_time = time.time() + timeout
while time.time() < end_time:
try:
logging.info(f"🔍 Поиск вкладки с текстом или названием: {target_text}")
# Ищем элемент вкладки по тексту
tab_element = self.wait.until(
EC.presence_of_element_located((By.XPATH, f"//*[text()='{target_text}']"))
)
self.driver.execute_script("arguments[0].scrollIntoView(true);", tab_element)
time.sleep(0.5)
tab_element.click()
logging.info(f"✅ Вкладка с текстом '{target_text}' выбрана.")
return True
except Exception as e:
logging.warning(f"⚠️ Вкладка с текстом '{target_text}' не найдена, повторная попытка...")
time.sleep(1) # Ждем перед повторной попыткой
logging.error(f"Не удалось найти вкладку с текстом '{target_text}' за {timeout} секунд.")
return False
def set_tabs(self, tabs):
"""Устанавливает массив с названиями вкладок."""
self.tabs = tabs
def select_tab_from_list(self, tab_index):
"""Выбирает вкладку из массива по индексу.
Args:
tab_index (int): Индекс вкладки в массиве.
Returns:
bool: True, если вкладка выбрана успешно, иначе False.
"""
try:
if not hasattr(self, 'tabs') or not self.tabs:
logging.error("❌ Массив вкладок не установлен или пуст.")
return False
if tab_index < 0 or tab_index >= len(self.tabs):
logging.error("❌ Индекс вкладки выходит за пределы массива.")
return False
tab_name = self.tabs[tab_index]
logging.info(f"🔍 Выбор вкладки с индексом {tab_index}: {tab_name}")
return self.select_tab_by_name(tab_name)
except Exception as e:
logging.error(f"❌ Ошибка при выборе вкладки по индексу {tab_index}: {e}")
return False