2017-08-24 16 views
0

Seleniumに関する1つの問題は、ページがAJAXリクエストを頻繁に使用する場合、Seleniumは要求が完了した時点を知らないため、要求された要素に対するページのクエリを開始する必要があることです。セレンに目に見えない要素が見えるようにするには?

この問題を解決するために私の考えは、カウンタがAJAXリクエストが終了するたびにインクリメント含まれていますページに見えない divを入れていた

:私はのような行を置くことができるセレンのテストコードでそう

<!-- will be v1v after first AJAX requext, v2v after the second etc. --> 
<div style="display: none;" id="ajaxcounter">v0v</div> 

をこの:どうやらセレンは、私はこのdisplay: none;、その後、SELを削除する場合style="display: none;"(と要素の内容を「見る」ことを拒否しかし、上記の行は、selenium.common.exceptions.TimeoutExceptionを提起

WebDriverWait(self.driver, 10).until(
    text_to_be_present_in_element((By.ID, "ajaxcounter"), "v1v") 
) 
# test stuff that depends on the first AJAX request 

エニウムはうまくいく)。

セレンはこの目に見えない要素を見ることができますか?それは他の目に見えない要素については普通に文句を言うことができますが、それでもなおこの要素が1つしか見えません。

+2

が、これはあなたには関係ありませんあなたは確かは以下のとおりです。https://stackoverflow.com/questions/2835179/how-to-get-selenium-to-wait-for-ajax-response – Adam

答えて

0

複数の選択肢があります。 XPathはidは「ajaxcounter」で、テキストは「v1v」であるという要素を見つけます

WebDriverWait(self.driver, 10).until(
    presence_of_element_located((By.XPATH, "//*[@id='ajaxcounter' and text()='v1v']")) 
) 

:私はこれをお勧めします。

1

「wait for ajax」のようなものを使用できます。

public void WaitForAjax(int timeoutSecs = 10) 
    { 
     for (var i = 0; i < timeoutSecs; i++) 
     { 
      var ajaxIsComplete = (bool) _browser.ExecuteScript("return jQuery.active == 0"); 
      if (ajaxIsComplete) return; 
      Thread.Sleep(100); //retry interval 
     } 
    } 
関連する問題