加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 量角器测试角$http拦截器

发布时间:2020-12-17 16:57:48 所属栏目:安全 来源:网络整理
导读:我正在尝试进行角度量角器测试,在提交时发送一个常规的ajax请求,然后在响应段上截获. $http拦截器打开一个自定义对话框,等待用户输入(用户/密码)以进行进一步的身份验证. 问题是量角器坐在那里等待HTTP响应完成但从未这样做,因为它已被截获并且只是超时.我无
我正在尝试进行角度量角器测试,在提交时发送一个常规的ajax请求,然后在响应段上截获. $http拦截器打开一个自定义对话框,等待用户输入(用户/密码)以进行进一步的身份验证.

问题是量角器坐在那里等待HTTP响应完成但从未这样做,因为它已被截获并且只是超时.我无法找到一种方法将量角器sendKeys发送到这些对话框,因为它仍在等待HTTP请求完成(它从未被截获).

从本质上讲,量角器框架可以处理$http截获的响应并在需要时提供额外的浏览器输入吗?或者有任何变通方法吗?

谢谢!!

解决方法

您可以通过将此脚本注入浏览器来拦截应用程序中的所有xhr调用.并存储对某些全局变量的响应,例如,我保存在 windows变量中.

(function(XHR) {
    "use strict";

    var open = XHR.prototype.open;
    var send = XHR.prototype.send;

    XHR.prototype.open = function(method,url,async,user,pass) {
        this._url = url;
        open.call(this,method,pass);
    };

    XHR.prototype.send = function(data) {
        var self = this;
        var oldOnReadyStateChange;
        var url = this._url;

        function onReadyStateChange() {
            if(self.readyState == 4 /* complete */) {
                /* This is where you can put code that you want to execute post-complete*/
                /* URL is kept in this._url */

                if(self._url=='api/v1/groups')
                {
                    var request=JSON.parse(data);
                    if(request.method=='createGroup') {

                        var XHRInterceptObj=new Object();
                        XHRInterceptObj.request=request;
                        XHRInterceptObj.response=self;
                        window._groupCreation =XHRInterceptObj;

                    }
                    else if(request.method=='getGroupDetails') {
                        var XHRInterceptObj=new Object();
                        XHRInterceptObj.request=request;
                        XHRInterceptObj.response=self;
                        window._groupDetails =XHRInterceptObj;
                    }
                }

            }

            if(oldOnReadyStateChange) {
                oldOnReadyStateChange();
            }
        }

        /* Set xhr.noIntercept to true to disable the interceptor for a particular call */
        if(!this.noIntercept) {
            if(this.addEventListener) {
                this.addEventListener("readystatechange",onReadyStateChange,false);
            } else {
                oldOnReadyStateChange = this.onreadystatechange;
                this.onreadystatechange = onReadyStateChange;
            }
        }
        //console.log('data',data);
        send.call(this,data);
    }
})(XMLHttpRequest);

你可以从这样的全局变量中获取响应数据.

browser.executeScript('return window._groupCreation;').then(function(obj){
        console.log(obj.responseText);
    });

在这个脚本中,我们实际上是使用原型和拦截调用向XHR对象添加其他功能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读