0

PageObject モデルを使用してテスト フレームワークを開発していますが、新しいページの URL が利用可能になるまでに時間がかかるインスタンスが 1 つあります。

シナリオは次のとおりです。ユーザーが新しいオブジェクトを作成しています。オブジェクトの名前を指定し、ボタンをクリックして新しいオブジェクトの編集ページに移動します。

ボタンがクリックされたときに読み込まれる URL を使用して EditPage オブジェクトを作成したいと考えています。ボタンをクリックしてから、ドライバの現在の URL が編集ページの新しい URL に更新されるまで、しばらく時間がかかります。

Selenium 2 では、この状況を処理するクリーンで堅牢な方法は何ですか? これまでのところ、特定の要素がページにロードされないという問題に遭遇しただけですが、ドライバーの現在の URL が更新されるのを長時間待つという状況に遭遇したのはこれが初めてです。

読み込みが遅いコンポーネントには FluentWait を使用しており、WebDriverWait について聞いたことがあります。私の質問は、この状況でどちらを使用するのが良いですか? 利用可能になるのが遅い URL を処理する方法の簡単な例を投稿できますか? CreatePage が EditPage の要素について何も知る必要がないソリューションが必要なため、EditPage の要素が表示されるのを待つことを含む戦略は、カプセル化の原則に違反します。

4

1 に答える 1

1

これは、ページの読み込みに一定の時間がかかり、ページ オブジェクトでそれを考慮する必要がある場合によくある問題です。ページオブジェクトには、割り当てられた優先時間内にロードされるのを待つメカニズムが組み込まれている必要があります。これにより、例外をスローした場合に、1) 要求されたページが実際には表示されなかった、または 2) 時間がかかりすぎたことが原因であることがわかります。 . テストが失敗した理由を区別するために、ケースごとに異なる例外をスローできます。

あなたの場合、問題のページ オブジェクトの URL と URL が一致するまで、ページ オブジェクトを一定時間待機させるのが最善の方法だと思います。したがって、読み込みプロセスの一部として、ページ オブジェクトは次のようなメソッドを呼び出すことができます。

public PageObject WaitForURL(string url)
{
    Console.WriteLine("WaitForURL : " + url);
    WebDriverWait _waitForURL = new WebDriverWait(_driver, TimeSpan.FromMilliseconds(30000));
    _waitForURL.Until((d) =>
    {
        try
        {
            return d.Url == url;
        }
        catch (Exception)
        {
            return false;
        }
    });
    Console.WriteLine("URL changed to : " + _driver.Url);

    return this;
}

URL が目的の URL に変更されても、ページの読み込みが完了したわけではないことに注意してください。あなたは特定の要素を待ちたくないと言っていましたが、それは理解していますが、上記の後にbodyタグが表示されるまで簡単に待つか、ページオブジェクトの要素とやり取りする前に最初に要素が表示されるのを待つことから始めます。

于 2013-05-08T03:14:41.123 に答える