在测试的过程中登陆或者注册之类的界面可能会存在图片验证码,因为图片验证码是存在于图片中的,所以很难通过一般对象的处理办法去获取到我们需要的验证码,在自动化测试的过程中,为了提高效率,我们通常是会在程序中将验证码屏蔽或者设置为万能码。但是对于那些比较简单,没有添加任何“杂音”的图片验证码,我们可以尝试使用qtp的OCR去识别验证码,比如qtp的中的文本区域输出值等获取验证码。这里介绍一个qtp的文本对象TextUtil,可以通过该对象提供的GetText方法去获取验证码。
TextUtil.GetText(hWnd, [Left, Top, Right, Bottom]),参数的说明请参见F1帮助文档说明。
思路:
1. 获取到图片验证码对象
2. 获取图片验证码对象的运行时的属性值x,y,width,height
3. 获取图片验证码对象的Browser对象的句柄值
4. 利用TextUtil对象的GetText方法获取图片对象的中的文字
以下是封装的一个获取验证码的方法:
'*************************************
'功能:获取图片验证码
'参数:objBrowser -图片验证码的父对象Browser
' objImage -图片验证码对象
'返回值:获取到的图片验证码
'*************************************
Function GetVerifyCode(objBrowser,objImage)
'获取Browser对象的运行时句柄值
hwnd = objBrowser.GetROProperty("hwnd")
'获取图片对象的属性值X
x = objImage.GetROProperty("x")
'获取图片对象的属性值Y
y = objImage.GetROProperty("y")
'获取图片对象的属性值width
w = objImage.GetROProperty("width")
'获取图片对象的属性值height
h = objImage.GetROProperty("height")
'利用TextUtil的GetText方法获取验证码
GetVerifyCode = TextUtil.GetText(hwnd,x,y,x+w,y+h)
End Function
实例:
本例以中国货币网的登陆界面为例子,首先将登陆的界面中的用户名输入框、密码输入框、图片验证码输入框及图片验证码添加到对象库中,代码如下:
Set objBrowser = Browser("中国货币网--中国外汇交易中心主办")
Set objPage = objBrowser.Page("中国货币网--中国外汇交易中心主办")
Set objUserNameWebEdit = objPage.WebEdit("user.userName")
Set objPwdWebEdit = objPage.WebEdit("user.password")
Set objVerifyCodeIMG = objPage.Image("VerifyCodeImage")
Set objVerifyCodeWebEdit = objPage.WebEdit("validateCode")
Systemutil.Run "iexplore.exe","http://www.chinamoney.com.cn/fe/jsp/CN/chinamoney/login/login.jsp"
Do
Loop until(objPwdWebEdit.Exist)
'输入用户名
objUserNameWebEdit.Set "test"
'输入密码
objPwdWebEdit.Set "test"
'输入验证码
objVerifyCodeWebEdit.Set GetVerifyCode(objBrowser,objVerifyCodeIMG)
'*************************************
'功能:获取图片验证码
'参数:objBrowser -图片验证码的父对象Browser
' objImage -图片验证码对象
'返回值:获取到的图片验证码
'*************************************
Function GetVerifyCode(objBrowser,objImage)
'获取Browser对象的运行时句柄值
hwnd = objBrowser.GetROProperty("hwnd")
'获取图片对象的属性值X
x = objImage.GetROProperty("x")
'获取图片对象的属性值Y
y = objImage.GetROProperty("y")
'获取图片对象的属性值width
w = objImage.GetROProperty("width")
'获取图片对象的属性值height
h = objImage.GetROProperty("height")
'利用TextUtil的GetText方法获取验证码
GetVerifyCode = TextUtil.GetText(hwnd,x,y,x+w,y+h)
End Function
说明:TextUtil对象获取文字内容,它利用的QTP中的OCR技术,众所周知OCR程序对图片验证码的识别都不可能是百分之百的成功率,同样TextUtil也是如此,它对一些非常简单的验证码失败率还是比较高的,但是对复杂的验证码失败率就不尽如人意了,所以在自动化测试过程中遇到验证码最简单高效的办法就是让开发人员协助,使用万能码或者直接屏蔽验证码。