我现在正在与Selenium合作,我想知道是否有可能让Selenium知道是否存在脚本错误。
我意识到根据脚本错误进行操作需要流量控制,而Selenium IDE则没有。我也意识到,如果错误是严重的,那么测试用例肯定会失败,我们就有了它。不过,我还是希望Selenium能够以某种方式将它们存储在某个地方。
我们在Firefox和IE中运行测试,因此我们可以使用window.onerror
来记录错误。但是,我不确定如何将它集成到Selenium。据我所知,记录器将其处理程序附加到window.document
,我们需要附加到window
本身。我试图从用户扩展文件中装饰Recoreder.prototype.attach
以自己添加处理程序,但它相当笨拙并导致IDE中的奇怪行为(就像没有任何记录一样,所以我可能做错了)。
有什么想法吗?
答案 0 :(得分:1)
我在Selenium中挖得足够深,以获得一个好的答案。
装饰Recorder.prototype.attach
和Recorder.prototype.detach
效果很好;您只需将自己附加到window.onerror
事件,就可以了解页面上发生的不良情况。是时候采取行动来解决问题了。有两种选择:
无法使用扩展来实现后者,因为在扩展文件之后会加载您需要更改行为的文件。
以下是如何从用户扩展中修饰相应的函数:
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;
});