Je travaille sur projet d'automatisation Selenium en utilisant Python.
Je suis confronté à un problème lié à la gestion de plusieurs fenêtres de navigateur.
Le scénario est le suivant. Lorsque je clique sur un lien de la page d'accueil, une nouvelle fenêtre s'ouvre. Dans la fenêtre nouvellement ouverte, je ne peux effectuer aucune action, car le focus est toujours sur le pilote Web de la page d'accueil.
Quelqu'un peut-il me montrer comment changer le focus de la fenêtre d'arrière-plan à la fenêtre nouvellement ouverte?
Une solution possible est driver.switch_to.window()
, mais elle nécessite le nom de la fenêtre. Comment connaître le nom de la fenêtre? Si c'est une mauvaise façon de procéder, quelqu'un peut-il donner des exemples de code pour effectuer cette action?
Vous pouvez le faire en utilisant window_handles
et switch_to_window
méthode.
Avant de cliquer sur le lien, enregistrez d'abord le descripteur de fenêtre sous
window_before = driver.window_handles[0]
après avoir cliqué sur le lien stocker la poignée de fenêtre de la fenêtre nouvellement ouverte comme
window_after = driver.window_handles[1]
puis exécutez le passage à la fenêtre methow pour passer à la fenêtre nouvellement ouverte
driver.switch_to_window(window_after)
et de même, vous pouvez basculer entre l'ancienne et la nouvelle fenêtre. Voici l'exemple de code
import unittest
from Selenium import webdriver
from Selenium.webdriver.common.keys import Keys
from Selenium.webdriver.common.by import By
class GoogleOrgSearch(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
def test_google_search_page(self):
driver = self.driver
driver.get("http://www.cdot.in")
window_before = driver.window_handles[0]
print window_before
driver.find_element_by_xpath("//a[@href='http://www.cdot.in/home.htm']").click()
window_after = driver.window_handles[1]
driver.switch_to_window(window_after)
print window_after
driver.find_element_by_link_text("ATM").click()
driver.switch_to_window(window_before)
def tearDown(self):
self.driver.close()
if __== "__main__":
unittest.main()
window_handles
devrait vous donner les références de toutes les fenêtres ouvertes.
this est ce que le docu a à dire sur le changement de fenêtre.
En plus des réponses déjà données, pour ouvrir un nouvel onglet, la commande javascript window.open()
peut être utilisée.
Par exemple:
# Opens a new tab
self.driver.execute_script("window.open()")
# Switch to the newly opened tab
self.driver.switch_to.window(self.driver.window_handles[1])
# Navigate to new URL in new tab
self.driver.get("https://google.com")
# Run other commands in the new tab here
Vous pouvez ensuite fermer l'onglet d'origine comme suit
# Switch to original tab
self.driver.switch_to.window(self.driver.window_handles[0])
# Close original tab
self.driver.close()
# Switch back to newly opened tab, which is now in position 0
self.driver.switch_to.window(self.driver.window_handles[0])
Ou fermez l'onglet nouvellement ouvert
# Close current tab
self.driver.close()
# Switch back to original tab
self.driver.switch_to.window(self.driver.window_handles[0])
J'espère que cela t'aides.
Nous pouvons gérer les différentes fenêtres en se déplaçant entre les fenêtres nommées en utilisant la méthode "switchTo":
driver.switch_to.window("windowName")
<a href="somewhere.html" target="windowName">Click here to open a new window</a>
Alternativement, vous pouvez passer un "handle de fenêtre" à la méthode "switchTo (). Window ()". Sachant cela, il est possible d'itérer sur chaque fenêtre ouverte comme ceci:
for handle in driver.window_handles:
driver.switch_to.window(handle)
par exemple. vous pouvez prendre
driver.get('https://www.naukri.com/')
puisque c'est une fenêtre courante, on peut la nommer
main_page = driver.current_window_handle
s'il y a au moins 1 fenêtre contextuelle à l'exception de la fenêtre actuelle, vous pouvez essayer cette méthode et mettre if condition dans l'instruction break par hit n trial pour l'index
for handle in driver.window_handles:
if handle != main_page:
print(handle)
login_page = handle
break
driver.switch_to.window(login_page)
Maintenant, quelles que soient les informations d'identification que vous devez appliquer, fournissez-les après la connexion. La fenêtre disparaîtra, mais vous devez vous rendre à la fenêtre de la page principale et vous avez terminé
driver.switch_to.window(main_page)
sleep(10)