tutorial promise protractor wait

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