我在Protractor中发送HTTP get请求时遇到问题。实际上,我需要在UI中执行某些操作后检查数据库中的数据。
如果我能够使用JQuery完成它将会非常有用,但是我无法找到如何在Protractor中使用JQuery的方法。
需要帮助!!
实际上,我们确实尝试使用Node.js lib,如下所示,但面临问题。
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);
调试之后,我们发现问题是Protractor没有等待HTTP请求完成而只是传递。我们首先在控制台中获取2---->
,然后1---->
。
答案 0 :(得分:3)
你无法从量角器访问jQuery(它的前端端),因为Protractor测试套件只是一个NodeJS脚本(它的后端端)。 因此,您可以使用NodeJS HTTP API(或其他请求库)。
选中此示例:http://squirrel.pl/blog/2014/01/15/direct-server-http-calls-in-protractor/
答案 1 :(得分:3)
我还使用 http 模块(用于不同目的,用于重新初始化数据库)。
要使量角器等待结束请求,请使用promises
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");
});
如果您不想将所有数据处理放入 response.on(' end')回调中,请将回调设为单独的功能。
此外,我不得不说Protractor不能用于直接检查数据库。它适用于端到端测试。您应该更好地构建一个复杂的场景,在一个页面上写入一些数据,转到另一个页面并期望数据更新。
答案 2 :(得分:2)
它对我有用:
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);
答案 3 :(得分:0)
我认为这不是您正在寻找的正确答案。你没有提到那个数据库名称。
我正在使用http://frisbyjs.com/从我的量角器项目中的couchdb(文档数据库)获取文档,它很好地实现了我的目的。
答案 4 :(得分:0)
我在Protractor git问题页面上发布了同样的问题,但他们无法回复我的问题;所以,我找到了另一种选择。我将测试用例分成2个测试用例。在第一个,我只是点击了按钮,在第二个我能够获取json并对其进行验证。
答案 5 :(得分:-1)
这样的事情怎么样?
http://eitanp461.blogspot.com.ar/2014/01/advanced-protractor-features.html
这篇文章建议重用已经存在的AngularJS模块,使用addMockModule函数将数据插入到数据库中。
这可以修改为注入一个新的AngularJS moudule作为模拟,具有你想要的所有功能,如检查内容,内容数据等。 由于这是一个角度模块/服务,它应该使用AngularJS http模块,因此Protractor将知道如何处理它。
缺点?那么这可能需要一个AngularJS上下文来运行,不知道它是否适用于非角度应用程序(或其中的部分,如非agular登录)。
思想?