tutorial locators example español javascript angularjs testing protractor end-to-end

javascript - locators - protractor tutorial español



Protractor browser.wait en realidad no espera (2)

Asumo que browser.wait debe ser una llamada de bloqueo, pero no está funcionando como esperaba. Aquí está mi muestra:

describe("browser.wait", function() { beforeEach(function() { browser.wait(function() { console.log(''1 - BeforeEach WAIT''); return true; }); console.log(''2 - BeforeEach after wait''); }); afterEach(function() { browser.wait(function() { console.log(''4 - afterEach WAIT''); return true; }); console.log(''5 - afterEach after wait''); }); it(''should probably actually wait.'', function() { console.log(''3 - IT statement''); expect(1).toBe(1); });

Ahora, porque asumí que browser.wait en realidad estaba bloqueando, pensé que mis llamadas a console.log se ejecutarían en orden; 1,2,3,4,5;

El resultado real que obtengo es:

2 - BeforeEach after wait 1 - BeforeEach WAIT 3 - IT statement 5 - afterEach after wait 4 - afterEach WAIT

¿Cómo puedo obtener browser.wait para realmente esperar? ¿O estoy usando la función incorrecta por completo? Necesito cosas que bloquear hasta que mi navegador llegue a donde debe estar para la próxima llamada.


La función de espera mantendrá la ejecución para esa función en particular, pero JavaScript funciona de manera asíncrona. Por lo tanto, en algún momento puede haber posibilidades de que su función se ejecute antes de la función de espera. Para entenderlo mejor necesitas leer Promises en angular / transportador.

Para que su código funcione, necesita .then (function () {}); (pidiendo a la función 2 que espere hasta la 1.a conclusión).

browser.wait(function() { console.log(''1 - BeforeEach WAIT''); return true; }).then(function () { console.log(''2 - BeforeEach after wait''); });


Se trata de promesas (en realidad, cada pregunta de transportador se trata de promesas).

browser.wait() no es una llamada de bloqueo, programa un comando para esperar una condición:

Programa un comando para esperar que se cumpla una condición, tal como lo define alguna función suministrada por el usuario. Si se produce algún error al evaluar la espera, se les permitirá propagarse. En caso de que una condición devuelva un webdriver.promise.Promise, el ciclo de sondeo esperará a que se resuelva y usará el valor resuelto para evaluar si la condición se ha cumplido. El tiempo de resolución de una promesa se toma en cuenta para saber si ha agotado el tiempo de espera.

No llamaría inmediatamente a la función que está transfiriendo, programaría un comando y esperaría a que se resolviera la promesa (si la función dentro devuelve una promesa).

Puede usar then() para tener un orden correcto en este caso:

beforeEach(function() { browser.wait(function() { console.log(''1 - BeforeEach WAIT''); return true; }).then(function () { console.log(''2 - BeforeEach after wait''); }); });

Vea los casos de uso aquí: