在 nightwatch.js 中保存用于调试的控制台消息

Save console messages for debugging in nightwatch.js

如何在 nightwatch.js 调试时获取所有控制台消息?

在 phantom 可以使用 page.onError 处理程序。我可以对守夜人做同样的事情吗?

我知道 window.onerror 但有没有办法保存所有控制台消息?

任何人都可以分享工作配置/代码吗?

解决方案:

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.

命令 getLogTypesgetLog 已经在 client commands 实现,但站点 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
 */

首先确保在您的守夜配置中将 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);
        });
    });