balu
balu

Reputation: 89

Synchronization inside the 'it' Block in protractor

Hi actually i'm facing sync in 'it' block of my code. Following snippet depicts the problem.

 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");
});

Im getting the output like:

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

Please soon let me know the problem and solution for this.

Upvotes: 1

Views: 228

Answers (2)

alecxe
alecxe

Reputation: 473833

To elaborate a little bit more to why @Emna's solution would help:

Protractor is entirely asynchronous and is based on the concept of promises - you cannot expect your code work from top to bottom in a blocking nature. In Protractor, there is that Control Flow mechanism that acts as a queue of WebDriver promises.

To put that into the perspective of your code:

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

Here, everything would be executed from top to bottom, but console.log() calls would be performed right away, since they are synchronous. Calls like myobj.clickOnDownloadBtn(), browser.driver.sleep(5000) and enter.perform() return promises, would not be executed right away but would be put on the Control Flow instead. That's why you see console.log results before any actions are performed on the page.

Related topics:

Upvotes: 2

Emna Ayadi
Emna Ayadi

Reputation: 2460

You have to add then function, like this way :

 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");
    });

});

Upvotes: 2

Related Questions