2016-11-21 9 views
1

私たちのアプリではTapestry 5.3.8を使用しています。統合テストは、Selenium 2.53.1を使用して実装されています。JavaScriptのタペストリー効果を待つ

場合によっては、セレンテストは完了するまで何らかのアクションを待つ必要があります。例えばTapestryの場合。 AJAXリクエストを呼び出すと、次のコードが実行され、AJAXリクエストが完了するまで待機します。

new WebDriverWait(driver, 10).until(new ExpectedCondition<Boolean>() 
{ 
    @Override 
    public Boolean apply(final WebDriver webDriver) 
    { 
     String js = "return window.Ajax.activeRequestCount"; 
     Long count = (Long) ((JavascriptExecutor) webDriver).executeScript(js); 
     return count.longValue() == 0; 
    } 
}); 

それでは、タペストリーテンプレートの次のスニペットを考えてみましょう:適切なチェックボックスをオンにすると

<t:formfragment t:id="repeatedDate" element="fieldset" show="show" hide="fade" visible="dateRepeated"> 
    ... 
</t:formfragment> 
... 
<t:checkbox value="dateRepeated" t:mixins="triggerfragment" fragment="repeatedDate"/> 

フラグメントは、タペストリー効果「ショー」と表示されます。

セレン試験で効果の完了を待つ方法はありますか?言い換えれば、エフェクトの進行中にfalseと評価されるJavaScript式がありますか?完了したらtrueになりますか?

ありがとうございました。

答えて

0

トランジションエフェクトは、Ajaxコールとは関係なく、実装に依存します。

だから、またゼロにする効果のカウントを待つために試みることができる:

new WebDriverWait(driver, 10).until(new ExpectedCondition<Boolean>() 
{ 
    @Override 
    public Boolean apply(final WebDriver webDriver) 
    { 
     String SCRIPT = 
      "return window.Tapestry.pageLoaded === true " + 
      " && window.Ajax.activeRequestCount === 0  " + 
      " && window.Effect.Queue.effects.length === 0 " ; 

     Object result = ((JavascriptExecutor)webDriver).executeScript(SCRIPT); 
     return Boolean.TRUE.equals(result); 
    } 
}); 
関連する問題