Python-Webtreiber zur Behandlung von Popup-Browserfenstern, die keine Warnung sind

Lesezeit: 3 Minuten

Ich arbeite an einer Webanwendung, in der beim Klicken auf einen Link ein weiteres Popup-Fenster erscheint. Das Pop-Fenster ist keine Warnung, sondern ein Formular mit verschiedenen Feldern, die vom Benutzer eingegeben werden müssen und auf “Weiter” klicken.

Wie kann ich dieses Popup-Fenster mit Selen behandeln/automatisieren?

Zusammenfassung :-

  1. Klicken Sie auf den Hyperlink (URL) – “KLICKEN SIE HIER”
  2. Ein Benutzerregistrierungsformular wird als Popup angezeigt
  3. Ein Daten ist vom Benutzer auszufüllen
  4. Klicken Sie auf die Schaltfläche Weiter/Senden.
  5. Ein weiterer Nächster wird zu einer anderen Seite/einem anderen Formular “Seite mit personenbezogenen Daten des Benutzers” weitergeleitet.
  6. Persönliche Daten sind vom Benutzer auszufüllen
  7. Klicken Sie auf “Weiter/Senden”
  8. Pop-up ist verschwunden.
  9. Jetzt Weiterverarbeitung auf Original-/Basisseite.

  • Wenn es sich nicht um eine Warnung handelt, gibt es verschiedene Möglichkeiten, wie es sich um ein Popup-Fenster handeln könnte. Können Sie einen Screenshot der Web-App und die entsprechende HTML-Datei einfügen?

    – Vince Bowdren

    18. Juli ’13 um 16:25

  • Könnte dies die Ursache sein? Ein umgangener Aufruf von fxdriver.modals.clearFlag_ … vgl. stackoverflow.com/questions/44568402/…

    – NevilleDNZ

    16. Juni ’17 um 23:58

Python Webtreiber zur Behandlung von Popup Browserfenstern die keine Warnung sind
Lindsay

Der Wechsel zu einem Popup ist aus mindestens zwei Gründen eine Herausforderung:

  1. Diejenige, die viele Leute kennen und die Sie verwenden müssen driver.switch_to.window(window_handle) sowohl beim Erscheinen des Popups, damit Sie Elemente im Popup-Fenster finden können, als auch nach dem Schließen des Popups, damit Sie Elemente wieder im Hauptfenster finden können.
  2. Diejenige, die wahrscheinlich nur Leute mit langsamen Maschinen treffen werden, ist, dass wenn Selenium ein Fenster-Handle als Variable zur Verfügung stellt, es zunächst auf None gesetzt ist und es eine Weile dauert, bis es mit einem Wert ausgefüllt wird.

Hier ist ein Code, der diese Probleme beim Ausführen der angeforderten Sequenz behebt. ich lasse das weg import -Anweisungen, und ich verwende Variablennamen, von denen ich hoffe, dass sie offensichtlich sind. Beachten Sie auch, dass ich gerne verwende find_element(s)_by_xpath in meinem Code; gerne andere verwenden find_element(s)_by Methoden:

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()

Bitte lassen Sie es mich wissen, wenn jemand (vielleicht ich) dem Beispiel mehr hinzufügen oder andere Informationen bereitstellen muss, um es klarer zu machen.

  • Ihre Antwort hat mir vor einiger Zeit das Leben gerettet! Es hat wunderbar funktioniert, aber seit Chrome 54 und Chromedriver 2.25 gibt es keine Möglichkeit, das Fensterhandle des Erweiterungs-Popups abzurufen. In driver.window_handles es gibt nur das hauptfenster für mich. Hast du vielleicht noch eine andere Idee? Danke!

    – Mein Freund

    29. November ’16 um 15:00

  • Wechseln Sie besser mit zum ursprünglichen Fenster zurück driver.switch_to_default_content() wie in @MarkRowlands antworten Sie auf stackoverflow.com/a/17676233/248616

    – Name G VU

    23. Juni ’17 um 9:19

  • In meinem Fall wird kein Fensterhandle für das Popup erstellt. Mein Popup ist ein benutzerdefiniertes Fenster und wurde mit Javascript erstellt. Ist deshalb kein Handle zugeordnet?

    – Heinz

    8. Januar ’19 um 21:37 Uhr

  • Wenn ich driver.window_handles verwende, wird mir nur ein Element angezeigt, während eine Popup-Seite verfügbar ist. Können Sie mir helfen?

    – Hamed Baziyad

    19. Mai ’19 um 7:00

Wenn es neu ist window oder ein iframe du solltest das benutzen driver.switch_to_frame(webelement) oder driver.switch_to_window(window_name). Dies sollte es Ihnen dann ermöglichen, mit dem zu interagieren elements innerhalb des Popups. Nachdem Sie fertig sind, sollten Sie dann driver.switch_to_default_content() um zur Hauptseite zurückzukehren.

.

400850cookie-checkPython-Webtreiber zur Behandlung von Popup-Browserfenstern, die keine Warnung sind

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy