首页 > 解决方案 > 如何在 Protractor 中处理跨浏览器测试的日志记录?

问题描述

我正在用 javascript(VanillaJS)、jasmine 和量角器构建一个自动化框架。我选择了带有 log4js-protractor-appender 的 log4js 进行日志记录。当我执行跨浏览器测试时,我尝试保存日志(按浏览器类型)。我想在 safari 和 chrome 上运行规范,然后期望每个浏览器有 2 个单独的日志文件。

问:如何使用前面提到的技术创建两个单独的日志文件,其中一个仅包含 chrome 的日志,第二个文件仅包含 safari 浏览器的日志?

这是 conf.js 文件中的 log4js 代码

beforeLaunch : function(){
log4js.configure({
        appenders: {
          out: { type: 'console' },
          result: { type: 'dateFile', filename: 'logs/result',"pattern":"-dd.log", alwaysIncludePattern:true}, 
          error: { type: 'dateFile', filename: 'logs/error', "pattern":"-dd.log", alwaysIncludePattern:true}, 
          default: { type: 'dateFile', filename: 'logs/default', "pattern":"-dd.log", alwaysIncludePattern:true}
        },
        categories: {
          default: { appenders: ['out','default'], level: 'info' },
          result: { appenders: ['result'], level: 'info' },
          error: { appenders: ['error'], level: 'error' }
        }
      });
},

onPrepare : function() {
browser.logger = log4js.getLogger('protractorLog4js');
} 

预期的结果是有 2 个文件:default_chrome.log & default_safari.log

// obtain browser name
    browser.getBrowserName = function() {
        return browser.getCapabilities().then((caps) => {
            browser.browserName = caps.get('browserName');
        }
    )}
    // resolve the promised so the browser name is obtained.
    browser.getBrowserName();
    
    log4js.configure({
      appenders: {
        out: { type: 'console' }, 
        default: { type: 'dateFile', filename: 'logs/default_'+ browser.browserName, "pattern":".log", alwaysIncludePattern:true}
      },
      categories: {
        default: { appenders: ['out','default'], level: 'info' }
      }
    });

我也试过这个选项:

var browName = () => {return browser.getCapabilities().then((caps) => {caps.get('browserName');});}

标签: javascriptjasmineprotractorlog4js-node

解决方案


我无法提供现成的答案,因为它需要您在本地进行设置,但我可以为您提供查看方向...

根据https://github.com/angular/protractor/blob/master/lib/config.tsbeforeLaunch每次执行调用一次(所有浏览器一次),而onPrepare为每个浏览器实例调用一次,应该用于配置您的记录器。所以与记录器相关的一切都应该去onPrepare


推荐阅读