通过网上查阅资料和了解大家的解决方案中,我们大致可以分为以下几种:
1、与开发沟通,通过修改代码,绕过验证码的部分。
2、与开发沟通,设置一个万能验证码,每次填写验证码都输入这个验证码,并且可以识别。
3、通过Cookie操作,来达到登陆的目的
4、通过selenium来操作本地浏览器。
第一点和第二点,是目前web测试过程中用的比较多的解决办法,这两个办法的确一劳永逸,不用再关心这个问题。但是问题在于,这个只适合测试环境,线上由于安全问题,这些改动都是不允许的。我们重点来讨论一下第三种和第四种办法。
第三点,操作Cookie,我们以百度为例,步骤如下:
首先手动登陆百度,通过Fiddler或者其他工具拿到登陆之后的所有Cookie
然后我们找到关键的Cookie,通过代码写入到该域
没有增加cookie的代码,我们直接访问百度是这样的
但是,我们增加这两个关键cookie后,再次访问百度
登陆成功!
不过这种办法,也不是一劳永逸的办法,这两个cookie中,第二个cookie值很可能变化,其他web系统可能也存在同样的问题。所以,通过cookie来绕过登陆的办法,可以尝试使用,但是要注意应用 的环境。
第四种,操作本地浏览器。大家都知道,我们的浏览器自带了记住密码的功能,而且这些web系统一般登陆过后,再次访问,是直接登陆了的。(可能有个比较长的有效期),所以我们是不是有办法操作本地的浏览器呢?答案是肯定的。selenium的driver(无论是firefoxdriver还是chromedriver等)打开浏览器,默认都是不带任何插件和个人设置的,所以我们之前每次跑自动化测试的时候,感觉就像是打开了一个新的浏览器一样,其实这是去掉了所有profile的情况。拿我们如果要操作profile的话,就需要通过在代码中增加本地的配置,来启动浏览器。代码如下:
如何自定义一个profile我们可以进行如下操作(以火狐为例):
关闭所有火狐浏览器,Window键+R打开运行,输入“你的狐火浏览器安装运行目录路径” -P:
可以看到下面的窗口:
代码中我们可以使用default或者自己新建一个配置文件。(这里有个坑,default不一定能打开浏览器,不行可以新建一个配置,然后使用新建的这个)
然后,我们需要手动的登陆一个我们要测试的web系统,仍然以百度为例子,最后执行我们的代码,发现,打开的页面就是登陆后的页面
总结:
第一种和第二种,有需要跟开发沟通的成本,并且用安全风险。
第三种和第四种,个人建议使用第四种,只需要第一次手动登陆系统,后面再执行代码,都是操作的这个已经登陆的浏览器配置。