作者:zzxxbb112
时间:2011/12/21 版权所有,侵权必究。
出处:http://blog.csdn.net/zzxxbb112
终于迎来了本系列讲座的第50讲内容,这次的内容比较特别,大家都知道Visual Studio 与 Eclipse这两大目前主流的开发IDE都有控制台,那么今天这次讲座笔者就带领大家来打造一个实时信息显示的控制台。
首先给大家来看张图:
分析:我们来看一下这张图,图中一共有三个窗口:QTP应用程序、print打印窗口和IE浏览器窗口,注意这三个窗口并不是笔者手工拖放出来的,而是通过脚本的形式在QTP刚开始执行时就自动初始化好这些了。那么要做到这些的话首先我们需要获取到这些对象,首先我们来获取QTP应用对象。那此时肯定会有朋友问了这个怎么获取,QTP工具本身是静止抓去自身。当我们打开spy时,点击手指后,QTP同时也会被隐藏,因此根本无法获知到QTP的属性,其实根本不用知道QTP的属性,我们只需要通过title来拿到QTP对象即可。
获取QTP对象
'获取QTP应用窗口对象
Set Window_QtpApp = Window("title:=QuickTest Professional - .*")
'高亮进行验证对象是否获取成功
Window_QtpApp.highlight
说明:
通过title的方式结合正则表达的方式来描述QTP的title,使用正则是因为QTP的脚本名称是动态的,随时可能变更,因此需要模糊掉。highlight是为了确认对象是否被成功识别,执行以上脚本后会看到QTP应用程序本身已经被高亮(QTP大叔一定会说:竟然让我自己高亮自己,真是没事找事)
获取Print对象
Print对象其实也可以使用以上方式通过title来定位,但是同样的方式笔者不想使用两次(而且QTP大叔会说:对我使用两次同样的招式是没用的),呵呵其实是给大家介绍另一种渠道来获取对象属性,这里笔者使用了Visual Studio预装的Spy++来获取到print对象,如图:
可以看到print的classname已经被我们挖出来了。那么接下来就是把此对象属性描述下来即可
'开启print窗口
Print ""
'获取到print窗口对象
Set Window_Print = Window("nativeclass:=Mercury::Qtprn::PrintWindow")
'高亮窗口对象
Window_Print.highlight
说明:
通过使用regexpwndclass属性来描述print对象,效果是一样的。
题外话:
细心的朋友一定会问我一向推荐使用对象库的笔者怎么这次全部改用描述性编程了?其实原因有两个,首先这次的讲座获取的都是QTP本身应用,而这些值几乎不会变更,因此不会牵涉到后期维护的问题,第二就是方便大家直接拷贝脚本快速看到结果,其实上面的内容都可以直接使用对象库来进行实现,我个人觉得使用对象库确认对象是否正确识别更加方便,因为可以直接高亮,而不需要通过运行脚本来进行高亮。
那么完成了以上这些工作之后,我们后续的工作就好办了。来看一下最终脚本:
'_______________TEST FLOW __________________
Dim Console,Window_Print
Set Console = new FsoCls
Call LaunchBrowser ("blog.csdn.net/zzxxbb112")
'
'
' Test script
'
'
Call ConsoleSave()
'_____________________________________________
'_____________Function Library __________________
Sub LaunchBrowser(url)
'############ 启动IE 和print控制台 ############
Systemutil.Run "iexplore.exe",url
print ""
'############ 获取所有测试窗口对象 ###########
Set Window_QtpApp = Window("title:=QuickTest Professional - .*")
Set Window_Print = Window("nativeclass:=Mercury::Qtprn::PrintWindow")
Browser_hwnd = Browser("micClass:=Browser").GetROProperty("hwnd")
Set Window_Browser = Window("hwnd:="&Browser_hwnd)
'############ 获取最大化高与宽 ##############
Window_QtpApp.Maximize
height = Window_QtpApp.GetROProperty("height")
width = Window_QtpApp.GetROProperty("width")
'############ 重置窗口大小 ###############
Window_QtpApp.Move 0,0
Window_Print.Move 0,height*0.7
Window_Browser.Move width*0.4,0
Window_QtpApp.Resize width*0.4,height*0.7
Window_Print.Resize width*0.4,height*0.3
Window_Browser.Resize width*0.6,height
'########### 发送控制台消息 #############
print "########## Init QTP Console ###########"
SendConsole "Open the Browser:"
wait 3
End Sub
'发送日志到console
Function SendConsole(outPrint)
print "Step --> "& outPrint & vbcrlf & _
"Time --> " & now & vbcrlf
End Function
'保存console内容
Function ConsoleSave()
LogText = Window_Print.WinEdit("nativeclass:=Edit").GetROProperty("text")
Console.SaveLog(LogText)
End Function
'fso类
Class FsoCls
Private fso,txtfile
Sub Class_Initialize
Set fso = createobject("scripting.filesystemobject")
set txtfile = fso.CreateTextFile("c:\log.txt",8,true)
End Sub
Sub SaveLog(content)
txtfile.Write content
txtfile.Close
End Sub
Sub Class_Terminate
Set txtfile = nothing
Set fso = nothing
End Sub
End Class
分析:脚本中的注释都写的非常的清楚,相信大家应该都能看懂了,拷贝以上脚本直接放QTP里执行即可看到最先开始看到的样图效果。在脚本的最后我们还加入了保存console的所有内容到c盘为txt文件。其中识别print窗口中的内容只能通过spy++来获取到其属性为Edit。以上脚本大家可以把它扩展到自己的函数库或者框架中。
如有任何问题请去IquickTest Q&A问题库进行提问
Rss订阅IQuickTest(关于如何订阅?)
==================================