2013-11-26 31 views
5

我正在使用量角器编写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都是承诺,所以这是行不通的。

有没有办法将承诺对象转换为字符串,以便我可以进行上述工作?

回答

8

由于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)); 
    }); 
    }); 
}); 
0

@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())); 
}); 
+0

看起来不错。有人试过吗? – ErichBSchulz

+0

@ ErichBShulz - 你试过了吗?它有用吗? – Brad8118

1

我写我的测试具有以下模式:

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()函数将接收空值。所以它是一个坏榜样。 –

0
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中调用