2017-02-02 1 views
0

Ich habe eine Seite, die ein neues (kleineres) Browserfenster öffnet, das ich in Selenium testen möchte.Selenium WindowHandels erkennt kein modales Fenster

Ich verwende den ChromeWebDriver (2.27).

Ich habe den folgenden Code:

String parentHandle = Driver.Instance.WindowHandles[0].ToString(); 
String modalHandel = Driver.Instance.WindowHandles[1].ToString(); 

ich mehrere verschiedene Varianten ausprobiert haben mit dem gleichen Ergebnis (d.h. ReadOnlyCollections & zum Schleifen verwendet wird).

Wenn ich Driver.Instace.WindowHandles betrachte, sehe ich 2 Einträge. Der erste (ich vermute) ist mein Hauptfenster und der zweite ist das Modal.

enter image description here

jedoch etwa 50% der Zeit, dieser Code Fehler.

String modalHandel = Driver.Instance.WindowHandles[1].ToString(); 

Die Aussage, dass:

Index liegt außerhalb des zulässigen Bereichs. Muss nicht negativ sein und weniger als die Größe der Sammlung.

Vielleicht ist es spät am Tag, aber ich verstehe wirklich nicht, warum das manchmal funktioniert und manchmal nicht. Kann jemand bitte etwas Licht darauf werfen?

Antwort

1

Es könnte Problem sein Timing ist, desto kleiner Browser öffnen könnte, nachdem Sie suchen ihre WindowHandle so enthält Driver.Instance.WindowHandles nur das übergeordnete WindowHandle. Sie können versuchen, zu warten, bis es zwei Griffe sind

ReadOnlyCollection<string> windowHandles; 
while ((windowHandles = Driver.Instance.WindowHandles).Count < 2); 

string parentHandle = windowHandles[0]; // its already string, no need to call ToString() 
string modalHandel = windowHandles[1]; 

Sie auch die Zeit

Stopwatch stopwatch = new Stopwatch(); 
stopwatch.Start(); 

ReadOnlyCollection<string> windowHandles; 
while ((windowHandles = driver.WindowHandles).Count < 2 && stopwatch.Elapsed.TotalSeconds < 10); 

string parentHandle = windowHandles[0]; 
string modalHandel = windowHandles[1]; 
+0

ich einen Thread.Sleep gelegt hat begrenzen (250) rechts beforethe windoHandles Code und es schien das registrieren mehrere Werte. Ich werde die while-Anweisung im AM machen und Sie wissen lassen. Vielen Dank! – webdad3

+0

Der Thread.Sleep (250) hat auch daran gearbeitet, aber ich mag das besser als eine Reihe von Thread.Sleep-Befehlen. – webdad3