量angular器控制台日志
我想在量angular器testing中输出一个div的文本,到目前为止我有:
console.log(ptor.findElement(protractor.By.id('view-container')).getText());
但是这个输出
[object Object]
我试过“toString()”和相同的结果。
有没有办法将文本输出到控制台?
getText
和大多数其他的量angular器方法返回承诺。 你想把你的console.log
语句放在promiseparsing中:
使用新的量angular器语法:
element(by.id('view-container')).getText().then(function(text) { console.log(text); });
这是相当古老的,但作为量angular器前n00b,我希望有更多的文件。
你也可以使用:
element(by.id('view-container')).getText().then(console.log);
或者我喜欢为了可读性而做的事情是把所有对象放在一个页面中的自己的函数,部分或文件中:
//top declaration of variables var viewContainer = element(by.id('view-container')).getText(); .... //bunch of code .... viewContainer.then(console.log);
这将会照顾到你大多数花园式的debugging需求。
对于一般的承诺,你可以尝试使用protractor.promise.all()
假设你有两件事都是承诺:
var getTime = element(by.xpath(theTimeXpath)).getText(); var getPageTitle = element(by.xpath(thePageTitle)).getInnerHtml(); protractor.promise.all([getTime, getPageTitle]).then(function(theResultArray){ var timeText = result[0]; var pageTitleInnerHtml = result[1]; console.log(timeText); // outputs the actual text console.log(pageTitleInnerHtml); //outputs the text of the Inner html });
当事情开始变得更复杂时,这第二种方法是有用的。 但是,我个人觉得还有其他的方法。 虽然这并不坏,但对于其他开发人员来说,阅读我的代码还是很有趣的。
我想build议对其他答案做一点改进。
简短的回答 :我喜欢使用browser.sleep(0).then(..);
在那里我需要推动量angular器的stream量。
它是通用的,易于移动。
TL;博士
所以使用上面的,你可以很容易地在浏览器(或ptor)上添加一个function,如:
browser.log = function( logger, level, msg ){ browser.sleep(0).then(function(){ logger[level](msg); }); }
或者更复杂一些的apply
– 但这取决于你的logging器。
你可以明显地提高一点像api一样的logging器
var logger = browser.getLogger('name');
应该像(让我们假设log4js)
browser.getLogger = function( name ){ var logger = require('log4js').getLogger(name); function logMe( level ) { return function(msg ){ browser.sleep(0).then(function(){ logger[level](msg); }); } } return { info : logMe('info'), ... } }
基本上,天空是极限。
我相信有一种方法可以使我的代码更短,重点是使用sleep
方法作为基础。