我正在寻找一种方法来读取记录到firebug控制台的最新命令。
例如,我可以做一些事情
console.debug('The most current request URI is /sweatsocks');
然后另一段(伪)代码可以
if (mostRecentConsoleEntry().endsWith('/sweatsocks')) {
// do some stuff
}
作为debug语句的上下文将出现在被测试的代码中,并且控制台检查将在selenium脚本中完成。这将让我观察深埋在js函数中的信息以及在运行时构建的东西。
答案 0 :(得分:5)
您可以覆盖console.log
函数以添加所需的任何额外功能。
var oldLog = console.log;
var lastLog;
console.log = function () {
// do whatever you need to do here: store the logs into a different variable, etc
// eg:
lastLog = arguments;
// then call the regular log command
oldLog.apply(console, arguments);
};
这不是最安全的解决方案,因为console
允许使用printf样式语法:
console.log("%d + %d = %s", 1, 3, "four");
......但这可能是你的开始。
答案 1 :(得分:2)
不要尝试覆盖console.debug,实现一个执行console.debug的功能以及你需要的功能。
var debugCalls = [ ];
function myDebug(errorMessage){
console.debug(errorMessage); //maintain original functionality
debugCalls[debugCalls.length] = errorMessage;
//the previous argument to myDebug is debugCalls[debugCalls.length]
//you may also want to call an ajax function to report this error
mailError(errorMessage);
}
答案 2 :(得分:1)
您可以重写console.log()
,并将所有日志附加到数组中吗?然后启动原始console.log()
并重复它正在做的事情以在控制台上获得调试输出?
答案 3 :(得分:0)
这是我放在一起的更复杂的版本:
/**
* Console log with memory
*
* Example:
*
* console.log(1);
* console.history[0]; // [1]
*
* console.log(123, 456);
* console.history.slice(-1)[0]; // [123, 456]
*
* console.log('third');
* // Setting the limit immediately trims the array,
* // just like .length (but removes from start instead of end).
* console.history.limit = 2;
* console.history[0]; // [123, 456], the [1] has been removed
*
* @author Timo Tijhof, 2012
*/
console.log = (function () {
var log = console.log,
limit = 10,
history = [],
slice = history.slice;
function update() {
if (history.length > limit) {
// Trim the array leaving only the last N entries
console.history.splice(0, console.history.length - limit);
}
}
if (console.history !== undefined) {
return log;
}
Object.defineProperty(history, 'limit', {
get: function () { return limit; },
set: function (val) {
limit = val;
update();
}
});
console.history = history;
return function () {
history.push(slice.call(arguments));
update();
return log.apply(console, arguments);
};
}());
答案 4 :(得分:-1)
您可能想要实现队列。扩展Devin的答案:(类似这样)
var window.log = [];
logger function(msg) {
var log_length = 10;
console.log(msg);
window.log.push(msg);
if(window.log.length > log_length) {
window.log.shift()
}
}
请参阅:
How do you implement a Stack and a Queue in JavaScript?
http://aymanh.com/9-javascript-tips-you-may-not-know#string-concatenation-vs-arrayjoin