2016-05-19 1 views
2

Ich habe das folgende Code-Snippet im Selenium C# WebDriver versucht. (Version 2.50+). Getestet habe ich es mit mehreren Funktionen (By.Xpath, By.ClassName, By.CssSelector usw.)Warum gibt Selenium eine Timeout-Ausnahme, wenn ein Element nicht gefunden wird?

var webDriver = new FirefoxDriver(); 
webDriver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 0, 60)); 
webDriver.Navigate().GoToUrl("http://google.com"); 
var resultElement = webDriver.FindElement(By.ClassName("NonExistingClass")); 

Warum dies nicht nur eine leere Sammlung zurückgeben oder null oder sogar ein NoSuchElementException? Ich denke, es sollte keine Timeout-Ausnahme zurückgeben.

Ausnahme:

„Eine Ausnahme vom Typ 'OpenQA.Selenium.WebDriverException' in aufgetreten WebDriver.dll aber nicht in Benutzercode

Zusätzliche Informationen behandelt wurde: Die HTTP-Anforderung an den Remote WebDriver Server für URL http://localhost:7055/hub/session/19e937df-9d51-4624-a700-33f0ec6be98c/element Zeitüberschreitung nach 60 Sekunden. "

+3

Sie haben eine bestimmte Zeitspanne gewartet. Der SO-Treiber wartet auf diese Zeit und wenn der Treiber das Element auf der Seite nicht finden kann, wird eine Timeout-Ausnahme ausgelöst. –

+0

Ich habe die angegebene Wartezeit entfernt, es wird sofort eine NoSuchElementException ausgelöst. Das ist was ich will. Vielen Dank! :) – User

+0

Ja. Sie müssen sich um dieses Warten kümmern. :-) –

Antwort

4

Sie haben eine gewisse Zeitspanne zu warten, zur Verfügung gestellt. Der Treiber wird also auf diese Zeit warten und wenn der Treiber das Element auf der Seite nicht finden kann, wird eine Timeout-Ausnahme ausgelöst.

Entfernen Sie einfach die angegebene Wartezeit, um dieses Problem zu lösen.

Ich poste diese Antwort, weil Benutzer: Kishan Patel nicht als Antwort auf diese Frage gepostet, obwohl sein Kommentar das Problem löst.

+0

Ich werde deine Antwort akzeptieren, aber der echte MVP ist @Kishan Patel – User

0
IWebDriver driver = new FirefoxDriver(); 
driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 0, 60)); 
driver.Navigate().GoToUrl("http://google.com"); 
var resultElement = driver.FindElement(By.ClassName("NonExistingClass")); 
Verwandte Themen