чтение консоли Firebug в JavaScript - PullRequest
4 голосов
/ 02 марта 2009

Я ищу способ прочитать самую последнюю команду, которая была зарегистрирована в консоли firebug.

Например, у меня может быть что-то, что делает

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

И тогда еще один фрагмент (псевдо) кода может

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

Контекст, являющийся оператором отладки, будет в тестируемом коде, а проверка консоли будет выполняться внутри сценария selenium. Это позволило бы мне наблюдать информацию, скрытую глубоко в js-функциях, а также информацию, которая создается во время выполнения.

Ответы [ 5 ]

5 голосов
/ 02 марта 2009

Вы можете перезаписать функцию 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");

... но это, вероятно, начало для вас.

2 голосов
/ 07 августа 2011

Не пытайтесь переопределить 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);
}
1 голос
/ 02 марта 2009

Не могли бы вы переписать console.log() и добавить все журналы в массив? Затем запустите исходный console.log() и повторите то, что он делает, чтобы получить выходные данные отладки на консоли?

0 голосов
/ 30 октября 2012

Вот более сложная версия, которую я собрал:

/**
 * 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);
    };

}());
0 голосов
/ 22 мая 2012

Возможно, вы захотите создать очередь. Расширяя ответ Девина: (что-то вроде этого)

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()
  }
}

См:
Как реализовать стек и очередь в JavaScript?
http://aymanh.com/9-javascript-tips-you-may-not-know#string-concatenation-vs-arrayjoin

...