javascript - 如何计算事件的 javascript 超时?

标签 javascript ajax dojo selenium-webdriver

我正在使用 Selenium 测试一个使用 Dojo 的网络应用程序,它使用 java 脚本来显示某些元素。我想等到所有元素都显示完毕后再尝试操作页面,但我遇到了麻烦。

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

我也曾多次尝试寻找该元素,但这不太好,因为以后可能会有一些 javascript 以某种方式使用该字段。

所以基本上我想要一个方法(至少在 firefox 中)来查询等待在 setTimeout(或 setInterval)上运行的 javascript 我什至可以处理通过我自己的函数包装内置调用的方法只是为了跟踪这一点。

任何想法或建议表示赞赏!

最佳答案

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);
}

然后:

selenium.waitForCondition("window.timeoutCounter == 0");

关于javascript - 如何计算事件的 javascript 超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7104321/

相关文章:

javascript - td 到表格顶部的距离(在可滚动的 div 内)?

element.append 中的 JavaScript 变量值

javascript - Dojo 工具包和 dgrid 的闭包编译器外部

Dojo/Dijit TitlePane

javascript - 使用JavaScript和Jquery在下拉列表中显示后端数据

制表符后跟空格的javascript正则表达式

javascript - Sir Trevor CSS 的样式无法正确显示 Ruby On Rails 应用程序

ajax - 雅虎中的 YQL!应用程序 [YAP]

javascript - AJAX .val() 或 .text() 不适用于文本区域?

jquery-mobile - Sencha touch 与 Dojo Mobile 与 jQuery Mobile?