Je travaille sur une application web, dans laquelle en cliquant sur un lien, une autre fenêtre contextuelle apparaît. La fenêtre pop n'est pas une alerte mais c'est un formulaire avec différents champs à saisir par l'utilisateur et cliquez sur "Suivant".
Comment puis-je gérer/automatiser ces fenêtres contextuelles en utilisant Selenium.
Sommaire :-
Passer à une fenêtre contextuelle est difficile pour au moins deux raisons distinctes:
driver.switch_to.window(window_handle)
à la fois lorsque la fenêtre contextuelle apparaît, afin que vous puissiez trouver des éléments dans la fenêtre contextuelle, et après la fermeture de la fenêtre contextuelle, afin que vous puissiez trouver éléments de retour dans la fenêtre principale.Voici un code qui résout ces problèmes lors de l'exécution de la séquence demandée. J'écarte les instructions import
et j'utilise des noms de variables qui, je l'espère, sont évidents. Notez également que j'aime utiliser find_element(s)_by_xpath
dans mon code; n'hésitez pas à utiliser d'autres méthodes find_element(s)_by
:
main_window_handle = None
while not main_window_handle:
main_window_handle = driver.current_window_handle
driver.find_element_by_xpath(u'//a[text()="click here"]').click()
signin_window_handle = None
while not signin_window_handle:
for handle in driver.window_handles:
if handle != main_window_handle:
signin_window_handle = handle
break
driver.switch_to.window(signin_window_handle)
driver.find_element_by_xpath(u'//input[@id="id_1"]').send_keys(user_text_1)
driver.find_element_by_xpath(u'//input[@value="OK"]').click()
driver.find_element_by_xpath(u'//input[@id="id_2"]').send_keys(user_text_2)
driver.find_element_by_xpath(u'//input[@value="OK"]').click()
driver.switch_to.window(main_window_handle) #or driver.switch_to_default_content()
Veuillez me faire savoir si quelqu'un (peut-être moi) a besoin d'ajouter plus à l'exemple, ou de fournir d'autres informations, pour le rendre plus clair.
S'il s'agit d'un nouveau window
ou d'un iframe
, vous devez utiliser la fonction driver.switch_to_frame(webelement)
ou driver.switch_to_window(window_name)
. Cela devrait alors vous permettre d'interagir avec le elements
dans le popup. Une fois que vous avez terminé, vous devez alors driver.switch_to_default_content()
pour revenir à la page Web principale.