2016-06-16 20 views
-1

Problem: Mein Selenium-Skript erkennt und schließt kein Dialogfeld, das angezeigt wird, wenn ich auf eine URl umschalte, die eine Datei zum Herunterladen enthält. Das beigefügte Bild zeigt den Dialog, auf den ich mich beziehe.Finden und Schließen eines Dialogs in Firefox mit Selenium und C#

Ich weiß, das wurde eine Million Mal gefragt und ich habe mindestens 24 Stunden damit verbracht, andere Vorschläge zu recherchieren und auszuprobieren, die im Web veröffentlicht wurden, aber ohne Erfolg. Ich hoffe, dass das angehängte Bild klarstellt, auf welches Firefox-Dialogfeld ich mich auch beziehe.

Ich habe versucht, die folgenden Lösungen
1. Erstellen IAlerts (Alert Element nicht gefunden wird)
2. Suche, indem Sie versuchen, das Element von XPath zu finden (XPath gefunden cancel nicht)
3. WindowsHandler Methode (war nicht in der Lage, den Fensternamen herauszufinden)

Jede Hilfe zu diesem würde sehr geschätzt werden. Vielen Dank im Voraus!

FireFox Dialog

+0

Sie müssen 'sendKeys' verwenden, um mit diesem Dialog zu arbeiten. Möglicherweise müssen Sie dazu mit dem Fensterhandle wechseln (Sie brauchen keinen Namen, Sie müssen nur vorhandene Handles aufzeichnen, bevor das Dialogfeld angezeigt wird und sehen, welches neue Handle nach dem Erscheinen hinzugefügt wurde). Siehe Haufen Optionen hier: http://stackoverflow.com/questions/11256732/how-to-handle-windows-file-upload-using-selenium-webdriver –

+0

Vielen Dank für den Kommentar. Ich habe alle Beispiele in dem Link durchgelesen, den Sie geteilt haben und das Fenster immer noch nicht erkennen kann. Beim Durchlaufen der Griffe wird das Dialogfeld nicht erkannt. Die Liste der Fenstergriffe enthält nur das Anfangsfenster, so dass es keine Möglichkeit gibt, es einem Webelement zuzuweisen, um die SendKeys-Methode zu verwenden. Irgendwelche anderen Gedanken? –

Antwort

0

Es gibt verschiedene Arten von "Pop-ups".

  1. Javascript-Dialoge - Dies sind keine HTML-Dialoge, sondern Javascript-Dialoge. Diese bestehen aus alert(), confirm() und prompt() und können mit Alert behandelt werden.
  2. HTML-Dialoge - Diese nehmen je nach Formatierung verschiedene Formen an. Wenn Sie mit der rechten Maustaste auf den Dialog klicken und das typische Kontextmenü für Ihren Browser sehen, dann ist es ein HTML-Dialog. Sie sind Teil des DOM der aktuellen Seite, so dass Sie wie bei jeder anderen Seite mit Selenium darauf zugreifen können (z. B. keine Fenstergriffe erforderlich).
  3. Browser-Fenster - Dies sind tatsächlich ein anderes Browser-Fenster, das erscheint und wie ein Dialog aussieht, je nachdem, wie es formatiert ist. Es unterscheidet sich von einem HTML-Dialogfeld, da es außerhalb des aktuellen Browser-Seitenrahmens verschoben werden kann. Sie müssen Fenstergriffe verwenden, um auf diese Fenster zuzugreifen, als würden Sie eine andere Registerkarte im Browser verwenden. Sobald Sie das Fenster-Handle erhalten, können Sie wie jede andere Seite auf den HTML-Code der Seite zugreifen.
  4. Browserdialog - diese nehmen verschiedene Formen an, sind jedoch Systemdialogen ähnlich. Sie bestehen nicht aus HTML, so dass Selenium sie nicht erreichen kann. Anders als eine Bibliothek auf sie zuzugreifen, können Sie mit ihnen in einer begrenzten Art und Weise interagieren, indem Tasten wie <SPACE>, <TAB>, <ENTER> usw.

Was Sie im Bild hat, ist ein (4) Browser-Dialog zu senden. Je nachdem, auf welchem ​​Browser Sie die Aktion ausführen, werden unterschiedliche Formen verwendet. Ihre beste Vorgehensweise ist wahrscheinlich Schlüssel senden. Manchmal können Sie abhängig vom Browser Einstellungen festlegen, um eine Datei automatisch an einen bestimmten Speicherort herunterzuladen, sodass das Dialogfeld nicht angezeigt wird. Ich habe das nie benutzt, deshalb kann ich dich nicht dorthin verweisen.

0

Ich konnte ein Download-Dialogfeld finden und schließen, indem ich die Anzahl der geöffneten Fenster nach dem Öffnen des Dialogfelds überprüfe. Diese Lösung hat für mich funktioniert.

einen Link finden einen Dialog zu öffnen und klicken Sie darauf:

var link = MyBrowser.Driver.FindElement(OpenQA.Selenium.By.Id("Button")); 

    IJavaScriptExecutor js = driver as IJavaScriptExecutor; 
    js.ExecuteScript("arguments[0].click();", link); 

das neue Fenster Count nach dem Dialog öffnet sich:

es
var newWindowCount = MyBrowser.Driver.WindowHandles.Count; 

Wechseln Sie in das neu eröffnete Dialog und schließen:

MyBrowser.Driver.SwitchTo().Window(MyBrowser.Driver.WindowHandles[newWindowCount-1]); 

    MyBrowser.Driver.Close(); 
+0

Willkommen bei Stack Overflow! Während dieser Code das Problem des Fragestellers lösen könnte, wäre es besser zu erklären, wie es funktioniert - Sie können dies tun, indem Sie Ihre Antwort bearbeiten. – dorukayhan