与Selenium一起使用的JQuery全局isAnimating检查(2)

与Selenium一起使用的JQuery全局isAnimating检查(2),jquery,animation,selenium,Jquery,Animation,Selenium,我正在使用Selenium,需要确定jquery动画是否已完成,然后再进行下一个操作(单击、输入等) 我需要做到这一点,而不改变任何现有的动画脚本已经在网站上-所以我需要能够监控JQuery中的一些东西,我可以迭代,当任何/所有动画停止,我可以继续 像这样的东西会很理想 function jqueryWait(){ while(jQuery.animation.queue > 0){ // do nothing - wait } // return

我正在使用Selenium,需要确定jquery动画是否已完成,然后再进行下一个操作(单击、输入等)

我需要做到这一点,而不改变任何现有的动画脚本已经在网站上-所以我需要能够监控JQuery中的一些东西,我可以迭代,当任何/所有动画停止,我可以继续

像这样的东西会很理想

function jqueryWait(){
    while(jQuery.animation.queue > 0){
        // do nothing - wait
    }
    // return to selenium
    return true;
}

我认为在不修改jquery动画脚本的情况下,没有办法做到这一点。如果在动画完成时,它会将一个类添加到带有动画的元素中,那么您可以检查该类是否存在,但除此之外,唯一可能的混乱选项是良好的旧
Thread.Sleep(xxxxxx)

在不了解动画的全部细节的情况下,您是否可以通过检查jquery是否有任何类似的活动来使其更通用:

function jqueryWait(){
    while(jQuery.active != 0){
        // do nothing - wait
    }
    // return to selenium
    return true;
}    

这就是我等待任何jquery ajax请求完成的方式,然后在我的selenium测试中继续进行。

据我所知,它没有正式的文档记录(因此可能会在没有警告的情况下更改),但似乎只要动画在运行,
$.timers.length
就不会为零。

答案在于:使用

如果您知道要检查的特定元素:
$(“#el”)是(“:animated”)

如果不是:
$(“:动画”)。长度==0


当然,您可以使用
return(boolean)((JavascriptExecutor)driver)将任意javascript代码包装在自定义等待中作为您的等待条件

不应该是(jQuery.active!=0){//donothing}沿着正确的行排序,尽管我们已经进行了检查。更具体地说,我们有一个嵌入iframe的模式弹出窗口。有一系列动画要加载窗口,在我需要聚焦到新的iframe之前,我有兴趣检查这些动画。好的,但是新窗口中的动画发生在哪里?如果是这样,您可能希望切换到该窗口,然后等待我的abobe建议,或者您可以执行类似的操作,等待该窗口出现,然后切换到该iframe
driver.switch_to_default_content,而(len(driver.window_handles))jQuery.active似乎只是活动ajax请求的计数。它不受动画的影响。请参阅:可能重复$(“:animated”)。长度==0表示“没有当前动画”,与第一行相反。