You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Protractor中发起HTTP GET调用无响应且无报错如何解决?

问题修复方案

    1. 补全promise的状态变更逻辑:你声明了deferred但全程没有调用deferred.fulfill()或者deferred.reject(),返回的promise永远处于pending状态,Protractor的控制流不会等待该请求执行,导致请求还没返回测试就已经推进到后续步骤,日志自然无法打印。
    1. 添加请求错误监听:http.request默认不会抛出请求阶段的异常(比如连接失败、超时、DNS解析错误),必须显式绑定error事件回调才能捕获异常,你当前代码吞掉了所有请求层面的错误。
    1. 修正变量名错误:回调参数名为response,但你打印状态码用的是res.statusCode,未定义的res会抛出引用错误,这个异常也会因为没有错误监听被吞掉。
    1. 不要在Node原生异步回调里直接调用Protractor的browser方法:browser.sleep属于WebDriver控制流的异步方法,和Node原生http回调的执行上下文不兼容,会导致执行顺序混乱,你可以把日志直接放在回调最顶部,不需要加sleep。
    1. 把http请求接入Protractor的控制流:或者直接用Protractor推荐的browser.executeAsyncScript或者支持promise的请求库(比如axios)配合Protractor的异步控制逻辑,避免回调地狱。

修复后参考代码

var deferred = protractor.promise.defer();
var options = {
    method: "GET",
    hostname: hostname,
    port: 8080,
    path: '/v1/fis/'+fiId+'/businessCustomers/'+userAuthId+'/approvals',
    headers: {
        'authorization': 'testclient',
        'content-type': 'application/json',
        'accept': 'application/json',
    }
};

var req = http.request(options, function (response) {
    console.log('headers are:', options);
    console.log('hostname is: ', hostname);
    console.log('STATUS for approval API : ' + response.statusCode);
    var chunks = [];

    response.on("data", function (chunk) {
        console.log('in chunk block::');
        chunks.push(chunk);
    });

    response.on("end", function () {
        try {
            var body = Buffer.concat(chunks);
            var finaljson = JSON.parse(body.toString());
            console.log('finaljson is:****', finaljson);
            successCallBack(finaljson.SuccessResponse);
            deferred.fulfill(finaljson.SuccessResponse);
        } catch (e) {
            console.error('Response parse error:', e);
            deferred.reject(e);
        }
    });
});

// 新增错误监听捕获请求异常
req.on('error', function (err) {
    console.error('Request failed with error:', err);
    deferred.reject(err);
});

req.end();
return deferred.promise;

额外排查点

  • 确认Protractor配置里的controlFlow没有被禁用,如果你用的是较新版本的Protractor(5.0+)默认已经弃用了旧的控制流,建议你用async/await重写这段逻辑,兼容性更好。
  • 确认测试环境的网络和Postman的网络一致,比如有没有代理配置,Postman默认会用系统代理,而Node的http模块默认不使用系统代理,如果你的API需要走代理访问,需要给http请求显式配置代理参数。
  • 可以在请求发送前打印完整的options配置,和Postman里的请求参数做逐一对比,包括hostname、path、header字段有没有拼写错误,变量fiId、userAuthId有没有正确赋值。

内容的提问来源于stack exchange,提问作者Neha M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:15:03