Cómo hacer solicitud HTTP GET + POST en Protractor

Me enfrento a un problema para enviar solicitud HTTP obtener en Protractor. En realidad, necesito verificar los datos en la base de datos después de realizar alguna acción en la interfaz de usuario.

Será muy útil si puedo hacerlo usando JQuery, pero no puedo encontrar una forma de usar JQuery dentro de Protractor.

Necesitas ayuda !!

En realidad, intentamos usar la biblioteca Node.js como se muestra a continuación, pero enfrentamos problemas en ella.

var http = require('http'); var json_data; http.get('SiteUrl', function(response) { var bodyString = ''; response.setEncoding('utf8'); response.on("data", function(chunk) { bodyString += chunk; }); response.on('end', function() { json_data = bodyString; console.log("1---->" + json_data); }); }).on('error', function(e) { console.log("There is an error in GET request"); }); console.log("2---->" + json_data); 

Después de la depuración, hemos encontrado que el problema es que el transportador no está esperando a que se complete la solicitud HTTP y simplemente se pase. Estamos obteniendo 2----> primero en la consola y luego 1----> .

No puede acceder a jQuery (es la parte frontal) desde el transportador, porque una serie de pruebas de Protractor es solo una secuencia de comandos NodeJS (es la parte posterior). Por lo tanto, puede utilizar la API HTTP de NodeJS (u otra biblioteca de solicitud).

Compruebe este ejemplo: http://squirrel.pl/blog/2014/01/15/direct-server-http-calls-in-protractor/

También utilizo el módulo http (para diferentes propósitos, para reinicializar la base de datos).

Para hacer que el transportador espere a que termine la solicitud, use promesas

 var http = require('http'); var json_data; http.get('SiteUrl', function(response) { var bodyString = ''; response.setEncoding('utf8'); response.on("data", function(chunk) { bodyString += chunk; }); response.on('end', function() { json_data = bodyString; console.log("1---->"+json_data); // All the processing and Angular code should be here console.log("2---->"+json_data); }); }).on('error', function(e) { console.log("There is an error in GET request"); }); 

Si no le gusta poner todo el procesamiento de datos en la callback de response.on (‘end’) , entonces haga de la callback una función separada.

Además, debo decir que el transportador no está diseñado para verificar la base de datos directamente. Es para pruebas de extremo a extremo. Debería crear un escenario complejo que escriba algunos datos en una de las páginas, vaya a otra página y espere que los datos se actualicen.

Funcionó para mí:

 var request = require('request'); var options = { method: 'POST', url: 'http://testurl.com/endpoint/test/', headers: {'id': 'ABCD', 'sessionid': 'dummyId', 'Accept': 'application/json', 'Accept-Language': 'en-us' }, body: '{ "pay_load": [] }' }; function callback(error, response, body) { if (!error && response.statusCode == 200) { var info = JSON.parse(body); console.log(body); console.log(info); } } request(options, callback); 

Creo que no es la respuesta correcta que estás buscando. No has mencionado ese nombre de db.

Estoy utilizando http://frisbyjs.com/ para obtener documentos de couchdb (base de datos de documentos) en mi proyecto de transportador y cumple muy bien mi propósito.

Publiqué la misma pregunta en la página de problema de Protractor git, pero no pudieron responder mi pregunta; Entonces, encontré una alternativa para esto. Rompí mi caso de prueba en 2 casos de prueba. En 1er, solo hice clic en el botón y en 2do pude obtener json y realizar la validación en él.

¿Qué pasa con algo como esto?

http://eitanp461.blogspot.com.ar/2014/01/advanced-protractor-features.html

Esta publicación propone reutilizar un módulo AngularJS ya existente para insertar datos en la base de datos utilizando la función addMockModule.

Esto podría modificarse para inyectar un nuevo módulo AngularJS como simulacro con todas las funciones que desea, como verificar cosas, datos inseetrando, etc. Como se trata de un módulo / servicio angular, debe utilizar el módulo http de AngularJS, por lo que el Transportador sabrá cómo manejarlo

Desventajas? Bueno, esto probablemente necesite un contexto AngularJS para ejecutarse, no sé si funcionará en aplicaciones no angulares (o secciones de él, como un inicio de sesión no agular).

¿Pensamientos?