2013-11-26 26 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中調用