如何使用量角器

时间:2016-11-07 15:17:58

标签: node.js authentication selenium-webdriver protractor

我需要使用量角器(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标头(它在请求中不存在)。

无论如何,这个问题变得越来越复杂,这就是我在这里发帖的原因。有谁知道解决方案或有建议吗?

1 个答案:

答案 0 :(得分:0)

我从@Florent B得到答案。谢谢!

量角器没有Basic Auth的api。

所以我使用node-http-proxy添加Protractor请求的Basic Auth Header。

如何

1。安装node-http-proxy

$ npm install --save http-proxy

2。编辑protractor.conf.js

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