2017-03-12 2 views
0

Ich führe eine App im Browser aus; und für einige Aktionen war ich in der Lage, Aktionen mit Tastenanschlägen zu simulieren; aber ich habe ein eigenartiges Problem: einige Aktionen in meiner App veranlassen eine Systemaufforderung, wie zum Beispiel zum Speichern oder Bestätigen, aufzuhören.Selen-Python: Interagieren mit modalen Dialogen des Systems

Gibt es eine Möglichkeit, diese in Selenium Python zu kontrollieren? Als Beispiel stellen Sie sich vor, wie Sie mit einem Tastendruck eine Seite speichern. Dann erscheint der Systemdialog (der nicht Teil der Web-App ist) und fragt Sie, wo Sie die Datei speichern können. Oder stellen Sie sich die Eingabeaufforderung vor, in der Sie gefragt werden, ob Sie das Browserfenster wirklich schließen möchten, wenn mehrere Registerkarten geöffnet sind.

Ich habe versucht, nach einem anderen Fenster zu suchen, vorausgesetzt, dass ich Kontext zwischen Fenstern im Browser wechseln kann, aber ich finde nichts neben der Haupt-App, denn das sind Systemfenster. Gibt es einen Workaround dafür?

Antwort

0

Sie könnten Nutzung der Selenium Methoden machen aktuelle Fenster zu überprüfen und zu einem anderen verschieben:

Sie können

driver.window_handles 

finden eine Liste der Fenstergriffe und nach Versuch folgt wechseln verwenden verwenden Methoden (selenium documentation).

  • driver.switch_to_alert()
  • driver.switch_to.active_element
  • driver.switch_to.default_content
  • driver.switch_to.window

Da die Anwendung, die Sie auf arbeiten, Befehle zu reagieren scheint Selen hier ist es ein funktionierendes Beispiel über ein Popup-Fenster zu öffnen, Selen-Bereich darauf schalten, Daten extrahieren und das Popup schließen. Der Prozess für alle Produkte wiederholt:

for item in driver.find_elements_by_class_name("products"): 
    item.click() # clicking on item activate a popup 
    driver.switch_to_alert() #switch to new window 
    # Get data 
    driver.find_elements_by_css_selector(".ui-dialog-titlebar-close.ui-corner-all")[0].click() #close window 
0

Wenn Sie über Systemdialoge sprechen, dann ist es nicht möglich, mit ihnen interagieren Selen verwendet wird.

jedoch für die Browser-Pop-ups (Alerts), navigieren Sie einfach auf das Pop-up:

driver.switch_to_alert() 

Verwenden Sie dann die Methoden aus der Alert Klasse mit dem Pop-up zu interagieren. Die Klasse Alert enthält Methoden zum Verwerfen, Akzeptieren, Eingeben und Abrufen von Text aus Warnmeldungen.

Einige Beispiele:

Alert(driver).accept() 
Alert(driver).dismiss() 
Alert(driver).authenticate() 
Alert(driver).send_keys(keys_to_send) 
Alert(driver).text() 

siehe: https://seleniumhq.github.io/selenium/docs/api/py/webdriver/selenium.webdriver.common.alert.html

Verwandte Themen