Javascript Selenium能否注意到脚本错误?

Javascript Selenium能否注意到脚本错误?,javascript,selenium,Javascript,Selenium,我现在正在使用Selenium,我想知道是否有可能让Selenium找出是否存在脚本错误 我意识到,处理脚本错误需要流控制,而Selenium IDE没有流控制。我还意识到,如果错误是严重的,那么测试用例肯定会失败,而我们就是这样。尽管如此,我还是希望硒元素至少能以某种方式将它们储存在某个地方 我们在Firefox和IE中运行测试,因此可以使用window.onerror记录错误。但是,我不确定如何将其集成到Selenium中。据我所知,记录器将其处理程序附加到window.document,我

我现在正在使用Selenium,我想知道是否有可能让Selenium找出是否存在脚本错误

我意识到,处理脚本错误需要流控制,而Selenium IDE没有流控制。我还意识到,如果错误是严重的,那么测试用例肯定会失败,而我们就是这样。尽管如此,我还是希望硒元素至少能以某种方式将它们储存在某个地方

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


有什么想法吗?

我对硒的研究已经够深入了,可以得到一个好的答案

装饰
Recorder.prototype.attach
Recorder.prototype.detach
效果良好;您只需将自己连接到
窗口.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;
});

你可以很容易地添加流量控制:@Martin Jespersen谢谢,我不知道。尽管如此,我们使用Selenium IDE记录内容,Selenium RC满足我们所有的流控制需求。在Se RC中可以这样做吗?我想你说的是IDE@Rajasankar不,我说的是RC。你可以在核心扩展名文件中修饰Recorder.prototype.detach(并通过RC发送)。你能给我举一些例子吗?这会让我的生活变得轻松。谢谢你提供的信息。@Rajasankar我编辑了我的答案,加入了一个例子。您可能需要扩展Selenium RC中的基本Selenium类,以便以某种方式访问错误。