6

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

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

4

4 回答 4

8

由于 Promise 是异步的,因此您不能将它们转换为具有同步函数的浮点数。所以,你需要解决它们。你可以这样做:

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));
    });
  });
});
于 2013-11-27T22:21:31.083 回答
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));

该模式相当简洁明了,promise 中的所有值都可用于进一步分析。

于 2014-07-04T20:02:00.960 回答
0

@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()));
}); 
于 2014-03-20T13:29:26.720 回答
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.particularFunctionprotractor.particularFunction在 protractor.js中调用

于 2015-07-27T18:35:21.963 回答