2017-06-13 5 views
4

次のJSコードを分度器で書いています。ここでは、テストケースのデータを読み込むためにdata.jsonファイルを使用しました。このテストケースでは、このJSONから項目を読み込み、ブラウザから読み込んでいる値と比較しています。変数が正しくインクリメントされていません

私がここで直面している問題は、JSONファイルの値が正しくないというExpectステートメントにあります。

ここで問題の特定にご協力ください。以下

var datafile = require('./Data.json') 

    beforeEach(() => { 
     browser.get("https://angularjs.org"); 
    }); 

    describe('Test Angular Page ',() => 
    { 

     it('user name should be displayed correctly #try',() =>  
     { 

      var count = datafile.length; 

      for (var i=0; i<count; i++) 
       { 
       var value = datafile[i];    
       browser.refresh(); 
       element(by.model('yourName')).sendKeys(value); 
       (element(by.binding('yourName'))).getText() 
         .then(function (txt) 
           {                   
          expect(txt).toEqual('Hello '+ value+'!'); 
          //this is failing        
}) 

     }  
     }); 

以下

[ 
    "A1","A2","A3" 
    ] 

私data.jsonあるresult-

1) Test Angular Page user name should be displayed correctly #try 
    Message: 
    Expected 'Hello A1!' to equal 'Hello A3!'. 
    Stack: 
     Error: Failed expectation 
     at D:\Demo_Protractor\test.spec.js:24:44 
     at elementArrayFinder_.then (C:\User s\leenasharma\AppData\Roaming\npm\node_modules\protractor\lib\element.ts:840:22) 
    at ManagedPromise.invokeCallback_ (C:\Users\leenasharma\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:1366:14) 
    at TaskQueue.execute_ (C:\Users\leenasharma\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2970:14) 
    at TaskQueue.executeNext_ (C:\Users\leenasharma\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2953:27) 
    at asyncRun (C:\Users\leenasharma\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2813:27) 
    at C:\Users\leenasharma\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:676:7 
    at process._tickCallback (internal/process/next_tick.js:109:7) 
    Message: 
     Expected 'Hello A2!' to equal 'Hello A3!'. 
     Stack: 
     Error: Failed expectation 
+0

を見つけることができます(https://stackoverflow.com/を[実施例5]を見てみましょうa/111111/4472840) –

答えて

1
it('user name should be displayed correctly #try',() => { 
    var count = datafile.length; 
    var value, i; 
    for (i = 0; i < count; i++) { 
    value = datafile[i]; 
    browser.refresh(); 
    element(by.model('yourName')).sendKeys(value); 
    (element(by.binding('yourName'))).getText() 
     .then(function(txt) { 
     expect(txt).toEqual('Hello ' + value + '!'); 
     //this is failing        
     }) 
    } 
}); 

varの一部のみが機能レベルの範囲を有している、いかなるブロックレベルが存在しません範囲。 forループ内にvar valueを追加しても、繰り返しごとに変数は作成されません。それは可変ホイストでfuctionの上に吊り上げられます。あなたのgetText()は非同期です。thenがループ終了と呼ばれ、valueが最後の繰り返しで割り当てられた値になります。 A3

解決策としてはvarの代わりにes6 letを使用してvalueを宣言することができます。 letはブロックレベルのスコープを与えます。

it('user name should be displayed correctly #try',() => { 
    var count = datafile.length; 
    for (let i = 0; i < count; i++) { 
    let value = datafile[i]; 
    browser.refresh(); 
    element(by.model('yourName')).sendKeys(value); 
    (element(by.binding('yourName'))).getText() 
     .then(function(txt) { 
     expect(txt).toEqual('Hello ' + value + '!'); 
     //this is failing        
     }) 
    } 
}); 

言われていること、分度器/ジャスミンのdoesntの最新バージョンが必要getText()thenと、このように処理しました。角度、ジャスミン、分度器のどのバージョンを使用していますか?

expect()はパラメータが約束ですかないと は、それに基づいて非同期または同期を実行するかどうかを決定します。

なぜあなたは各繰り返しでbrowser.refresh()をやっていますか?その意図は私には分かりません。

+0

ありがとうございました。出来た。 – Pheonix68410

+0

についてはbrowser.refresh、毎回新しいページでこのテストケースを実行しようとしました。私も明確な機能を使用することができた。実験と学習。 Steveが下の彼の答えで与えた解決策も働いています。今私は両方を関連づけようとしています。再度、感謝します! – Pheonix68410

1

問題は、非同期で実行される約束の値をチェックしていることです。

(そう期待して、あなたのコードをリファクタリング)はあなたのための約束を解決します

expect(element(by.binding('yourName'))).getText())).toEqual('Hello '+ value+'!'); 

詳しい情報はon the protractor documentation

+0

ありがとうSteve!上記のように – Pheonix68410

+0

、私は変数のスコープの問題が期待通りにどのように解決されたかを理解しようとしています。 JSのこれらの非同期の概念を理解するための良い参考文献はありますか? – Pheonix68410

関連する問題