在 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.
命令 getLogTypes 和 getLog 已经在 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);
});
});
如何在 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.
命令 getLogTypes 和 getLog 已经在 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);
});
});