花了两天时间才完整的完成识别验证码的登录操作,在网上看到很多关于验证码识别的方法,但是我用的qtp版本比较高级,所以还是要自己花心思研究。po上我的识别验证码的详细历程:
一、读取浏览器中的图片验证码
1.打开浏览器登录界面2.启动qtp,不勾选web
3.录制验证码。开始录制:在录制的小条上选择insert ->text area output value. 截图验证码图片的框。
然后选择modify,output types设置为environment,name 可以改写为“getchar”。停止录制
得到的代码为:
Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Output CheckPoint("Internet Explorer_Server")4.在录制完后的代码上加一行:
msgbox environment.Value ("getchar")5.在qtp上点击run
这样它就会弹出验证码的消息框
二、识别word中的数字。在qtp中回放录制的验证码,将验证码输出来:
在word中选中一段图片,内容为数字,获取到图片里的数字。然后将获取到数字在word中输出来:1,打开qtp,不选择web。录制时利用text area output value在word中选中一段图片,内容为数字,获取到图片里的数字,保存为环境变量getchar3.
2.新建一个test,调用刚录制的那个action 。然后再录制在word中输入一段文字。3.将文字改为环境变量getchar3的值,这样在word中就会输出验证码的值了。第二个test的代码如下:
RunAction "Copy of Action1", oneIteration msgbox environment.Value("getchar3") #将环境变量的值用messagebox弹出来 myword=environment.Value("getchar3") #将环境变量的值复制给一个变量Window("Microsoft Word").WinObject("Microsoft Word 文档").Type myword #这句是录制得到的。本来是Type "1234",将"1234"改为type。
三、完整的登录OA系统。以下是action name为oa_login_code的代码内容。先录制不带web的识别验证码的checkcode action,再勾选web addin 录制登录OA系统的action。录制时OA的登录界面是打开的状态。
在checkcode action中可以在file——setting--environment--internal value,看到getchar。但在调用它的action中不能看到这个环境变量值。直接使用这个环境变量即可。RunAction "Copy of checkcode", oneIteration MyWebElement=environment.Value ("getchar") Browser("流程管道,知识活水").Page("流程管道,知识活水").WebEdit("authcode").Set MyWebElement Browser("流程管道,知识活水").Page("流程管道,知识活水").WebEdit("j_username").Set "078057"
Browser("流程管道,知识活水").Page("流程管道,知识活水").WebEdit("j password") Browser("流程管道,知识活水").Page("流程管道,知识活水").WebEdit("j_password").SetSecure "541303024777c70d" Browser("流程管道,知识活水").Page("流程管道,知识活水").Image("Submit").Click 2,12
其中checkcode action的代码:
Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Output CheckPoint("Internet Explorer_Server")
运行完整action后的结果:
错误记录一:上面的代码是以windows的方式录制了截图验证码图片读取其中的文本值,将其存为环境变量getchar。我将值存为global data ,回放的时候这个值不会变,存为环境变量则每次都能获取到正确的验证码。
错误记录二:我单独运行调用程序时,在qtp自己的result中可以看到验证码获取成功。但是先用户名、再密码,再验证码,获取的验证码的值就为空。于是将调用识别验证码的语句放在第一句,先输入验证码(上面的代码是运行成功的代码)。这样就可以成功登录了。 可能是因为截图识别框要靠鼠标和坐标抓取。 通过识别验证码的程序学习到:
1.屏蔽多行,单独验证某行看是否通过。然后再执行多步2.qtp的验证码识别是通过抓取图片中的文本进行识别。现在只能识别英文。如果录制时选择中文(在tools-options--gui testing-text recognition中设置),也识别不到。qtp11.5 OCR设置:在tools-options--gui testing-text recognition中设置。我在win7上装的只有OCR这一种方式。3.录制时,有时候录制不生成代码,有时候回放不成功,要重新打开IE浏览器。