42

私はSelenium2.20WebDriverを使用して、C#でFirefoxブラウザーを作成および管理しています。ページにアクセスするには、次のコードを使用して、URLにアクセスする前にドライバーのタイムアウトを設定します。

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

問題は、ページの読み込みに時間がかかることがあり、Selenium WebDriverを使用してページを読み込むためのデフォルトのタイムアウトは30秒であり、長すぎるように見えることです。そして、私が設定しているタイムアウトが、GoToUrl()メソッドを使用したページのロードに適用されるとは思いません。

そのため、ページを読み込むためのタイムアウトを設定する方法を見つけようとしていますが、実際に機能するプロパティやメソッドが見つかりません。デフォルトの30秒のタイムアウトは、要素をクリックしたときにも適用されるようです。

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

4

9 に答える 9

32

これに対する答えをまだ探している人に役立つように、C# WebDriver API には適切なメソッドが含まれるようになりました。

driver.Manage().Timeouts().SetPageLoadTimeout(timespan)
于 2012-08-27T17:49:47.323 に答える
6

これにより、待機を明示的に宣言できるはずです。

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

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

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

それがC#の構文だと思います。(確かではありません)

ルビーでは

@driver.manage.timeouts.implicit_wait = 30
@wait = Selenium::WebDriver::Wait.new(:timeout => 30)
于 2012-05-15T18:50:57.540 に答える
4

この問題の解決策を見つけました。新しい 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

これが、この問題に遭遇した他の誰かに役立つことを願っています。

于 2012-05-17T16:07:01.773 に答える
2

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

于 2012-05-15T19:40:37.897 に答える