promise - tutorial - ¿Qué devuelve el explorador de transportadores. Espera si la condición nunca se cumple?
protractor tutorial (3)
La función de espera rechaza el tiempo de espera. Es decir, devuelve una promesa y cuando se alcanza el tiempo de espera, la rechaza.
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.''));
});
Quiero usar la función browser.wait para verificar repetidamente si un elemento de botón está presente durante un cierto período de tiempo y luego usar la devolución de llamada relevante. A continuación tengo el código que no usa la espera.
detailsButton.isPresent()
.then(function(present){
if(!present) {
callback();
} else {
callback(new Error(''The details button was not present.''));
}
});
Me gustaría un poco de ayuda para arreglar este código, ya que no estoy seguro de cómo la función de espera se ocupa de un falure / timeout. Esencialmente, estoy preguntando qué debería estar en la parte ''.then'' del código siguiente que es menos torpe que lo que tengo actualmente.
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.''));
}
});
});
¡Gracias!
Hay dos formas de hacerlo: Primero, puede usar el tercer argumento de browser.wait en una cadena que se enviará como un mensaje de error. Al igual que:
browser.driver.wait(function(){
return //condition
}, timeout, ''Error message string'')
.then(function(){
callback();
});
O en segundo lugar, utilizando un segundo argumento para el .then como este:
browser.driver.wait(function(){
return //condition
}, timeout)
.then(function(){
callback();
}, function(){
//code to want to execute on failure.
});
Debido a que Protractor brinda la capacidad de escribir operaciones asincrónicas sincrónicas, también es posible manejar el tiempo de espera del navegador. Espere de una manera más sincrónica.
export class AppPage {
public static isLoaded() {
return browser
.wait(until.presenceOf(by.id(''myID'')), 5000)
.then(() => true, () => false);
}
}
Y úsalo en tu e2e.spec de la siguiente manera:
expect(AppPage.isLoaded()).toBeTruthy();