我正在使用Selenium来测试一个使用Dojo的Web应用程序,它使用java脚本来显示某些元素。我想等到所有元素都显示出来后再尝试操作页面,但是我遇到了麻烦。
我已经开始等待dojo inFlight变量为0,这表示所有 AJAX 已经完成。这并不总是工作,因为它似乎在超时后做一些事情。
我也尝试过反复查找元素,但这并不太好,因为也许以后会有一些javascript以某种方式使用这个字段。
所以基本上我想要一个方法(至少在firefox中)来查询等待在setTimeout(或setInterval)上运行的javascript,我甚至可以通过我自己的一个函数来科普 Package 内置调用的方法,只是为了跟踪这一点。
如有任何想法或建议,敬请谅解!
3条答案
按热度按时间lyr7nygr1#
JavaScript中的每个函数都可以被替换。
然后道:
ej83mcc02#
无论何时调用
setInterval
的setTimeout
--都会返回一个计时器ID。1.将该计时器ID保存在数组中
1.在超时时调用的函数中,把计时器id从数组中取出,因为计时器一结束,我们就必须把id从数组中移除。
1.任何时候你想检查活动计时器的数量,只需查询该数组的长度。
deikduxw3#
另一种方法可能是这样的
它基于这样一个事实,即每次超时都将返回一个比每次调用大1的数字。
因此,我们创建一些虚拟超时,只是为了在某个时间点获得这个数字。
然后,过了一段时间,我们再次调用它,我们得到一个新的数字。这些数字之间的差异是有多少次间隔被调用之间。
这样做的缺点是你必须创建超时,优点是你不必修改原始函数。