http://bbs.51testing.com/thread-159897-1-2.html
http://bbs.51testing.com/thread-161144-1-22.html
经过以上两个帖子的学习,终于至少可以录制那些比较“清晰”的验证码了。所谓清晰,是不带干扰背景的,但是至少可以获取累死的文字,所以说明方法还是成功了。所以还是挺高兴的,在这里记录一下方法:
Example:http://www.kaixin001.com/reg/reg.php
思路:将验证码图片里的文字获取到datasheet,然后得到datasheet里的值set到验证码的输入框
Window("注册 - 开心网 - Microsoft Internet").WinObject("Internet Explorer_Server").Click 427,144
Window("注册 - 开心网 - Microsoft Internet_2").WinObject("Internet Explorer_Server").Output CheckPoint("Internet Explorer_Server_2")
Dim validation
validation=datatable.GetSheet("Global").GetParameter("output").ValueByRow(1)
Browser("注册 - 开心网").Page("注册 - 开心网").WebEdit("code").Set validation
具体代码请参考qtp test目录下的Validate_Data_Web.
这里有几个知识点:
1. output CheckPoint可以将某个对象作为output的值,写到qtp自带的datasheet中。但是这里的验证码是个图片西西的东西,所以经过论坛指点,选用text area output values。查了下qtp的help:You can create a text area output value only while recording on Windows-based applications—Standard Windows, Visual Basic and ActiveX. 因此要基于windows-base的application,这里又有两个方法可以做到这一点:1)录制的时候选低级录制 2)录制两段script,其中一段刚打开qtp时将web插件去掉,就变成windows-base的了。然后在录制的时候,假如在那个验证框这里右键,就只有insert output value这个选项,没有text area output,但其实可以在insert菜单的output下选text area output values,然后修改输入到datasheet的column名字,比如就叫output。
2. 现在剩下的问题就是:我录制的开心网的注册界面的验证码在很下面,假如有些页面最大化后还不能显示这个验证框,一定要下拉到页底,该怎么操作呢?等待下面帖子的回复:
http://bbs.51testing.com/viewthread.php?tid=159897&page=2&extra=page%3D2
今天看了精华贴,总结了验证码问题的几个解决方案,我之前上面说的这种只是比较容易实现的一种,其实还有很多困难。于是请看下列总结。
http://bbs.51testing.com/thread-41992-1-5.html
1、测试的时候,让程序员把这块限制去掉,免去验证这关。
2、让程序员提供一个万能验证码,测试可以绕过这一关。
3、请程序员提供识别的方法,从获取的图片读出验证数据,再传给QTP。
4、进行位图检查,将验证码分段进行图像验证。
实际上,验证码的目的就是防止用程序灌水或机器录入信息。所以有点为难我们测试了。
方法1,如果程序已在发布并有客户使用,危险性是可想而知的。方法2虽然可以解决验证这一关,但跳过了输入码与验证码一致性问题。方法3就需要程序员配合了,可能就需要调用DLL了。方法4却将图像分段,把获取的图像和已经的图像进行比对,比对通过取对应的值;这个在数字验证会好做一点,因为最多就四个图像的比对。