如何计算有效的javascript超时?

Sam*_*and 5 javascript ajax dojo selenium-webdriver

我正在使用Selenium来测试使用Dojo的Web应用程序,它使用java脚本来显示某些元素.在尝试操作页面之前,我想等到所有元素都被显示,但是我遇到了麻烦.

我已经开始等待dojo inFlight变量为0,这表示所有ajax都已完成.这并不总是有效,因为它似乎在事后超时做了一些事情.

我也试过反复寻找元素,但这不太好,因为可能稍后会有一些javascript以某种方式使用这个字段.

所以基本上我想要一个方法(至少在firefox中)查询等待在setTimeout(或setInterval)上运行的javascript我甚至可以通过我自己的函数来处理内置调用的方式,以便跟踪这个.

任何想法或建议赞赏!

Ros*_*son 5

JavaScript中的每个函数都可以替换.考虑这样的事情:

window.originalSetTimeout = window.setTimeout;

window.setTimeout = function(func, delay, params) {
    window.timeoutCounter++;
    window.originalSetTimeout(window.timeoutCallback, delay, [func, params]);
}

window.timeoutCallback = function(funcAndParams) {
    window.timeoutCounter--;
    func = funcAndParams[0];
    params = funcAndParams[1];
    func(params);
}
Run Code Online (Sandbox Code Playgroud)

然后:

selenium.waitForCondition("window.timeoutCounter == 0");
Run Code Online (Sandbox Code Playgroud)