Как синхронизировать браузер при открытии новой вкладки - PullRequest
0 голосов
/ 04 июля 2018

У меня есть следующий код, когда мне нужно нажать на элемент, который открывается в новой вкладке, и мне нужно переключить браузер на эту вкладку.

def ThingsinTab(browser):

   clickbutton=Somefunction #Find where to click

   clickbutton.click()

   try:  

      WebDriverWait(browser,10).until(
      EC.number_of_windows_to_be(len(old_tabs)+1))
   except: return browser

   THIS POINT!!

   new_window=(set(browser.window_handles)-old_tabs).pop()
   browser.switch_to.window(new_window)

   #Do some stuff with this tab

   browser.close()  
   browser.switch_to_window(main_tab)

   return browser

Иногда вкладка открывается, но остается с серым фоном, долго не загруженным. Я сузил, где код застрял в этой точке, и я сигнализировал об этом в коде выше. То, что я хочу, - это способ определения времени новой переменной new_window и переключения, чтобы, если, скажем, через 10 секунд он не перемещался в коде, он останавливался, закрывал новую вкладку и возвращал браузер.

При условии, что эта функция является частью большего кода, я также хотел бы знать, как рассчитать время в более крупном скрипте этой функции, поэтому, если она занимает более нескольких секунд, она прерывает выполнение и возобновление функции остальной код.

Big script

some things

ThingsinTab() #I want to set a maximum time for this function to complete its code,or else stop it and move on.

More some things

1 Ответ

0 голосов
/ 04 июля 2018

Вы можете раскрутить поток, открывающий окно, а затем подождать максимум 10 секунд. Если к тому времени он еще не закончился, убейте поток и выполните альтернативную стратегию.

Может оказаться полезным модуль threading. thread.join(10) может выполнять часть «подождать максимум 10 секунд»; это не должно быть слишком сложным, чтобы сложить это вместе, кроме обычной трудности заставить потоки работать.

...