2012-05-15 4 views
23

Ich benutze Selenium 2.20 WebDriver, um einen Firefox-Browser mit C# zu erstellen und zu verwalten. Um eine Seite zu besuchen, ich benutze den folgenden Code, um den Treiber-Timeouts einstellen, bevor Sie die URL besuchen:Selenium WebDriver - So legen Sie Zeitlimit für das Laden der Seite mit C#

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5)); // Set implicit wait timeouts to 5 secs 
driver.Manage().Timeouts().SetScriptTimeout(new TimeSpan(0, 0, 0, 5)); // Set script timeouts to 5 secs 
driver.Navigate().GoToUrl(myUrl); // Goto page url 

Das Problem ist, dass manchmal Seiten ewig dauern zu laden, und es scheint, dass das Standard-Timeout für eine Seite zu laden Verwenden des Selen WebDriver ist 30 Sekunden, was zu lang ist. Und ich glaube nicht, dass die Timeouts, die ich setze, für das Laden einer Seite mit der GoToUrl() Methode gelten.

So versuche ich herauszufinden, wie eine Zeitüberschreitung für eine Seite zu laden, aber ich kann keine Eigenschaft oder Methode, die tatsächlich funktioniert finden. Das standardmäßige Zeitlimit von 30 Sekunden scheint auch zu gelten, wenn ich auf ein Element klicke.

Gibt es eine Möglichkeit, das Seitenladezeitlimit auf einen bestimmten Wert zu setzen, so dass beim Aufruf der GoToUrl() -Methode nur die angegebene Zeit gewartet wird, bevor ich fortfahre?

+0

Sind Sie sicher, dass 'GoToUrl()' auf das Laden der Seite wartet? Meine Erfahrung ist, dass es nicht so ist. Aber das ist nur ein Gefühl, keine Tatsache. –

+0

Ja, ich bin 100% sicher, dass der Aufruf von GoToUrl() die Ausführung blockiert, bis die Seite vollständig geladen ist, und ich habe ein Standard-Timeout von 30 Sekunden für den Aufruf dieser Methode gemessen, nach 30 Sekunden wird die Ausführung fortgesetzt, und ich versuche es um dieses Standard-Timeout von 30 Sekunden irgendwie zu reduzieren. – KabanaSoft

+0

Ich habe ähnliche Frage gepostet: http://StackOverflow.com/Questions/11958701/what-is-the-best-Approach-for-timeout-using-selenium-using-Webdriver –

Antwort

3

Mit diesem sollten Sie eine Wartezeit explizit erklären können.

WebDriverWait wait = new WebDriverWait(browser, new TimeSpan(time in seconds)); 
wait.until(Your condition) 

Sie könnten auch die implizite Wartezeit ändern

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10)); 

Ich denke, dass die Syntax in C# ist. (Nicht sicher)

In Rubin ist es

@driver.manage.timeouts.implicit_wait = 30 
@wait = Selenium::WebDriver::Wait.new(:timeout => 30) 
+1

das wird nicht funktionieren, weil die Ausführung von der GoToUrl() -Methode blockiert wird, so dass ich keinen Code ausführen kann, bis diese Methode fertig ist oder das Zeitlimit überschritten wird, was standardmäßig 30 Sekunden zu sein scheint. Danke für die Antwort. – KabanaSoft

+2

Sie müssen also Ihre implizite Wartezeit ändern - 'driver.Manage(). Timeouts(). ImplicitlyWait (TimeSpan.FromSeconds (5));' verringern Sie die 5 Sekunden, wie immer weniger Sie wollen. Das wird Ihre Wartezeit auf der Gettour beeinflussen. – Amey

+1

können Sie auch versuchen, 'wait.until (driver.Navigate(). GoToUrl (myUrl)); // Gehe zur Seiten-URL, wo du explizit die Zeit definierst, auf die gewartet werden soll, bis der gotoURL-Befehl ausgeführt wird – Amey

0

Seite Last Timeouts ist noch nicht in den .NET-Bindungen umgesetzt. Hoffentlich werden sie bald sein.

3

Ich fand die Lösung dieses Problem. Wenn Sie eine neue FirefoxDriver zu schaffen, gibt es Überlastungen in den Konstruktor, die Ihnen erlauben einen Befehl Timeout zu spezifizieren, die die maximale Zeit ist für jeden Befehl zu warten, und es scheint zu funktionieren, wenn die gotoUrl() -Methode aufrufen:

driver = new FirefoxDriver(new FirefoxBinary(), profile, new TimeSpan(0, 0, 0, timeoutSeconds)); 

Link zu FirefoxDriver Konstruktor Dokumentation als Referenz: http://selenium.googlecode.com/svn/trunk/docs/api/dotnet/html/M_OpenQA_Selenium_Firefox_FirefoxDriver__ctor_2.htm

Hope this jemand anderes hilft, die in dieses Problem läuft.

+0

Ich habe ähnliche Frage gepostet: http://StackOverflow.com/Questions/11958701/what-is-the-best-Approach-for-timeout-using-selenium-using-Webdriver –

28

Falls dies hilft, dass noch jemand nach der Antwort sucht, enthält die C# WebDriver API nun die entsprechende Methode.

driver.Manage().Timeouts().SetPageLoadTimeout(timespan) 
+3

Ich wünschte nur, jemand hätte eine klare Beschreibung von wie sich das Ladezeitlimit von der impliziten Wartezeit unterscheidet. Wann genau lädt eine Seite aber ein Element nicht? – JasonCoder

+7

Aus dem C# intellisense 'ImplicitlyWait' ist die Zeit, die nach einem Element auf der Seite sucht,' SetPageLoadTimeout' ist die Zeit, die auf das Laden einer URL wartet und 'SetScriptTimeout' ist die Zeit, die auf async JS wartet Belastung. – jpvantuyl

7
driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(5); 

Hinweis: driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(5)) ist veraltet.

Verwandte Themen