我正在进行自动化UI测试。 API由oAuth保护。所以点击网址就说http://mydom/api/welcome 浏览器必须设置授权密钥作为标头,值必须是有效标记。
对于手动测试,我使用Requestly (Chrome Extension)来设置标题。 (任何人都可以指出我在内部请求什么,以便来自chrome的每个请求获取标题值请求设置的内容?)
有没有办法以编程方式设置标头值?
PS:我使用curl调用oath url获取有效令牌并将令牌值设置为env变量。我也用邮递员来做同样的事情。但所有这些都不会影响从浏览器调用的时间。
答案 0 :(得分:1)
您不能轻易做到这一点,因为Chrome不支持它(请参阅https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/141)。
就个人而言,我会使用诸如请求(https://github.com/request/requesthttps://github.com/request/request)和基本断言之类的东西进行此测试,而不是通过带有量角器的浏览器。
答案 1 :(得分:1)
您无法直接在selenium中操作http标头。您需要使用代理来执行此类操作。 BrowserMobProxy是硒世界的热门代理。您可以使用节点包装器browsermob-node在量角器测试中执行此操作。我添加了一个关于如何修改标题here
的示例部分答案 2 :(得分:1)
我使用supertest和supertest-as-promised通过Protractor进行API测试。因此,我在OAuth端点上执行GET,将令牌存储在变量中,然后在其余的API调用中执行request.get(url).set('Authorization', auth.tokenType + ' ' + auth.token);
。
所以,你可以这样做的一种方法是使用像supertest这样的东西来获取一个令牌,然后browser.manage().addCookie()
在你的浏览器会话中设置它。
答案 3 :(得分:0)
@Sam请求作者在这里。
目前没有,您无法以编程方式设置标头值。它现在必须是静态的。鉴于有多少用例出现,这是实现此功能的长期计划。但是你可以做到这一点。
您可以分叉Requestly github repo。实际标头修改发生的代码位于Background.js 内。方法名称为BG.Methods.modifyHeaders
。请继续编写自己的逻辑以生成标题值并进行修改。
目前未向onBeforeSendHeaders事件提供以下标头。此列表不保证完整也不稳定。
可能这个答案可能对您没用,因为Authorization
无法修改。但我仍然把这个答案添加为可行的方法。