new
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user