【问题标题】:How to handle logging in cross-browser testing in Protractor?如何在量角器中处理跨浏览器测试的日志记录?
【发布时间】:2020-10-24 07:54:15
【问题描述】:

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

Q:如何使用前面提到的技术创建两个单独的日志文件,其中一个只包含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');});}

【问题讨论】:

    标签: javascript jasmine protractor log4js-node


    【解决方案1】:

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

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

    【讨论】:

    • 如果没有帮助,请告诉我,我会尝试在本地配置此记录器
    • 感谢您的回复。我将所有日志配置文件都放到了onPrepare,但我想我在获取浏览器名称时遇到了问题(=> 未定义)。如果您能编写 conf 文件的一小部分,我将非常感激。我更新了问题的最后一部分
    • @OrozbekAskarov 改用browser.getProcessedConfig()。从.getCapabilities() 返回的对象不是您认为的格式。像这样的东西应该可以工作:return browser.getProcessedConfig().then(conf => conf.capabilities.browserName)
    猜你喜欢
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    相关资源
    最近更新 更多