2016-11-21 59 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; 
    } 
}); 

现在,让我们考虑的Tapestry模板下面的代码片段:

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

当适当的复选框被选中的片段出现与挂毯效应“秀”。

有没有办法在Selenium测试中等待效果的完成?换句话说,是否有一些JavaScript表达式在效果进行时评估为false,并在完成时评估为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); 
    } 
});