4

この問題は、www Web サイトでのテストからローカルホスト バージョンのテストに切り替えたときに始まりました。VS 2012 で作業して、ローカルホストがアクティブになるようにデバッグを開始し、テストできるようにプロセスを切り離してから、好きなテストを実行します。非常に基本的な例:

    [Test]
    public void CanGoToHomePage()
    {
        Pages.HomePage.Goto();
        Assert.IsTrue(Pages.HomePage.IsAt());
    }

そして、それが参照する関数は次のとおりです。

    public class HomePage
    {
        const string Url = "http://localhost:3738";
        const string HomepageTitle = "FunnelFire - Home Page";

        public void Goto()
        {
            Browser.Goto(Url);
        }

        public bool IsAt()
        {
            return Browser.Title == HomepageTitle;
        }
    }

実際のセレンコードは次のとおりです。

    public static class Browser
    {
        static IWebDriver webDriver = new FirefoxDriver();

        public static void Goto(string url)
        {
            webDriver.Manage().Window.Maximize();
            webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
            webDriver.Url = url;
        }
    }

今問題。ブラウザーに追加した 10 秒間の暗黙的な待機は、ページを読み込んだ後、検索したい情報を見つけることができるかどうかを確認するために最大 10 秒間正常に待機しますが、それは問題ではありません。

前に言ったように、ローカルホストでのテストに切り替えた後、突然、ページがロードされ始めるという奇妙な問題に遭遇しました (つまり、画面はまだ完全に白く、何も終了していません)、または次のページのロードがかろうじて終了し、突然テストは起動して失敗し、読み込み中のページが正しいページであっても、IsAt の Assert が false を返すことを示します。そのテストをすぐにもう一度実行すると、問題なく合格しました。3 回実行すると、再びランダムに失敗する可能性があります。正直なところ、何が問題を引き起こしているのかわかりません。助けていただければ幸いです。

4

1 に答える 1

7

暗黙的な待機は、要素を見つける場合にのみ機能します。ページのタイトルが特定の値になるまで待機するには、明示的な待機を使用する必要があります。このパターンの独自のバージョンを作成できますが、.NET バインディングでは、WebDriver.Support.dllアセンブリにWebDriverWaitこれを支援するクラスがあります。その使用法は次のようになります。

// WARNING! Untested code written from memory below. It has not
// been tested or even compiled in an IDE, so may be syntactically
// incorrect. The concept, however, should still be valid. 
public void WaitForTitle(IWebDriver driver, string title, TimeSpan timeout)
{
    WebDriverWait wait = new WebDriverWait(driver, timeout);
    wait.Until((d) => { return d.Title == title; });
}

このパターンを使用するようにメソッドを変更して、待機関数がタイムアウトした場合に をIsAtキャッチしてfalse を返すこともできます。WebDriverTimeoutException

于 2013-06-04T15:09:57.417 に答える