如何将量angular器的承诺转换为浮点数

我正在使用量angular器写e2etesting,我想检查页面上的某些值是否正确计算。 这样的事情很简单:

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对象转换为string,以便我可以做出上述的工作?

由于承诺是asynchronous的,你不能将它们转换成具有同步function的浮动。 所以,你需要解决它们。 你可以这样做:

 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)); }); }); }); 

我用以下模式编写我的testing:

 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)); 

这个模式相当简短明了,承诺的所有价值都可以进一步分析。

@jmr:使用Jasmine的Runs / 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 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中find。 注意:这些文档通过webdriver.particularFunction调用的东西通过protractor.particularFunction在protractor.js中调用