2015-06-17 20 views
5

Belirli bir süre için bir düğme öğesinin mevcut olup olmadığını tekrar tekrar kontrol etmek için browser.wait işlevini kullanmak istiyorum, ardından ilgili geri bildirimi kullanın. Aşağıda beklemeyi kullanmayan kodum var.Durum hiçbir zaman doğru olmazsa İletici browser.wait ne döndürür?

detailsButton.isPresent() 
    .then(function(present){ 
     if(!present) { 
      callback(); 
     } else { 
      callback(new Error('The details button was not present.')); 
     } 
    }); 

Ben emin değilim gibi bu kod sabitleme yardım ister nasıl bir falure/zaman aşımı ile bekleme fonksiyonu fırsatlar. Ediyorum Esasen şu anda sahip olduğum şu kodun '.then' kısmında ne olması gerektiğini soruyorum.

browser.driver.wait(function(){ 
    return pgTransactionHistory.transactionHistoryDetails.isPresent(); 
}, 60000).then(function(){ 
    pgTransactionHistory.transactionHistoryDetails.isPresent() 
     .then(function(present){ 
      if(!present) { 
       callback(); 
      } else { 
       callback(new Error('The details button was not present.')); 
      } 
     }); 
}); 

Teşekkür ederiz!

cevap

9

Bunu yapmanın iki yolu vardır. böylece gibi:

browser.driver.wait(function(){ 
    return //condition 
}, timeout, 'Error message string') 
    .then(function(){ 
     callback(); 
    }); 

Ya ikincisi böyle .sonra için ikinci argümanı kullanarak:

browser.driver.wait(function(){ 
    return //condition 
}, timeout) 
    .then(function(){ 
     callback(); 
    }, function(){ 
     //code to want to execute on failure. 
    }); 
+0

İletki neden sadece hatayı reddetmiyor ve sadece .catch işleyicisinde yer alsın? – Abdel

1

Bekleme işlevi zaman aşımını reddeder. Yani - bir söz verir ve zaman aşımına ulaşıldığında onu reddeder. Önce bir hata mesajı olarak gönderilecek bir dizeye browser.wait üçüncü argüman kullanabilirsiniz:

browser.driver.wait(function(){ 
    return pgTransactionHistory.transactionHistoryDetails.isPresent(); 
}, 60000).then(function(){ 
    callback(); // instead of doing this, you should return a promise 
}).catch(function(){ 
    callback(new Error('The details button was not present.')); 
}); 
+0

Teşekkür! Bazı nedenlerden dolayı .catch() eklenmesi bir hataya neden olur: "undefined bir işlev değildir." Yakalamadan ayrıldığımda aksaklık olmadan çalışır, ayrıca hiçbir şey 'yakalanamaz'. – JasoonS

+0

Tamam, işte nasıl çalıştığını, bir hata iletisi olarak kullanılacak bir dize olan browser.wait üçüncü parametresini kullanmaktır. Dokümanları daha dikkatli okumam gerekiyor gibi görünüyor ... Eminim neden yakalanmıyorsa çalışmıyor. – JasoonS

1

Açıölçer senkron asenkron işlemleri yazma yeteneği kazandırır için, tarayıcı işlemek için de mümkündür. zaman aşımını daha senkron bir şekilde bekleyin.

export class AppPage { 

    public static isLoaded() { 
    return browser 
    .wait(until.presenceOf(by.id('myID')), 5000) 
    .then(() => true,() => false); 
    } 
} 

aşağıdaki gibi Ve e2e.spec kullanmak: cevap için

expect(AppPage.isLoaded()).toBeTruthy(); 
+0

Bu çalışırken, kaputun altında "bekle" nin ne yaptığını ve bunun iş parçacığını engelleyip engellemeyeceğini merak ediyorum. – Abdel

İlgili konular