我需要使用量角器(nodeJs)测试网页。当您尝试输入时,此站点受到保护,浏览器将显示其本机身份验证对话框。我们过去常常将用户名和密码添加到网址
https://username:password@example.com
但是这种方法在chrome或firefox中不起作用(我不记得它是哪一个)。
如果您填写对话框并提交,浏览器会再次发出相同的请求,添加以下标题
header: { Authorization: "Basic bF0A23Zwdfsf==" }
回到量角器,脚本的第一件事是
browser.driver.get('https://example.com');
所以我的第一个问题是:是否有可能以某种方式添加标题?
我也尝试在fetch
内拨打onPrepare
(这是在browser.driver.get
之前)
browser.driver.executeScript(function () {
let headers = new Headers({"Authorization": "Basic " + new Buffer("username" + ":" + "password").toString("base64")});
let myInit = {method: "GET", headers: headers};
fetch("https://example.com", headers);
});
由于某种原因,fetch
似乎忽略了Authorization
标头(它在请求中不存在)。
无论如何,这个问题变得越来越复杂,这就是我在这里发帖的原因。有谁知道解决方案或有建议吗?
答案 0 :(得分:0)
我从@Florent B得到答案。谢谢!
量角器没有Basic Auth的api。
所以我使用node-http-proxy添加Protractor请求的Basic Auth Header。
$ npm install --save http-proxy
var httpProxy = require('http-proxy');
var proxy;
var PORT_PROXY_SERVER = 8899;
exports.config = {
// do something
capabilities: {
'browserName': 'chrome',
'proxy': {
proxyType: 'manual',
httpProxy: `localhost:${PORT_PROXY_SERVER}`,
sslProxy: `localhost:${PORT_PROXY_SERVER}`
}
},
onPrepare: function () {
// create proxy server
proxy = httpProxy.createProxyServer({
target: 'https://REAL_HOST.COM', // edit here
auth: 'USER_NAME:PASSWORD', // edit here
changeOrigin: true
}).listen(PORT_PROXY_SERVER);
}
// other your setting
};
在代码上方运行,您的量角器访问http://localhost:8899
。 ProxyServer使用Basic Auth Header将其传递给https://REAL_HOST.COM
。