resultados quiniela quini nacional loto juega hoy como buscando javascript angularjs testing selenium-webdriver protractor

javascript - quiniela - ¿Cómo tener resultados confiables del transportador?



loto nacional (4)

Cada vez que tengo problemas similares, estoy usando browser.wait() con "Condiciones Esperadas" ( introducido en el transportador 1.7 ). Existe un conjunto de condiciones esperadas incorporadas que, por lo general, es suficiente, pero puede definir fácilmente las condiciones esperadas personalizadas.

Por ejemplo, esperando que un elemento se vuelva visible :

var EC = protractor.ExpectedConditions; var e = element(by.id(''xyz'')); browser.wait(EC.visibilityOf(e), 10000); expect(e.isDisplayed()).toBeTruthy();

Algunas notas:

  • puede especificar un mensaje de error personalizado en caso de que las condiciones no se cumplan y se produzca un error de tiempo de espera, consulte el mensaje personalizado en el error de espera de tiempo de espera :

    browser.wait(EC.visibilityOf(e), 10000, "Element ''xyz'' has not become visible");

  • puede configurar EC para que sea una variable disponible en todo el mundo que apunte a protractor.ExpectedConditions . Agregue esta línea a onPrepare() en su configuración:

    onPrepare: function () { global.EC = protractor.ExpectedConditions; }

  • como ejemplo de una condición esperada personalizada, vea esta respuesta

Estoy usando Protractor (v 1.3.1) para ejecutar pruebas E2E para mi aplicación Angular 1.2.26.

Pero a veces, las pruebas están bien, a veces no. Parece que a veces la comprobación se realiza antes de que se actualice la pantalla (o algo así como un problema de "sincronización"). Intento muchas opciones:

  • agregar instrucciones de browser.driver.sleep ,
  • desactivar efectos con browser.executeScript(''$.fx.off = true'')
  • agregar las instrucciones de browser.waitForAngular()

sin éxito.

¿Cuáles son las mejores prácticas para tener pruebas fiables de E2E con transportador?

JM.


Hay dos cosas a considerar.

La primera es que debe secuenciar adecuadamente todas las acciones del transportador (como también lo insinuó @ jmcollin92). Para esto, normalmente utilizo .then en cada paso.

La segunda cosa importante es asegurarse de que una nueva prueba it(...) solo comience después de que la anterior it(...) haya completado.

Si usa la última versión de Protractor, puede usar Jasmine 2.x y su compatibilidad para indicar que se ha completado una prueba:

it(''should do something'', function(done) { clicksomething().then(function() { expect(...); done(); }); });

Aquí se invoca el argumento done para indicar que la prueba está lista. Sin esto, clicksomething programará el comando clicksomething y luego continuará inmediatamente con la siguiente prueba, volviendo a la prueba actual solo una vez que se haya completado un clicksomething .

Como normalmente ambas pruebas inspeccionan y posiblemente modifiquen el mismo navegador / página, sus pruebas se vuelven impredecibles si las deja pasar simultáneamente (una prueba hace clic en la página siguiente, mientras que otra sigue inspeccionando la página anterior).

Si utiliza una versión anterior de Transportador (1.3 como usted indica), el Jazmín 1.3 se runs y waitsFor funciones se puedan usar para simular este comportamiento.

Tenga en cuenta que el objetivo de usar un transportador es que se supone que el transportador debe saber cuándo finaliza Angular. Por lo tanto, en principio, no debería haber ninguna necesidad de llamar a waitForAngular (mi propio conjunto de pruebas con docenas de escenarios no incluye un solo wait / waitForAngular). Cuanto mejor se WaitForAngular su aplicación bajo prueba a los principios de diseño de Angular, menos WaitForAngular necesitará.