下表为qtp在不同的环境(插件)下对各类检查点的支持情况:
由上图可见,QTP加载了WEB addin后,就不支持text area output checkpoint,如果用text area output value去获取文本值的话,提示:“The object you selected does not support this operation”
先来看下文本识别机制
指定QTP在采用 “文本”或者“文本区域” 的 检查点或输出值 的步骤时,捕获文本内容所使用的文本识别机制。
以下有三种识别方式:
1、先使用Windows API,再使用OCR(默认)。
指示QTP首先尝试以基于Windows API的机制从对象上直接获取文本内容。如果未获取到文本(比如,文本属于图片的一部分),QTP就会使用OCR的机制尝试获取这段文本。
强烈建议在使用中日韩(象形文字)、英的语言环境下采用这个设置。
2、先使用OCR,再使用Windows API。
指示QTP首先尝试使用OCR机制从对象上去获取文本。如果未获取到文本,QTP就会以Windows API的机制去获取文本内容。
3、仅使用Windows API方式。
指示QTP仅采用基于Windows API的机制从对象上获取文本内容。
4、仅使用OCR的方式。
指示QTP仅采用基于OCR的机制从对象上获取文本内容。
在使用Windows Vista要使用这种方式。
我已经试验过是可以成功的哦。
言归正传,在window模式下,qtp支持text area output value,所以我们可以先把web addin去掉,来捕获对象文本内容
1.在qtp启动时勾掉web addin,然后开始录制,选择Insert->output value->text area output value,鼠标变成之字形然后把所要获取对象文本的区域选中(这里录制的是百度注册页面),如下图:
点击"OK"
点击"OK"然后保存脚本为GetCharTest,脚本代码:Window("Microsoft Internet Explorer").WinObject("Internet Explorer_Server").Output CheckPoint("Internet Explorer_Server")
可以输入Set text=DataTable.GetSheet("Global").GetParameter("Internet_Explorer_ServerOutput_Text_out")
msgbox text 来查看文本内容
2.关掉QTP,再打开QTP,选中web addin录制脚本,录制完成后把第一步录制的脚本通过insert call to copy of action添加进去
脚本如下:
Dim myCode
Browser("百度用户注册").Page("百度用户注册").WebEdit("username").Set DataTable("username", dtGlobalSheet)
Browser("百度用户注册").Page("百度用户注册").WebEdit("loginpass").SetSecure "4ec464f8735b7a43e936bed4711b14866c4fe932f1211c20803caf79"
Browser("百度用户注册").Page("百度用户注册").WebEdit("verifypass").SetSecure "4ec464fda5f5858ea1f948024dfaae5bd4955cad1d5307aee397c26c"
Browser("百度用户注册").Page("百度用户注册").WebEdit("email").Set "zy66688@12.com"
Browser("百度用户注册").Page("百度用户注册_2").WebEdit("verifycode").Click
RunAction "GetChar", oneIteration,myCode
Set myCode=DataTable.GetSheet("Global").GetParameter("Internet_Explorer_ServerOutput_Text_out")
msgbox myCode
Browser("百度用户注册").Page("百度用户注册_2").WebEdit("verifycode").Set "NYRA"
Browser("百度用户注册").Page("百度用户注册_2").WebButton("同意以下协议并提交").Drag 84,16
Browser("百度用户注册").Page("百度用户注册_3").Sync
3.回放脚本,由于受多种因素的影响,这种方法大部分识别的都有错误,但脚本是可以通过的。。