Angular2+ 使用 Protractor 与 Modify Header Value (HTTP Headers) 插件 完成 Windows Authorization 验证
2021-04-08 09:28
标签:项目 没有 data- time http 跳过 users 加密 happy 入职新公司第二周,接到了一个E2E测试的任务,两天的时间把所有的测试条件都写完了,结果剩下三天都卡在了Windows Authorization验证这里。 先说一下公司项目Authorize的逻辑 第一步,输入网址后,将重定向到公司统一的登录网站,需要Windows Authorization。 第二部,验证成功的话,将跳转到公司SSO网站,返回相对应网站的cookie 第三部,使用cookie访问用户想访问的网站 失败想法一: 刚开始很偷懒的想用Protractor去抓输入框和登录按钮就好了么。事实证明,这个想法还是太天真。因为浏览器里面的 Windows Authorization 对话框是不存在于DOM上的,所以Protractor是抓不到这个窗口的。 那这个可以理解,换方案。 失败想法二: stackoverflow.com大法好,搜索了一圈之后,找到第二种方法是在URL中输入http://username:password@domain.com。 结果发现不好用,仔细看了看帖子,发现这都是2017年之前的帖子,于是我去Chrome官网查了相关资料,发现这个方法在V59就被禁止了。 好吧,下一个方案 失败想法三: 这是时候,就要想我能不能绕过认证,直接拿cookie去进行验证呢? 在做这个方案的时候,我可悲的发现,Protractor做不了这件事,没有方法去配置header里面的cookie,即使配置了,也没有按照逻辑去运行。 比如browser.manage().addCookie(),这个方法一直没有按照我的预想去运行,不知道有没有大神能指导我一下 也许我没找到这个正确的方法吧…… 失败想法四: 依然是stackoverflow.com,这个方法(Link)我是没有成功,不知道国外那帮大神是怎么干的,理论上应该可行。这里我可以跟大家说这个解决方法的思路,这个思路是成功的,之后我会说解决方案。 这个方法的核心是加了一层proxy,当Protractor启动后,chrome启动并访问我们去测试的网站,那么在中间加一层来配置header并加上Cookie就可以了。 这里面的http-proxy就是这么做的,当Protractor启动之后,所有发出的信息都经过Proxy添加了相应的header,这样就实现了绕过验证页面登录网站。 结果……太复杂,我的大脑已经宕机…… 所以换方案 失败想法五: 这时候,我想反正Windows Authrization窗口就跳出来了,那我就模拟键盘敲击: 1. 输入账号 2. 按下Tab键 3. 输入密码 4. 按下Tab键 5. 这时候login按钮得到焦点,按下Enter键就可以了 于是我试了robotjs与robot-js,结果是悲剧的,唉,这时候的感觉就是绝望,真的绝望。 成功方案的摸索过程 这周就剩一天了,在吃了根香蕉(程序猿需要吃香蕉减轻压力啊) 在同事的关怀与鼓励下,我还没有被击倒的情况下发现了另一种解决方案。 那就是借助Chrome的插件来完成这个挑战,这个方案也是一波多折,但是总算解决问题了。 配置的过程: 因为我们访问网站,如果想跳过验证界面的话,直接添加一个带有合法Cookie的header就好了。 1. 于是我下载了一个Chrome扩展差件 Modify Header Value (HTTP Headers) 2. 在添加完成之后,打开插件,url那列添加网址,header那列写cookie,value那列填入cookie的值,点最右边的加号按钮保存 3. 之后插件一定要启动起来,访问我们想要测试的网站,发现不用输入密码就可以进入网站了 发现问题: 用angular-cli运行命令ng e2e的时候,chrome正常启动,但是发现并没有载入插件,所以测试不成功。 调查问题: 这个问题的原因是protractor只是启动了selenium里面的chrome.exe,所以他是很干净的环境,只是加载了一个automation的插件。我们之前在chrome配置的插件根本就没有加载进来 解决问题: 依然通过stackoverflow搜索到加载插件的方法 修改protractor.conf.js里面的代码,在exports.config里面添加这些代码。 --load-extension是指定了extention的路径,后面的cbdibdfhahmknbkkojljfncpnhmacdek是加密的扩展插件名称 --user-data-dir是指定了我们使用的chrome记录的历史记录,如果不指定这个文件的话,你会发现,当protractor启动浏览器后,即使加载了插件,那么插件里面的之前保存的数据也读取不到 而且验证也已经自动通过了。 更改好的解决方案: 刚刚有了一个想法,进行验证,这个方法是更好的 实际上我们已经打开Chrome, 登录网站,已经选择了保存账号与密码,这个时候我们知道确保protractor启动的Chrome能读取到用户文件就好了。 所以我删除了第三方插件,并且将exports.config修改如下 这样修改完成后,protractor启动的chrome会读取我们之前的登录信息,跳转到我们想测试的界面。 解决方案只是折中的方案,因为第一次测试的时候,我们需要打开chrome并且输入账号密码并进行保存。 希望有解决这个问题的大神能分享一下经验,谢谢! 希望对大家有帮助 Happy Testing! Angular2+ 使用 Protractor 与 Modify Header Value (HTTP Headers) 插件 完成 Windows Authorization 验证 标签:项目 没有 data- time http 跳过 users 加密 happy 原文地址:https://www.cnblogs.com/limark/p/9089746.html
这时运行e2e测试时,会发现插件已经加载,并且里面能看到我们之前设置的cookie。capabilities: {
‘browserName‘: ‘chrome‘,
‘chromeOptions‘: {
‘args‘: [‘--user-data-dir=C:/Users/YLi135/AppData/Local/Google/Chrome/User Data‘]
}
},
下一篇:python基础-面向对象进阶
文章标题:Angular2+ 使用 Protractor 与 Modify Header Value (HTTP Headers) 插件 完成 Windows Authorization 验证
文章链接:http://soscw.com/index.php/essay/72814.html