Selenium可以注意到脚本错误吗?

时间:2011-01-12 15:24:50

标签: javascript selenium

我现在正在与Selenium合作,我想知道是否有可能让Selenium知道是否存在脚本错误。

我意识到根据脚本错误进行操作需要流量控制,而Selenium IDE则没有。我也意识到,如果错误是严重的,那么测试用例肯定会失败,我们就有了它。不过,我还是希望Selenium能够以某种方式将它们存储在某个地方。

我们在Firefox和IE中运行测试,因此我们可以使用window.onerror来记录错误。但是,我不确定如何将它集成到Selenium。据我所知,记录器将其处理程序附加到window.document,我们需要附加到window本身。我试图从用户扩展文件中装饰Recoreder.prototype.attach以自己添加处理程序,但它相当笨拙并导致IDE中的奇怪行为(就像没有任何记录一样,所以我可能做错了)。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我在Selenium中挖得足够深,以获得一个好的答案。

装饰Recorder.prototype.attachRecorder.prototype.detach效果很好;您只需将自己附加到window.onerror事件,就可以了解页面上发生的不良情况。是时候采取行动来解决问题了。有两种选择:

  • 创建一个自定义命令,检查自上次调用以来是否有错误;
  • 编辑Selenium的源代码,以便在每个新命令之前检查最后一个命令是否有错误。

无法使用扩展来实现后者,因为在扩展文件之后会加载您需要更改行为的文件。

以下是如何从用户扩展中修饰相应的函数:

function decorate(decoratee, decorator) {
    var decorated = function() {
        decorator.apply(this, arguments);
        if (decoratee && decoratee.apply)
            decoratee.apply(this, arguments);
    }
    decorated.base = decoratee;
    decorated.decorator = decorator;
    return decorated;
}

Recorder.prototype.attach = decorate(Recorder.prototype.attach, function() {
    var win = this.getWrappedWindow();
    win.onerror = decorate(win.onerror, function(message, file, line) {
        // do something with the error
    });
});

Recorder.prototype.detach = decorate(Recorder.prototype.detach, function() {
    var win = this.getWrappedWindow();
    win.onerror = win.onerror.base;
});