Pregunta

Nota:el uso de la MEDIA Mocha, Express, Angular, y el Nodo de la aplicación

Estoy aprendiendo a hacer e2e prueba y he construido una pequeña aplicación para la prueba en contra.Una cosa que no es siempre que se realice una acción que se muestra un mensaje de X segundos y luego se va.Estoy usando angulars $tiempo de espera.

$scope.displayMessage = function(messageIn, borderColor){

        var timeoutTime = 5000; //clear the message after x seconds
        $scope.borderType = "1px solid " + borderColor;

        $scope.messages = messageIn;

        $scope.visibility = true; //reveal the div
        $timeout.cancel($scope.timeout); //cancel any previous timers

        $scope.timeout = $timeout(function(){ //Set and start new timer.

            $scope.visibility = false;
            $scope.messages = "";
        }, timeoutTime);
    };

Ahora estoy tratando de probar esta.Actualmente tengo

 it("should display message", function(done){

        var button = element(by.id("getStudents"));

        console.log("clicking button");

        var messageElem = element(by.binding("messages"));

        button.click().then(function () {

            console.log("button clicked");

            messageElem.getText().then(function(text){

               console.log("The text should equal: " + text);
            });

            //expect(messageElem.getText()).toBe("Students retrieved");
            console.log("test executed");

        });

        done();
    });

Pero parece ser que la espera hasta después de que el tiempo de espera para hacer el messageElem.getText().then() al punto que el div se ha borrado.La "prueba de la ejecutada" registro de impresión durante el tiempo de espera, pero no la "getText()" función.Supongo que esto tiene algo que ver con angulars ciclo de vida?

Ah, y aquí está el código HTML (en Jade formato)

 div(ng-model="messages",ng-show = "visibility", style = "clear:both;padding-top:3em;border:{{borderType}};text-align:center;")

    h3
        {{messages}}

ignorar mi estilo, yo era demasiado perezoso para hacer un archivo css para esta aplicación de prueba :D

¿Fue útil?

Solución

Intente usar $ intervalo en lugar de $ TIMEOUT.

Los intentos de protractor de esperar hasta que la página esté completamente cargada antes realizando cualquier acción (como encontrar un elemento o enviar un comando a un elemento).

Leer aquí .Detalles aquí .

Otros consejos

HABLICADO ABAJO ABAJO ESTE UTILIZADO EL BLOQUE DE CÓDIGO DEBE ABAJO.Tuve una barra de notificación de un paquete de nodos de terceros (NG-Notifications-Bar) que usó $ TIMEOUT en lugar de $ Intervalo, pero necesitaba esperar que el texto de error fuera cierto valor.Coloqué un sueño corto () para permitir que aparezca la animación de la barra de notificación, cambió la ignoresncronización a verdadera para que el transportador no espere a que termine los $ TIMEOUT, configure mi espera () y cambió la ignoresyncronización de nuevo a FALSE SO PROTRATORContinuar la prueba dentro de la cadencia regular de Angularjs.Sé que las duermen no son ideales, pero son muy cortas.

browser.sleep(500);
browser.ignoreSynchronization = true;
expect(page.notification.getText()).toContain('The card was declined.');
browser.sleep(500);
browser.ignoreSynchronization = false;

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top