量角器控制台日志

bmw*_*128 51 angularjs protractor

我想在量角器测试中输出div的文本,到目前为止我有:

console.log(ptor.findElement(protractor.By.id('view-container')).getText());
Run Code Online (Sandbox Code Playgroud)

但是这个输出

[object Object]
Run Code Online (Sandbox Code Playgroud)

我尝试了"toString()"和相同的结果.

有没有办法将文本输出到控制台?

Jmr*_*Jmr 107

getText而且大多数其他的Protractor方法都会返回承诺.您希望将您的console.log陈述置于承诺解决方案中:

使用新的Protractor语法:

element(by.id('view-container')).getText().then(function(text) {
  console.log(text);
});
Run Code Online (Sandbox Code Playgroud)

  • 如何将它包装在(同步)页面对象中? (4认同)

Zac*_*ick 33

这是相当古老的,但作为量角器的前n00b,我希望有更多的文档.

你也可以用:

element(by.id('view-container')).getText().then(console.log);
Run Code Online (Sandbox Code Playgroud)

或者我喜欢做的可读性是将页面上的所有对象放在他们自己的函数,部分或文件中:

//top declaration of variables
var viewContainer = element(by.id('view-container')).getText();

.... //bunch of code
....

viewContainer.then(console.log);
Run Code Online (Sandbox Code Playgroud)

这将满足您的大部分花园调试需求.

对于一般的承诺,您可以尝试使用 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
});
Run Code Online (Sandbox Code Playgroud)

当事情开始变得更复杂时,第二种方法很有用.但就个人而言,我发现了其他方法.虽然它并不坏,但对于其他需要阅读我的代码的开发人员来说,它有点时髦.


guy*_*abi 6

我想建议对其他答案做一点改进.

简短的回答:我喜欢用browser.sleep(0).then(..);我需要的东西推动量子器的流程.

它是通用的,易于移动.

TL;博士

所以使用上面的内容,你可以轻松地在浏览器(或ptor)上添加一个功能:

browser.log = function( logger, level, msg ){
     browser.sleep(0).then(function(){ logger[level](msg); });
}
Run Code Online (Sandbox Code Playgroud)

或者更复杂的东西apply- 但这取决于你的记录器.

你可以明显增强一点像记录器像api

var logger = browser.getLogger('name');
Run Code Online (Sandbox Code Playgroud)

应该实现像(假设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'), ... }
}
Run Code Online (Sandbox Code Playgroud)

基本上,天空是极限.

我确信有一种方法可以使我的代码更短,关键是使用该sleep方法作为基础.

  • 这完全是作弊.为什么不使用实际功能将其置于控制流程中?`browser.controlFlow().execute(function(){...});` (2认同)