2012-05-15 73 views
23

C#でFirefoxブラウザを作成および管理するためにSelenium 2.20 WebDriverを使用しています。ページを訪問し、私はURLを訪れる前に、ドライバーのタイムアウトを設定し、次のコードを使用します。Selenium WebDriver - 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 

問題は時々ページをロードするために永遠に取ることであり、ページのデフォルトのタイムアウトをロードするためと思われますセレンのWebDriverを使用するのは30秒です。これは長すぎます。そして、私はGoToUrl()メソッドを使用してページの読み込みに適用される設定がタイムアウトだとは思わない。

私はどのようにページを読み込むためのタイムアウトを設定するのかを理解しようとしていますが、実際に動作するプロパティやメソッドは見つかりません。デフォルトの30秒のタイムアウトは、エレメントをクリックしたときにも適用されるようです。

GoToUrl()メソッドを呼び出すと、指定した時間だけ待ってから続行するように、ページのロードタイムアウトを特定の値に設定する方法はありますか?

+0

'GoToUrl()'はページが読み込まれるのを待っていますか?私の経験はそうではないということです。しかし、それはただの感情ではなく、事実です。 –

+0

はい、100%GoToUrl()呼び出しがページが完全にロードされるまで実行をブロックし、30秒後にこのメソッドを呼び出すために30秒のデフォルトタイムアウトを測定しています。何とか30秒のデフォルトタイムアウトを減らすことができます。 – KabanaSoft

+0

私は同様の質問を投稿しました:http://stackoverflow.com/questions/11958701/what-is-the-best-approach-for-timeout-using-selenium-using-webdriver –

答えて

3

これで明示的に待機を宣言できます。

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

あなたも、私はそれがC#での構文だと思う

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

暗黙の待機時間を変更することができます。 Rubyで

(いないことを確認する)それは

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

これは動作がGoToUrl()メソッドによってブロックされるため動作しません。そのため、メソッドが完了するか、タイムアウトするまでコードを実行できません。デフォルトは30秒です。しかし、応答に感謝します。 – KabanaSoft

+2

暗黙の待機時間を変更する必要があります。 'driver.Manage()。Timeouts()。ImplicitlyWait(TimeSpan.FromSeconds(5));' 5秒をどれくらい減らしたいかを減らしてください。それはあなたの待ち時間に影響します。 – Amey

+1

また、 'wait.until(driver.Navigate()。GoToUrl(myUrl));を試すこともできます。 // goto page url' gotoURLコマンドが実行されるまでの時間を明示的に定義する場所 – Amey

0

ページの読み込みタイムアウトはまだ.NETバインディングに実装されていませんです。うまくいけば、彼らはすぐになるでしょう。

3

解決策が見つかりました。新しいFirefoxDriverを作成するとき、あなたは各コマンドを待つ最大時間ですコマンドタイムアウトを指定することができ、コンストラクタ内のオーバーロードがあり、そしてGoToUrl()メソッドを呼び出すときに動作しているようだ:

driver = new FirefoxDriver(new FirefoxBinary(), profile, new TimeSpan(0, 0, 0, timeoutSeconds)); 
を参照用FirefoxDriverコンストラクタドキュメントへ

リンク:これはこの問題に遭遇し、他の誰かを助け http://selenium.googlecode.com/svn/trunk/docs/api/dotnet/html/M_OpenQA_Selenium_Firefox_FirefoxDriver__ctor_2.htm

希望。

+0

私は同様の質問を投稿しました:http://stackoverflow.com/questions/11958701/what-is-the-best-approach-for-timeout-using-selenium-using-webdriver –

28

これがまだこれに対する答えを探している人に役立つ場合は、C#WebDriver APIに適切なメソッドが追加されました。

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

私はちょうど誰かがページロードのタイムアウトと暗黙的な待機の違いページロードは正確に実行されますが、要素は正確に実行されませんか? – JasonCoder

+7

C#インテリセンス 'ImplicitlyWait'はページ上の要素を検索する時間であり、' SetPageLoadTimeout'はURLの読み込みを待つ時間であり、 'SetScriptTimeout'は非同期JSを待つ時間です負荷。 – jpvantuyl

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

注:driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(5))が廃止されます。

関連する問題