正在查看与 Protractor/Webdriver 的 AJAX/HTTP 通话?有 $HttpBackend return 数据发送给它吗?
Peeking into an AJAX/HTTP call with Protractor/Webdriver? Have $HttpBackend return data sent to it?
有没有办法监视浏览器使用 Protractor/Webdriver 发出的 $http/AJAX 请求?
有没有办法让 $http-backend return 发送给它的请求?
听起来这可能是您需要的:
NodeJS bindings for browsermob-proxy to programmatically generate HAR files
本质上你需要一个代理服务器运行,通过代理发送Selenium流量,然后通过一种方式(JavaScript绑定,RESTAPI)获得一个可查询的HAR 文件,其中包含从您的 Web 请求生成的所有 HTTP 请求和响应的完整详细信息。
编辑:
HAR 文件只是一个 JSON 存档,因此从 JavaScript 中检查和查询它应该不会太困难。这里有几个可能有用的 Node 库:
我使用了 HTTP 拦截器。起初让它工作很麻烦,三种不同的语法都使元素定位器失败并且 selenium 立即退出。但随后它在下一次尝试中起作用。在这里:它将来自 HTTP 请求的数据放入一个 $rootScope
变量中,然后可以使用 .evaluate()
断言该变量
var e2eInterceptors = function() {
return angular.module('e2eInterceptors', ['yetiWonderland']).factory('loginInterceptor', function($rootScope) {
return {
request: function(config) {
if (config.method === 'PUT'){
$rootScope.testData = config.data;
console.log("ROOTSCOPE!", $rootScope.testData);
}
configIntercept = config
return config
},
response: function(response) {
console.log("RESPONSE!");
return response;
},
};
}).config(function($httpProvider) {
return $httpProvider.interceptors.push('loginInterceptor');
});
};
browser.addMockModule('e2eInterceptors', e2eInterceptors);
有没有办法监视浏览器使用 Protractor/Webdriver 发出的 $http/AJAX 请求?
有没有办法让 $http-backend return 发送给它的请求?
听起来这可能是您需要的:
NodeJS bindings for browsermob-proxy to programmatically generate HAR files
本质上你需要一个代理服务器运行,通过代理发送Selenium流量,然后通过一种方式(JavaScript绑定,RESTAPI)获得一个可查询的HAR 文件,其中包含从您的 Web 请求生成的所有 HTTP 请求和响应的完整详细信息。
编辑:
HAR 文件只是一个 JSON 存档,因此从 JavaScript 中检查和查询它应该不会太困难。这里有几个可能有用的 Node 库:
我使用了 HTTP 拦截器。起初让它工作很麻烦,三种不同的语法都使元素定位器失败并且 selenium 立即退出。但随后它在下一次尝试中起作用。在这里:它将来自 HTTP 请求的数据放入一个 $rootScope
变量中,然后可以使用 .evaluate()
var e2eInterceptors = function() {
return angular.module('e2eInterceptors', ['yetiWonderland']).factory('loginInterceptor', function($rootScope) {
return {
request: function(config) {
if (config.method === 'PUT'){
$rootScope.testData = config.data;
console.log("ROOTSCOPE!", $rootScope.testData);
}
configIntercept = config
return config
},
response: function(response) {
console.log("RESPONSE!");
return response;
},
};
}).config(function($httpProvider) {
return $httpProvider.interceptors.push('loginInterceptor');
});
};
browser.addMockModule('e2eInterceptors', e2eInterceptors);