我想在量角器测试中输出div的文本,到目前为止我有:
console.log(ptor.findElement(protractor.By.id('view-container')).getText());
但输出
[object Object]
我尝试了“toString()”和相同的结果。
有没有办法将文本输出到控制台?
答案 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)
根据量角器文档,.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;
}
}