我正在尝试让使用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'));
发布于 2017-03-11 03:16:30
有一个npm包- log4js-protractor-appender,它将解决您的problem.It是专门为基于量角器的环境构建的,它将所有记录器命令放在量角器控制流中,并在记录之前解析量角器承诺。
因为量角器执行控制流中的所有命令,而所有非量角器命令不会按我们喜欢的顺序执行。因此常规日志记录需要我们付出额外努力才能将非量角器命令链接到量角器命令
示例:
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
发布于 2017-03-11 10:46:03
对于expects,您可以使用toBeTruthy或Falsy并在那里包含消息。如果出了什么问题,它会记录下来。页面对象模式告诉你在规范文件中不能有weddriver方法,这意味着你可以创建一个方法来验证某些东西是否存在,然后()记录在那里,就像你的例子一样。你也可以实现asyncLog函数。console.log()方法转到堆栈并在量角器方法之前执行,因为量角器的控制流或托管承诺。它将每个量角器方法包装在不同的promise中,将其放入回调队列中,回调队列仅在stack为空后执行。请看下一段代码。虽然我没有尝试过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'))
https://stackoverflow.com/questions/42725348
复制