1

Selenium2.25WebDriverを使用しています

ページ上の要素の検索に問題があり、テストケースで要素を検索できる場合と、ページが読み込まれない場合があります。ページの読み込みが原因で、これを下の行に追加すると、機能しているように見えます。

 driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(2));

私の質問は、コードを上記のコード行に分散させたくないということです。コードを1か所に集中させる方法はありますか?

どんな助けでも大歓迎です、ありがとう!

4

2 に答える 2

2

タイムアウトを1回設定すると、ドライバーインスタンスの存続期間中に設定されます。リセットし続ける必要はありません。これは、ドライバーを作成した直後に設定できます。

IWebDriver driver = new FirefoxDriver();
driver.Manage().Timeouts.SetPageLoadTimeout(TimeSpan.FromSeconds(2));

このタイムアウトを使用する際の唯一の注意点は、すべてのブラウザが完全にサポートしているわけではないということです(IEは確かにサポートしていますが、Firefoxもサポートしていると思いますが、Chromeはサポートしていないと思います)。

于 2013-01-30T14:53:11.937 に答える
0

次のような回避策を試すことができます。

ページの最後に読み込まれる要素を観察し、そのID(またはその他の識別子)を見つけます。次に、次のようなことを行います。

 while (true)
        {
            try
            {   
                IWebElement element = driver.FindElement(By.Id(...));
                if (element.Displayed)
                {
                    break;
                }
            }
            catch (Exception)
            {
                continue;
            }
        }

これは、最後にロードされた要素が表示され、そこで中断するまでループを続けます。要素が見つからないという例外がキャッチされ、要素が表示されなくなるまでループが継続されます。

于 2013-02-28T10:25:15.087 に答える