tutorial javascript selenium testing promise protractor

javascript - tutorial - protractor wait



Promesas rechazadas en el transportador/WebDriverJS (2)

Eso es lo mejor de las promesas de que recibirás una respuesta, ya sea una respuesta de datos o un mensaje de error. Eso se extendió a una serie de promesas como las que utiliza Webdriver, va a obtener una serie de respuestas o una respuesta de falla de la primera que falla. Cómo manejas la respuesta fallida depende de ti. Por lo general, solo la vuelvo a colocar en un registro de la consola para ver qué falló. Lo único que necesita averiguar es si aborta el resto de sus pruebas o continúa.

Aquí hay un artículo decente sobre el tema también. http://www.toolsqa.com/selenium-webdriver/exception-handling-selenium-webdriver/

Aunque lo que estás haciendo está bien, nunca te tomas la molestia de detectar ninguno de los errores, no estoy seguro si eso te importa o no, también puedes resumir la llamada en una función para manejar automáticamente los errores si quería registrarlos en algún lado.

WebDriverJS y Protractor en sí se basan completamente en el concepto de promesas:

Las API de WebDriverJS (y, por tanto, transportador) son completamente asincrónicas. Todas las funciones devuelven promesas. WebDriverJS mantiene una cola de promesas pendientes, llamada flujo de control, para mantener la ejecución organizada.

Y, según la definición :

Una promesa es un objeto que representa un valor, o el cálculo final de un valor. Cada promesa comienza en un estado pendiente y puede resolverse con éxito con un valor o puede rechazarse para designar un error .

La última parte sobre el rechazo de la promesa es algo que no entiendo completamente y que no he tratado en Transportador. Un patrón común que hemos visto y escrito es utilizar then() y proporcionar una función para una promesa resuelta satisfactoriamente:

element(by.css("#myid")).getAttribute("value").then(function (value) { // do smth with the value });

La pregunta:

¿Es posible que una promesa devuelta por cualquiera de las funciones de Transportador / WebDriverJS no se resuelva con éxito y se rechace? ¿Deberíamos realmente preocuparnos por eso y manejarlo?


Experimenté un caso de uso de rechazo de promesa al usar browser.wait() . Aquí hay un ejemplo:

var EC = protractor.ExpectedConditions; function isElementVisible() { var el = element(by.css(''#myel'')); // return promise return browser.wait(EC.visibilityOf(el), 1000) .then(function success() { return true; // return if promise resolved }, function fail() { return false; // return if promise rejected }); } expect(isElementVisible()).toBe(true); expect(isElementVisible()).toBe(false);

Aquí, si el elemento está en una página, se ejecutará el success , de lo contrario, si no se encuentra cuando pasa 1 segundo, se fail . Mi primer punto es que proporcionar una devolución de llamada para el rechazo brinda la capacidad de ser coherente con lo que uno debería esperar. En este caso, estoy casi seguro de que la promesa siempre se resolverá como true o false , por lo que puedo construir una suite confiando en ella. Si no proporciono una devolución de llamada fail , obtendré una Uncaught exception debido a un tiempo de espera excedido, que aún no superará mi especificación particular y aún ejecutará el resto de las especificaciones. Por cierto, no va a pasar desapercibido, Protractor lo va a atrapar, pero aquí quiero traer un segundo punto, que Transportador se considera una herramienta que se utiliza para escribir y ejecutar su código, y si se toma una excepción por Prolongador , esta excepción ha dejado su código no administrado y su código tiene una fuga. Pero ... al mismo tiempo, no creo que uno deba perder el tiempo para ver todo en pruebas: si no hay ningún elemento en una página o el clic ha fallado, entonces una especificación respectiva obviamente también fallará, lo cual está bien en la mayoría de los casos. A menos que quiera usar el resultado de la falla al construir algún código encima como en mi muestra.