2017-01-17 1 views
1

Je travaille sur Selenium et Firefox sous Ubuntu14.04. J'ai créé un nouvel onglet par send_keys (Keys.CONTROL + 't'), mais continue à donner des commandes sur le premier onglet, peut-être parce que je ne me suis pas concentré sur le nouvel onglet correctement.Selenium et Firefox sur Ubuntu: mise au point sur le nouvel onglet

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.keys import Keys 

driver = webdriver.Firefox() 
main_window = driver.current_window_handle 

driver.get("https://www.google.com") 
driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't') 

driver.switch_to_window(main_window) 
driver.get("http://www.bing.com") 

driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't') 

driver.switch_to_window(main_window) 
driver.get("https://github.com/login") 

Il n'y a pas d'erreur lors de l'exécution de ce code.

Je fais un nouvel onglet après aller à google.com, et l'écran se change en une page vierge sur le nouvel onglet. Après cela, j'ai écrit driver.switch_to_window (main_window) pour me concentrer sur le nouvel onglet afin de m'assurer que les prochaines lignes de code arriveront sur le nouvel onglet. Mais lorsque driver.get ("http://www.bing.com") est exécuté, l'écran revient au premier onglet où google.com est présent et change google.com en bing.com. Même chose pour le code suivant. Un autre nouvel onglet a été créé, mais il revient au premier onglet en tant que driver.get ("https://github.com/login") exécuté et bing.com devient github.com/login.

Je pensais que je me suis concentré sur l'onglet visible actuelle par

main_window = driver.current_window_handle; driver.switch_to_window (main_window),

Mais cela n'a pas bien fonctionné. Comment puis-je charger les 3 pages Web sur 3 onglets différents?

CARACTÉRISTIQUES:

  • Sélénium 3.0.2
  • Firefox 45.0.1
  • Ubuntu 14.04 amd 64bit
  • python 2.7.6

Répondre

0

S'il vous plaît essayer la solution suivante et laissez-moi savoir si ce n'est pas ce que vous recherchez:

driver.get("https://www.google.com") 
google_window = driver.current_window_handle # Define main window 

driver.execute_script("window.open('http://www.bing.com')") # Open Bing window 
bing_window = [window for window in driver.window_handles if window != google_window][0] # Define Bing window 

driver.execute_script("window.open('https://github.com/login')") # Open GitHub window 
github_window = [window for window in driver.window_handles if window not in [google_window, bing_window]][0] # Define GitHub window 

Après les 3 fenêtres ouvertes, vous pouvez simplement naviguer comme:

driver.switch_to_window(bing_window) 
...# do something 
driver.switch_to_window(google_window) 
...# do something 
driver.switch_to_window(github_window) 
+0

Ce n'est pas ce que je cherche. Je voulais créer des onglets et mettre l'accent sur le nouvel onglet. Votre réponse est de faire une nouvelle fenêtre de Firefox et passer d'une fenêtre à l'autre. –

+0

Que voulez-vous dire «mettre l'accent sur le nouvel onglet»? Et pour quoi? "Passer" à un nouvel onglet signifie "se concentrer" dessus ... non? – Andersson

+0

Pas exactement. dans Selenium, même si vous passez à un nouvel onglet, vous ne pourrez peut-être rien faire si vous vous concentrez sur le nouvel onglet. commutation et mise au point sont différents, autant que je sache. Voir le code à https://gist.github.com/lrhache/7686903. il y a un commentaire disant # Mettre l'accent sur la fenêtre courante qui, en fait, mettra l'accent sur l'onglet visible actuel -> browser.switch_to_window (main_window) –