在javascript中阅读firebug控制台

时间:2009-03-02 05:34:36

标签: javascript selenium firebug

我正在寻找一种方法来读取记录到firebug控制台的最新命令。

例如,我可以做一些事情

console.debug('The most current request URI is /sweatsocks');

然后另一段(伪)代码可以

if (mostRecentConsoleEntry().endsWith('/sweatsocks')) {
  // do some stuff
}

作为debug语句的上下文将出现在被测试的代码中,并且控制台检查将在selenium脚本中完成。这将让我观察深埋在js函数中的信息以及在运行时构建的东西。

5 个答案:

答案 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