Сохранять сообщения консоли для отладки в nightwatch.js

Как я могу получить все сообщения консоли при отладке nightwatch.js?

В phantom можно использовать обработчик page.onError. Могу ли я сделать то же самое с nightwatch?

Я знаю о window.onerror, но есть ли способ сохранить все консольные сообщения?

Может ли кто-нибудь использовать рабочую конфигурацию/код?

Ответы

Ответ 1

Решение:

module.exports = {
  'Check getting log messages' : function (client) {
    client
      .url('http://jsbin.com/rohilugegi/1/')
      .getLogTypes(function(result) {
        console.log(result);
      })
      .getLog('browser', function(result) {
        console.log(result);
      })
    ;

    return client;
  },

Он выдает вывод

[Start] Test Suite
==================

Running:  Check getting log messages
[ 'har', 'browser', 'client', 'server' ]
[ { message: 'Test error\n  error (:0)',
    timestamp: 1428447687315,
    level: 'WARNING' },
  { message: 'Test log (:)',
    timestamp: 1428447687315,
    level: 'INFO' } ]
No assertions ran.

Команды getLogTypes и getLog уже реализованы в клиентских командах, но их описание отсутствует на сайте API

Похоже, что стоит читать исходный код вместо документации

Ниже jsdoc для этих функций из исходного кода:

/**
 * Gets the available log types
 *
 * ```
 * this.demoTest = function(client) {
 *   this.getLogTypes(function( typesArray ) {
 *     
 *   });
 * };
 * ```
 *
 * @method getLogTypes
 * @param {function} [callback] Optional callback function to be called when the command finishes.
 * @api commands
 * @see logTypes
 */

и

/**
 * Gets a log from selenium
 *
 * ```
 * this.demoTest = function(client) {
 *   this.getLog( 'browser', function( logEntriesArray ) {
 *     console.log( "Log length: " + logEntriesArray.length );
 *     logEntriesArray.forEach( function( log ) {
 *        console.log( "[" + log.level + "] " + log.timestamp + " : " + log.message );
 *      } );
 *   });
 * };
 * ```
 *
 * @method getLog
 * @param {string} typeString Log type to request
 * @param {function} [callback] Optional callback function to be called when the command finishes.
 * @api commands
 * @see log
 */

Ответ 2

Сначала убедитесь, что вы установили loggingPrefs в {'browser': 'ALL'} в вашей конфигурации ночного видения, иначе вы не увидите записи в консоли браузера, которые были написаны с console.log. Мой nightwatch.conf.js выглядит примерно так:

            desiredCapabilities: {
              browserName: 'chrome',
              handlesAlerts: true,
              loggingPrefs: { 'browser': 'ALL' }
            }

Далее, как и другие говорили, вам просто нужно использовать встроенную функцию getLog на клиенте. например

   browser.getLog('browser', function(logEntriesArray) {
      console.log('Log length: ' + logEntriesArray.length);
        logEntriesArray.forEach(function(log) {
            console.log('[' + log.level + '] ' + log.timestamp + ' : ' + log.message);
        });
    });