0

我正在创建一个基于 QUnit 的自动化测试框架,如果测试时间过长(超时),我希望能够终止测试。现在,我当前的实现非常简单:在测试开始时,我设置了一个计时器并等待。如果到那时测试尚未完成,我将其标记为失败并重新加载<iframe>正在运行的测试。

如果它正在等待 AJAX 调用,或者异步测试永远不会返回,这将非常有用。但是,该setTimeout函数将始终在当前执行线程之后运行,因此如果测试进入无限循环,或者在其标准执行中花费的时间过长,它不会真正停止它,而是坐下来等待它的转动而不打断它。有没有办法取消子代码<iframe>(在同一个域中)中的代码执行,即使它卡在循环中?

4

1 回答 1

0

在父窗口中定义您的计时器 - 当 IFrame 加载时,让它在父窗口中启动计时器 - 当计时器用完时,让父窗口重新加载 IFrame。

在您的父页面中

<script> 

function startTimer(duration) {     
    setTimeout("timedOut()",duration);
} 

function timedOut() {
       // handle time out
}

</script>  

<iframe id=myFrame></iframe> 

在您的 IFrame 中

<script> 
    parent.startTimer(duration);
</script>

每个页面都在不同的线程上运行,因此它应该适合您,但是有些事情会锁定整个浏览器系统(无限循环/无限递归),您必须让任务管理器参与其中以重新启动浏览器,但它应该涵盖大部分情况。

于 2012-05-16T17:16:01.800 回答