2017-12-26 5 views
2

私は古いWebサイトを自動化するためにSelenium WebDriverとFirefoxDriverを使用しています。このウェブサイトはプレーンなJavaScriptを使用して構築されていますAjaxリクエストの実行にはXMLHttpRequestを使用しています。私は、Ajaxリクエストが完了するのを待つべき関数WaitForAjax()を書きたいと思います。現在、Explicit Wait(Thread.Sleep)を使用しています。 Implicit Waitで誰かが同じことを達成するのを助けることができますか?XMLHttpRequestベースのリクエストに対して、ajaxレスポンスを待つセレンを取得する方法

protected void WaitForAjax() { 
    /* 
    while (true) { 
     var ajaxIsComplete = (bool)(_driver as IJavaScriptExecutor).ExecuteScript("return jQuery.active == 0"); 
     if (ajaxIsComplete) 
      break; 
    } 
    */ 

    //I am using Explicit Waits of 3 second. 
    Thread.Sleep(TimeSpan.FromSeconds(3)); 
} 
+0

https://stackoverflow.com/questions/15122864/selenium-wait-until-document-is-ready:そして、ほとんどの場合、あなたはこのようなスクリプトを試すことができ :)何かがあります –

答えて

0

あなたはjQueryの準備状況を確認していると思います。 jQueryの一部ではない他のJavaScript AJAX呼び出しを処理するには、ドキュメントの準備状況をチェックする必要があります。これは、明示的な待ち時間で、セレンドライバーから任意の期待の条件を必要としませんthis-

public void WaitForAjax() 
{ 
    while (true) 
    { 
     var ajaxIsComplete = (bool)(driver as IJavaScriptExecutor).ExecuteScript("return document.readyState"); 
     if (ajaxIsComplete) 
      break; 
     Thread.Sleep(100); 
    } 
} 

のようなものを試してみてください。

+0

(文字列)(_ドライバをIJavaScriptExecutorとして).ExecuteScript( "return document.readyState"); Webページの準備状態をチェックしようとすることができます。 'complete'を取り消して、ドキュメントのローディング状態を確認するために使用します。 –

+0

@BinnyChanchal期待されるAJAX呼び出しの後にこの関数を呼び出すコードを投稿してください。 –

0

何もしない限り、Thread.sleep()を使用しないでください。

public void waitForAjax() { 
    ExpectedCondition<Boolean> pageLoadCondition = driver -> "complete".equals(((JavascriptExecutor) driver).executeScript("return document.readyState")); 
    WebDriverWait wait = new WebDriverWait(webDriver, 30); 
    wait.until(pageLoadCondition); 
} 
+0

すでに述べたように、私が自動化しているウェブサイトはjQueryを使用していません。 XMLHttpRequestを使用してajaxリクエストを送信します。 –

+0

申し訳ありませんが、私はその方法を編集しました。私は途中でJavaを使用している、私はあなたがC#の質問を見たが、アイデアは同じです。あなたの応答のために "document.readyState"の予期された条件を明示的に待ちます –

+0

ありがとうございます。私はあなたのソリューションをチェックしましたが、document.readyStateはAjaxリクエストの完了を保証しません。 MDNドキュメント(https://developer.mozilla.org/en-US/docs/Web/API/Document/readyState)によると、document.readyState ==は、ドキュメントとすべてのサブリソースの読み込みが完了したことを意味します。 PageLoadをチェックすると便利です。この回答( https://stackoverflow.com/a/15136386/7875155)によれば、Ajaxをチェックする一般的な方法はありません。 –

関連する問題