2013-11-26 9 views
5

分度器を使ってe2eテストを書いていますが、ページ上のいくつかの値が正しく計算されているかどうか確認したいと思います。このような非常に単純なもの:VAR1、VAR2とVAR3は、すべての約束があるので分度器の約束を浮動小数点に変換する方法

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

しかし、これは動作しません。

私は上記の仕事をすることができますように約束オブジェクトを文字列に変換する方法はありますか?

答えて

8

プロミスは非同期なので、同期関数を持つフロートに変換することはできません。だから、あなたはそれらを解決する必要があります。あなたは、このような操作を行うことができます:

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 via protractor.js

関連する問題