2016-05-24 8 views
1

こんにちは、実際には私のコードの 'それ'ブロックの同期に直面しています。次のスニペットは問題を示しています。分度器の 'it'ブロック内の同期

のような出力になっ
it('Some Download Operation',function() 
{ 
    console.log("before"); 
    myobj.clickOnDownloadBtn(); 
    console.log("after download click"); 
    browser.driver.sleep(5000); 
    var enter = browser.actions().sendKeys(protractor.Key.ENTER); 
    enter.perform(); 
    console.log("after enter btn"); 
}); 

イム:

before 
after download click 
after enter btn 
//Then the click on PO Object's 'myobj.clickOnDownloadBtn()' operation. 

はすぐに私は、このための問題と解決策を教えてください。

+0

なぜあなたはsetTimeoutメソッドを使用していませんか? –

+0

は働いていません@AmitSoni – balu

答えて

2

あなたがこの方法のように、その関数を追加する必要があります。

it('Some Download Operation',function() 
{ 

    myobj.clickOnDownloadBtn().then (function() { 
    console.log("after enter btn"); 
    console.log("after download click"); 
    }); 

    browser.driver.sleep(5000); 
    var enter = browser.actions().sendKeys(protractor.Key.ENTER); 
    enter.perform().then (function() { 
    console.log("after enter btn"); 
    }); 

}); 
+1

いい仕事です! Btwは、 "なぜ"これが別の答えで機能するかを少し増やしました。 – alecxe

+0

あなたの励ましのおかげでalecxe;)私たちはあなたの例から学んでいる;) – Emna

+1

おかげalecxeとEmna :) – balu

2

をEmnaのソリューションは役立つだろう@理由にもう少し詳しく説明するには:

分度器は完全に非同期であるとに基づいています約束のコンセプト - ブロックする性質上、上から下へのコードの動作を期待することはできません。分度器では、WebDriver約束ののキューとして機能するControl Flowメカニズムがあります。あなたのコードの視点にそれを置くために

ここ
console.log("before"); 
myobj.clickOnDownloadBtn(); 
console.log("after download click"); 
browser.driver.sleep(5000); 
var enter = browser.actions().sendKeys(protractor.Key.ENTER); 
enter.perform(); 
console.log("after enter btn"); 

、すべてが上から下に実行されますが、彼らは同期しているので、console.log()呼び出しは、すぐに実行されるであろう。 myobj.clickOnDownloadBtn(),browser.driver.sleep(5000)およびenter.perform()の返品はすぐには実行されず、代わりにコントロールフローに置かれます。そのため、ページ上で何らかの操作が実行される前に、console.logの結果が表示されます。

関連トピック:

+0

Thanks for explanation @alecxe – balu