使用量角器方便地记录

时间:2017-03-10 18:27:24

标签: selenium selenium-webdriver protractor

我正在尝试使用量角器编写selenium测试的开发人员更容易记录日志。

我正在查看selenium-webdriver/lib/logging,并试图找出如何建立一个方便的日志记录系统。

以下是一个示例规范:

it('should NOT show welcome before login', () => {
  // convenient log here
  expect(homepage.logo.isPresent()).toBe(true);
  // log message that would occur after expect 
  expect(homepage.welcomeText.isPresent()).toBe(false);
  // final log message
});

我不太清楚如何解决这个问题。

我正在努力避免为每条日志消息做(下面)。

homepage.welcomeText.isPresent().then(() => console.log('foo bar'));

2 个答案:

答案 0 :(得分:1)

有一个npm包 - log4js-protractor-appender可以解决你的问题。它是专门为基于Protractor的环境构建的,它将所有logger命令放在Protractor Control流程中,并在记录之前解析Protractor的承诺。

由于Protractor执行控制流中的所有命令,并且所有非量角器命令都不按我们喜欢的顺序执行。因此,定期记录需要我们额外的努力才能将非量角器命令链接到量角器命令

示例:

browser.getCurrentUrl().then(function _logValue(url){
  logger.info("The url is" + url);
});

但是log4js-protractor-appender能够直接写出类似的内容 - browser.logger.info('Displayed text is:', browser.getCurrentUrl());

有关如何实施此操作的详细信息 - 请查看我的博客文章 - How to implements logs for Protractor/JavaScript based Test Automation Frameworks

答案 1 :(得分:1)

对于期望您可以使用toBeTruthy或Falsy并在那里包含消息。如果出现问题,它会记录。页面对象模式表示你不能在spec文件中使用weddriver方法,这意味着你可以创建一个方法来验证存在或不存在的东西,然后()在你的例子中记录那里。您还可以实现asyncLog功能。 console.log()方法转到Stack并在量角器的方法之前执行,因为量角器的控制流或托管的Promise。它将每个量角器方法包装在deffered promise中,将其置于回调队列中,该队列仅在堆栈为空后执行。看看下一个代码。我没有尝试过Protractor,但你可以得到这个想法。

var promise = Promise.resolve();

function asyncLog(message) {
    Promise.resolve().then(() => console.log(message));
}

console.log('Start');

promise
.then(() => console.log('This is then'))

asyncLog('This is Callback Queue log');

console.log('This is Call Stack log');

promise
.then(() => console.log('This is another then'))