Gérer plusieurs fenêtres en Python

je suis en train de travailler sur projet d'automatisation du sélénium utiliser Python.

je suis confronté à un problème, qui est la gestion de plusieurs fenêtres de navigateur.

Le scénario est le suivant. Lorsque je clique sur un lien sur la page d'accueil, une nouvelle fenêtre s'ouvre. Dans la fenêtre nouvellement ouverte, Je ne peux effectuer aucune action, parce que l'accent est toujours mis sur le pilote web de la page d'accueil.

est-ce que quelqu'un peut me montrer comment changer la mise au point de la fenêtre de fond à la nouvelle ouverture fenêtre?

une solution possible est driver.switch_to.window(), mais il faut le nom de la fenêtre. Comment trouver le nom de la fenêtre? Si c'est une mauvaise façon de le faire, quelqu'un peut-il donner des exemples de code pour effectuer cette action?

30
demandé sur ibodi 2012-05-17 08:26:16

4 réponses

Vous pouvez le faire en utilisant window_handles et switch_to_window méthode.

avant de cliquer sur le lien, stockez d'abord la poignée de la fenêtre comme

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 commutateur à 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 __name__ == "__main__":
unittest.main()
20
répondu vishy dewangan 2015-10-01 06:35:45

window_handles devrait vous donner les références de toutes les fenêtres ouvertes.

est ce que le docu a à dire à propos de la commutation des fenêtres.

16
répondu mata 2016-08-07 07:16:40

en plus des réponses déjà données, pour ouvrir un nouvel onglet la commande javascript window.open() peut être utilisé.

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 alors fermer l'onglet original 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 fermer 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 vous aidera.

8
répondu Elliot Ledger 2017-07-22 09:21:20

nous pouvons gérer les différentes fenêtres en se déplaçant entre les Fenêtres nommées en utilisant le " switchTo" de la méthode:

driver.switch_to.window("windowName")

<a href="somewhere.html" target="windowName">Click here to open a new window</a>

alternativement, vous pouvez passer une "poignée de fenêtre" à la"switchTo ().fenêtre()" la méthode. Sachant cela, il est possible d'itérer sur chaque fenêtre ouverte comme suit:

for handle in driver.window_handles:
    driver.switch_to.window(handle)
3
répondu Shaik 2015-05-12 06:27:27