量角器控制台日志

时间:2013-11-12 23:00:54

标签: angularjs protractor

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

console.log(ptor.findElement(protractor.By.id('view-container')).getText());

但输出

[object Object]

我尝试了“toString()”和相同的结果。

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

7 个答案:

答案 0 :(得分:102)

getText和大多数其他Protractor方法都会返回承诺。您希望将console.log语句放在promise promise中:

使用新的Protractor语法:

element(by.id('view-container')).getText().then(function(text) {
  console.log(text);
});

答案 1 :(得分:33)

这是相当古老的,但作为量角器的前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);

这将满足您的大多数花园调试需求。

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

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

答案 2 :(得分:5)

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

简短回答:我喜欢使用browser.sleep(0).then(..);我需要将某些东西推向量角器的流程。

它是通用的,易于移动。

<强> TL;博士

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

browser.log = function( logger, level, msg ){
     browser.sleep(0).then(function(){ logger[level](msg); });
}

apply更复杂的东西 - 但这取决于您的记录器。

你可以明显增强一点像伐木工具这样的记录器

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方法作为基础。

答案 3 :(得分:2)

你总是可以断言你得到的文字是你期望的文字:

expect(element(by.id('view-container')).getText()).toBe('desired-text');

答案 4 :(得分:1)

如果你在 2021 年,你会想阅读这个答案

根据量角器文档,.getText() 返回一个承诺。 Promise 是一个 Object 是 javascript。这就是您要记录的内容。

你需要通过解决它来从承诺中获取价值

到 2021 年,处理承诺的最佳方式是使用 async/await 关键字。这将使量角器“冻结”并等待,直到在运行下一个命令之前解决承诺

it('test case 1', async () => {
  let text = await ptor.findElement(protractor.By.id('view-container')).getText();
  console.log(text);
  // or directly
  console.log(await ptor.findElement(protractor.By.id('view-container')).getText(););
})
也可以使用

.then(),但使用 async/await 将使您的代码更具可读性和更易于调试。

答案 5 :(得分:0)

您可以尝试以下一种方法:

const textInfo = element(by.id('view-container'));
console.log('text: ', textInfo.getText());

答案 6 :(得分:0)

当用户想要将预期和实际结果记录在量角器中时,请始终使用方法实现。

verifyDisplayedText(locator: Locator, expectedText: string) {
const text = this.getText(locator);
try {
text.then(function(value){
if (value.trim() === expectedText) {
verifyLog("VERIFICATION: PASSED. Expected: '" + expectedText + "' Actual: '" + value+"'");
} else {
errorLog("VERIFICATION: FAILED. Expected: '" + expectedText + "' Actual: '" + value+"'");
}
});
expect(text).toBe(expectedText);
}catch (error1) {
errorLog("VERIFICATION: FAILED. Expected: '" + expectedText + "' Actual: '" + text+"'");
throw error1;
}
}