2014-12-01 60 views
16

我正在尝试使用量角器在非角度应用程序中编写一些测试。我必须在谷歌浏览器中通过基本身份验证登录页面,但我不知道如何。如何使用量角器处理基本身份验证?

Authentication box

我已经尝试过baseUrl: 'https://username:[email protected]'capabilities: { 'browserName': 'chrome', 'chromeOptions' : { args: ['--login-user=foo', '--login-password=bar'] } }

但是如果没有这些工作对我来说。任何人都知道如何做到这一点?我有一些困难的时间。

+0

请记住,您可以[关闭已知IP地址的基本身份验证](http://stackoverflow.com/questions/3649852/allow-ip-address-without-authentication)(即您的CI服务器)。 – fracz 2015-09-09 21:02:39

回答

6

简短的回答是没有做对铬,因为他们不支持的没有简单的方法修改请求标题 - 请参阅https://code.google.com/p/selenium/issues/detail?id=141(标题说响应标题,但如果您阅读它,则适用于所有标题)。

这就是说,有办法做到这一点,虽然困难。

1)找到一个可以修改标题的chrome扩展/插件。一个简单的搜索会带来很多:https://chrome.google.com/webstore/search/modify%20header。您需要将该插件添加到webdriver:请参阅Is it possible to add a plugin to chromedriver under a protractor test?

2)您可以使用browsermob代理(https://github.com/lightbody/browsermob-proxy);这样你通过代理路由你的流量,这会为你添加标题。 从文档:

POST /proxy/[port]/auth/basic/[domain] - Sets automatic basic authentication for the specified domain 
Payload data should be json encoded username and password name/value pairs (ex: {"username": "myUsername", "password": "myPassword"} 

有一个节点项目,可以帮助你,https://github.com/zzo/browsermob-node,但你仍然需要设置代理服务器自己。

铬的两种方法都很复杂,但会让你得到你想要的。 (或者你可以坚持使用Firefox并遵循Robert的回答)

+0

非常感谢您的答案。它使我得到了一个解决方案(最后)! – andrepm 2014-12-12 16:51:59

4

这是因为在默认情况下,Firefox不会信任任何网站,并将Windows身份验证信息发送过来。即使您手动更改配置,也不会影响量角器,因为每次运行端到端测试时,都会使用隔离配置打开Firefox。

你需要编程设置一个Firefox配置文件,并设置其偏好,使得其会信任本地主机(或其他一些网站,这取决于页被从装有)

,先看看这个例子。它显示了如何设置配置文件以及如何设置首选项。

https://github.com/juliemr/protractor-demo/tree/master/howtos/setFirefoxProfile

它所做的是它修改为每个新标签网页。以相同的方式(使用firefoxProfile.setPreference方法),您可以更改负责信任网站的首选项。它们被称为“network.automatic-ntlm-auth.trusted-uris”和“network.negotiate-auth.delegation-uris”。您需要将它们都设置为“本地主机”。 (同样,如果他们在其他一些地方,这显然是URL)

这应该解决它:)

+0

感谢您的完整答复。但是我正在寻找铬合金的解决方案:( – andrepm 2014-12-03 16:48:37

+0

哦,对不起,我今天和Firefox有同样的问题,我以为你遇到了同样的问题,我会尽快回复你无论如何,我不知道为什么它在铬中做到这一点,我希望你找到答案:) – Robert 2014-12-03 19:21:04

26

事实上,你可以将url设置为http://username:[email protected]。 Chrome会处理它!

+1

哇,这应该是答案 – artdias90 2016-03-26 10:50:06

+1

你将如何传递用户名与域名?我已经试过这种方法,但是当用户名有图案HTTP失败://域\用户:[email protected] – aplon 2016-10-18 01:21:15

+0

我尝试的用户名和密码的所有组合也没有为我 – 2017-03-13 17:44:40

0

hankduan的browsermob代理解决方案在Chrome上为我工作 - 但browsermob的最新版本使用的是一个名为littleproxy的东西,它不支持auth头文件。因此,我不得不做browsermob-proxy -port 9090 --use-littleproxy false,这使事情工作。

0

您可以使用Windows凭据管理器来避免这种弹出正在对每一个试图登录不断所示。

添加您的凭据到“通用”类存在,重新启动浏览器(包括后台应用在运行)。

我现在有一些解释:这个弹出窗口不是'浏览器'特定的,它是在浏览器和域凭证验证之间的'中间'。因此浏览器功能(保存密码,自动填充)不能完全工作。由于同样的原因,量角器/ Selenium等没有完全控制弹出 - 它是通过域身份验证的设计。

由于不能完全确定,如果它是唯一的原因,也有一些其他提示: - 你可能还需要您的网站添加到IE浏览器(IE,而不是浏览器)受信任站点列表(Chrome会从那里抓起信息) ; - 在IE(不是Chrome浏览器)中选中“使用当前用户名和密码自动登录” - 如果您使用的站点证书与用于登录机器的证书不同,则可能无法正常工作。