这是一个很好的问题。是的log4js-量角器-appender https://www.npmjs.com/package/log4js-protractor-appender太棒了。它是专门为基于 Protractor 的环境而构建的,它将所有记录器命令放入 Protractor 控制流中,并在记录之前解析 Protractor 承诺。
您使用它的方式不正确。附加器选项不是量角器配置选项的一部分,但可以集成。你的方法有点旧了,我已经更新了博客文章 http://testautomation-aditya.com/2016/08/04/how-to-implements-logs-for-protractorjavascript-based-test-automation-frameworks
这些是回答您的问题 2 的步骤
第 1 步:安装log4js npm 模块 https://github.com/nomiddlename/log4js-node
第 2 步:安装log4js-protractor-appender 模块 https://www.npmjs.com/package/log4js-protractor-appender
步骤3:在Protractor中添加记录器对象创建逻辑beforeLaunch()
并将其分配给浏览器量角器全局对象
'use strict';
var log4js = require('log4js');
beforeLaunch:function(){
if (fs.existsSync('./logs/ExecutionLog.log')) {
fs.unlink('./logs/ExecutionLog.log')
}
log4js.configure({
appenders: [
{ type: 'log4js-protractor-appender', category: 'protractorLog4js' },
{
type: "file",
filename: './logs/ExecutionLog.log',
category: 'protractorLog4js'
}
]
});
},
onPrepare: function() {
browser.logger = log4js.getLogger('protractorLog4js');
},
步骤 4:通过 browser.logger 访问,在测试中使用 logger 对象
describe('sample test', function(){
it('Sample Check', function(){
browser.get("http://www.protractortest.org/#/");
browser.logger.info("Testing Log4js");
browser.sleep(5000);
browser.logger.info('Displayed text is:', browser.getCurrentUrl());
var elm = element(by.css('.lead'))
browser.logger.info('Displayed text is:', elm.getText());
});
});
但需要注意的一件事是 - 该附加程序只是一个控制台附加程序,无法写入文件。该文件仍将包含未解决的承诺
示例输出:
[21:54:23] I/local - Starting selenium standalone server...
[21:54:23] I/launcher - Running 1 instances of WebDriver
[21:54:25] I/local - Selenium standalone server started at http://192.168.1.5:60454/wd/hub
Started
[2017-02-03 21:54:30.905] [INFO] protractorLog4js - Testing Log4js
[2017-02-03 21:54:35.991] [INFO] protractorLog4js - Displayed text is: http://www.protractortest.org/#/
[2017-02-03 21:54:36.143] [INFO] protractorLog4js - Displayed text is: Protractor is an end-to-end test framework for Angular and AngularJS applications. Protractor runs tests against your application running in a real browser, interacting with it as a user would.
.
回答您的问题 1:如何在每次运行时覆盖日志。我添加了一个简单的逻辑beforeLaunch()
删除旧日志(如果存在)及其我上面粘贴的代码片段的一部分