Selenium Switch Tabs

Dado que Firefox ya no admite Control + T para la pestaña, comencé a usar driver.execute_script (“window.open (‘URL’, ‘new_window’)”)

Estoy intentando mostrar el título de la pestaña diferente que abro y cambiar entre ellas. Para el siguiente ejemplo, espero que la salida sea facebook, google y vuelva a facebook. Ahora mismo la salida es facebook, facebook y facebook.

Intenté la respuesta desde aquí, pero tampoco funcionó: cambie de nuevo a la pestaña principal utilizando Selenium Webdriver

from selenium import webdriver driver = webdriver.Firefox() driver.get("http://www.facebook.com/") print(driver.title) driver.execute_script("window.open('http://google.com', 'new_window')") print(driver.title) driver.switch_to.window(driver.window_handles[0]) print(driver.title) 

ACTUALIZADO: Intenté el código de seguimiento y todavía no funcionó.

 from selenium import webdriver driver = webdriver.Firefox() driver.get("http://www.facebook.com/") print(driver.title) window_before = driver.window_handles[0] driver.execute_script("window.open('http://google.com', 'new_window')") window_after = driver.window_handles[1] driver.switch_to.window(window_after) print(driver.title) 

window.open abrirá el enlace en una nueva pestaña. El controlador de Selenium Firefox no tiene la capacidad de cambiar entre tabs ya que solo hay una manija de ventana para ambas (a diferencia de Chrome que tiene 2). Si le asigna el parámetro ‘especificaciones’ a la window() con ancho y alto, se abrirá una nueva ventana y podrá cambiar.

Después de abrir la nueva ventana, el controlador aún está enfocado en la primera, primero debe cambiar a la nueva ventana.

 size = driver.get_window_size(); driver.execute_script("window.open('http://google.com', 'new_window', 'height=argument[0], width=argument[1]')", size['height'], size['width']) driver.switch_to.window(driver.window_handles[1]) print(driver.title) 

Unas palabras sobre el cambio / manejo de tabs / ventanas:

  • Siempre haga un seguimiento del identificador de la ventana principal para que pueda retroceder más tarde si así lo requiere según su caso de uso.
  • Siempre use WebDriverWait con expected_conditions como number_of_windows_to_be(num_windows) antes de cambiar entre Tabs / Windows .
  • Siempre haga un seguimiento de los controles de la ventana secundaria para que pueda atravesar cuando sea necesario.
  • Siempre use WebDriverWait con expected_conditions como title_contains("partial_page_title") antes de extraer el Título de la página .
  • Aquí está su propio código con algunos ajustes menores mencionados anteriormente:

     from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Firefox(executable_path=r'C:\WebDrivers\geckodriver.exe') driver.get("http://www.facebook.com/") print("Initial Page Title is: %s" %driver.title) windows_before = driver.current_window_handle driver.execute_script("window.open('http://google.com')") WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2)) windows_after = driver.window_handles new_window = [x for x in windows_after if x != windows_before][0] driver.switch_to.window(new_window) WebDriverWait(driver, 20).until(EC.title_contains("G")) print("Page Title after first window switching is: %s" %driver.title) driver.close() driver.switch_to.window(windows_before) WebDriverWait(driver, 20).until(EC.title_contains("F")) print("Page Title after second window switching is: %s" %driver.title) driver.quit() 
  • Salida de consola:

     Initial Page Title is: Facebook – log in or sign up Page Title after first window switching is: Google Page Title after second window switching is: Facebook – log in or sign up 

He utilizado driver.getWindowHandles(); para obtener todas las ventanas y driver.switchTo().window(handle); para cambiar a uno requerido.