如何将量角器中的承诺转换为浮点型
问题描述:
我正在使用量角器编写e2e测试,我想检查页面上的某些值是否正确计算。这样的事很简单:如何将量角器中的承诺转换为浮点型
var var1 = element(by.binding('var1'));
var var2 = element(by.binding('var2'));
var var3 = element(by.binding('var3'));
expect(parseFloat(var1.getText())).toEqual(parseFloat(var2.getText()) +
parseFloat(var2.getText()));
但是,因为var1,var2和var3都是承诺,所以这是行不通的。
有没有办法将承诺对象转换为字符串,以便我可以进行上述工作?
答
由于promise是异步的,因此不能将它们转换为具有同步函数的float。所以,你需要解决它们。你可以这样做,如:
element(by.binding('var1').getText().then(function(text1) {
element(by.binding('var2').getText().then(function (text2) {
element(by.binding('var3').getText().then(function (text3) {
expect(parseFloat(text1)).toEqual(parseFloat(text2) + parseFloat(text3));
});
});
});
答
@jmr:怎么样利用茉莉拉肚子/ WaitsFor机制?在我看来,是多一点的标准:
var var1, var2, var2 = null;
runs(function() {
element(by.binding('var1')).getText().then(function(value) { var1 = value; });
element(by.binding('var2')).getText().then(function(value) { var2 = value; });
element(by.binding('var3')).getText().then(function(value) { var3 = value; });
});
waitsFor(function(){
return var1 !== null && var2 !== null && var3 !== null;
}, 'The values were not filled', 750);
runs(function() {
expect(parseFloat(var1.getText())).
toEqual(parseFloat(var2.getText()) + parseFloat(var2.getText()));
});
答
我写我的测试具有以下模式:
var data = {};
element(by.binding('var1')).getText().then(function(value) { data.var1text = value; });
element(by.binding('var2')).getText().then(function(value) { data.var2text = value; });
element(by.binding('var3')).getText().then(function(value) { data.var3text = value; });
expect(parseFloat(data.var1text)).toEqual(parseFloat(data.var2text) + parseFloat(data.var3text));
该模式非常简短明了,所有来自承诺的值都可用于进一步分析。
+1
如果.getText()需要一段时间(尝试调用例如.click()),则expect()函数将接收空值。所以它是一个坏榜样。 –
答
var var1 = element(by.binding('var1'));
var var2 = element(by.binding('var2'));
var var3 = element(by.binding('var3'));
var promises = [
var1.getText(),
var2.getText(),
var3.getText()
];
protractor.promise.all(promises).then(function(results) {
expect(parseFloat(results[0]))
.toEqual(parseFloat(results[1]) + parseFloat(results[2]));
}
发现在Selenium API。注意:这些文档通过webdriver.particularFunction
调用的任何内容均通过protractor.particularFunction
在protractor.js中调用
看起来不错。有人试过吗? – ErichBSchulz
@ ErichBShulz - 你试过了吗?它有用吗? – Brad8118