2016-08-10 8 views
0

私のプロジェクトでは、フォームを正しく保存するために、「保存」または「変更を保存」ボタンをクリックする必要があります。そのクリックはページ全体をリロードさせます(変更はリロード後にページに表示されます)。何か間違っていると、ページのリロードが中止されます。 単純なアサーションを作成して、そのページがリロードされたかどうかを確認したいのですが、テストが失敗する場合があります。 3回のを - (私はそれを同じフォーム上の5倍を使用することができ、私は、ページがリロードされたかどうかを確認するためにAssert.True()でそれを使用するが、それは常に動作しませんWebDriver(C#)でページがリロードされたかどうかを確認する方法はありますか?

public bool WasPageRefreshed(float seconds) 
{ 
    DriverLocal.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.MinValue); 
    string getReadyState = "return document.readyState;"; 

    for (int i = 0; i < 10; i++) 
    { 
     string readyState = GetJsExecutor().ExecuteScript(getReadyState) as string; 
     if (readyState != "complete") 
      return true; 
     Thread.Sleep(TimeSpan.FromMilliseconds(seconds/10)); 
    } 

    DriverLocal.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(60)); 
    return false; 
} 

:私はこのコードを使用してみましたOK、2回のテストは失敗します)。 100%の使用率で正しく動作するようにアップグレードする方法はありますか? ページがリロードされたかどうかを確認する別の方法がありますか?

答えて

0

非同期的にAjax呼び出しの動作があります。あなたがより良いSeleniumWait代わりに睡眠を使用し、私の意見としては

public void WaitForAjax() 
{ 
    while (true) // break if ajax return false 
    { 
     var ajaxIsComplete = (bool)(driver as IJavaScriptExecutor).ExecuteScript("return jQuery.active == 0"); 
     if (ajaxIsComplete) 
      break; 
     Thread.Sleep(100); 
    } 
} 
+0

を確認することができます。私はページがリロード中にリロードしているかどうかを確認する必要があります。 –

+0

あなたのケースは読み込みの確認とは異なります。 「保存」ボタンの後に存在し、アサーションをチェックするオブジェクトを見つけられないのはなぜですか? –

+0

これはウェブページがjQueryを使用する場合にのみ有効です – nilesh

0

:AJAX呼び出しが終了するまで、次に、あなたのケースを行い、これを見る、待つことができます。この

 public bool WasPageRefreshed(double seconds) 
    { 
     WebDriverWait wait = new WebDriverWait(DriverLocal, TimeSpan.FromSeconds(seconds)); 
     wait.PollingInterval = TimeSpan.FromSeconds(1); 
     string getReadyState = "return document.readyState;"; 
     try 
     { 
      wait.Until(d => 
      { 
       string readyState = GetJsExecutor().ExecuteScript(getReadyState) as string; 
       if (readyState == "complete") 
        return true; 
      }); 
     } 
     catch (Exception) 
     { 
     } 
     return false; 
    } 

試してみてください、私はあなたがリフレッシュページの状態をマークし、特定の要素を待ち示唆しています。

0

ウェブページの読み込みでは、残念ながらすべてのソリューションに適合するサイズはありません。あらゆる状況が変わります。オートメーションスイートで待つ方法は非常に重要です。明示的な待機ではなく、JavaScriptのオプションを使用しての、あなただけのページのロード後に新しい要素を待つか、ページが

new WebDriverWait(driver, TimeSpan.FromSeconds(timeOut)) 
.Until(ExpectedConditions 
.ElementExists((By.Id("new Element Id")))); 

または

にロードされていることを示しています特定の要素の不可視のを待つことができ、待ち時間の方法を推奨しています
new WebDriverWait(driver, TimeSpan.FromSeconds(timeOut)) 
.Until(ExpectedConditions 
.InvisibilityOfElementLocated((By.Id("old Element Id")))); 

あなたは、私は、ページがロードされ、使用できるようになります完了するために、すべてのAjaxを待ちます場合は、ヘルプを習慣ExpectedElementsドキュメントhere

関連する問題