2016-08-05 18 views
0

Ich bin neu in der Verwendung von Selen Webdriver und Schreiben c#. Ich habe viele thread.sleep() Befehle in meinem Skript verwendet, um sicherzustellen, dass Selenium nicht zu schnell versucht hat zu klicken. Nach viel Forschung fand ich ist dies verpönt und es gibt „besser“ Möglichkeiten, es zu tun, so begann ich zu verwenden: -Selen C# wait.until (erwartete Bedingungen) ... Funktion kann keine Objekte/Elemente auf dem Bildschirm finden

wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("FieldId"))); 

Warten Sie ist in einer anderen Klasse definiert als: -

wait = new WebDriverWait(driver, new TimeSpan(0, 0, 0, 10)); 

kann ich nur bekommen diese 2/10 mal zu arbeiten, um das Skript laufen, ohne sich:

kein solches Element Ausnahme: nicht Element finden ......

Ich habe Tonnen von Beispielen für dieses Problem jetzt habe ich mit thread.sleep gestoppt. Nach vielen Recherchen finde ich immer, dass dies der empfohlene Weg ist, aber es scheint völlig unzuverlässig. Habe ich etwas verpasst? Das Element ist immer nach 2 Sekunden da und der Fehler tritt auf, bevor 10 Sekunden vergangen sind. Ich habe mindestens 10 andere Beiträge gelesen, die ähnlich klingen, aber keine von ihnen hat eine Lösung, die funktioniert ... außer Thread.Sleep(5000)!

+0

Wenn Sie 'WebDriverWait' verwenden, wie könnten Sie bekommen' kein solches Element exception' während es 'TimeoutException' wirft ?? –

+0

@SaurabhGaur 'Bis()' löst Ausnahmen aus, wenn sie nicht in der Ignorierliste sind –

+0

Verwenden Sie auch eine implizite Warteschlange? Sie können unerwartete Ergebnisse erhalten, wenn Sie gleichzeitig implizite und explizite Wartezeiten verwenden. – JeffC

Antwort

1

Versuchen Sie, die NoSuchElementException Typ den IgnoreExceptionTypes der Kellner das Hinzufügen, nachdem Sie es erstellen.

wait = new WebDriverWait(driver, new TimeSpan(0, 0, 0, 10)); 
wait.IgnoreExceptionTypes(typeof(NoSuchElementException)); 
wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("FieldId"))); 

Im Allgemeinen, wenn der Kellner zurückkehrt, bevor das Timeout Sie ist abgelaufen zeigen, ist es, weil eine Ausnahme aufgetreten, dass derzeit nicht ignoriert wird.

WebDriverWait Die Klasse wird von der DefaultWait Klasse abgeleitet. Beides kann auf github überprüft werden, was ich sehr hilfreich fand, um zu verstehen, wie man es benutzt.

+0

Ihre Antwort ist größtenteils korrekt, außer Ausnahmetyp sollte 'NoSuchElementException' sein –

+0

@ kovpaev-alexey Aktualisiert. Vielen Dank! – digitalnoiz

+0

@digitalnoiz danke dafür. Ich werde versuchen, das zu meinen Ignoranten hinzuzufügen und zu sehen, ob das hilft, das Problem zu lösen. Wenn ich das getan habe, werde ich nicht hier sein, wenn es funktioniert hat. Vielen Dank für Ihren Ratschlag. – Mase