实战QTP-一起测试EXT Context Menu
可能不少人已经浸淫QTP一段时间了,看的听的也不少了,可是实际做起来总会发现有不少问题。做技术这一行还是动手好,实践是检验真理的唯一标准。QTP自带的flight实在是被做的太烂了,实际做项目时,会发现根本无法应对各种各样的Web应用。这里我想邀请大家一起研究一个典型的Web应用,尝试一下如何用QTP完成脚本,权当练练手脚。
应用背景:现在很多web应用都在使用ext组件优化界面展示,这里就以ext官网的一个demo为例。这个demo属于tree的一种类型的组件,主要实现了右键菜单的操作。
地址:http://extjs.com/examples/tree/contextmenu.html
我先抛一块砖,一个纯粹录制的脚本(QTP9.5)如下:
'点击展开Beethevon分组
Browser("GXT Context Menu Tree").Page("GXT Context Menu Tree").WebElement("WebElement").Click
'点击展开Quartets分组
Browser("GXT Context Menu Tree").Page("GXT Context Menu Tree").WebElement("WebElement_2").Click
'右键在Quartets分组新建一个分组
Browser("GXT Context Menu Tree").Page("GXT Context Menu Tree").WebElement("Quartets").FireEvent "oncontextmenu"
Browser("GXT Context Menu Tree").Page("GXT Context Menu Tree").Link("Insert Item").Click
可是发现无法回放。大家讨论一下你们的录制脚本是什么的,你们如何解决这个问题?
[ 本帖最后由 asoqa 于 2009-2-3 17:04 编辑 ] 不能回放估计还是识别对象的问题,只要想办法知道对象是用什么语言写的,用相应的语言控件去录说不定就可以回放了。等下我来录录看。 看了下demo的源代码用了js,估计这个应该是用java插件来录制,还没操作过,胡乱猜测。:lol Browser("GXT Context Menu Tree").Page("GXT Context Menu Tree").WebElement("WebElement").Click
Browser("GXT Context Menu Tree").Page("GXT Context Menu Tree").WebElement("WebElement_3").Click
Browser("GXT Context Menu Tree").Page("GXT Context Menu Tree").WebElement("Quartets").FireEvent "onclick",77,107,micRightBtn
Browser("GXT Context Menu Tree").Page("GXT Context Menu Tree").Link("Insert Item").Click 77, 107, micRightBtn
简单的问题。把操作步骤分解就OK了。 一般界面最难录的就是用JS,ACTIVEX,FLEX一类写的程序.
录鼠标点击一个什么WEB组件,然后弹出一个什么,都可以用FIREEVENT这个方法来考虑分解操作步骤
[ 本帖最后由 jacksboy 于 2009-2-3 18:39 编辑 ] 我再进一步,完成上诉操作后要删除'右键在Quartets分组中新建的子分组‘如何删除
回复 4# 的帖子
我的方式略有不同,没有用FireEvent,用地是Click,不过大同小异。Browser("GXT Context Menu Tree").Page("GXT Context Menu Tree").WebElement("WebElement").Click
Browser("GXT Context Menu Tree").Page("GXT Context Menu Tree").WebElement("WebElement_2").Click
Browser("GXT Context Menu Tree").Page("GXT Context Menu Tree").WebElement("Quartets").Click 1, 1,micRightBtn
Browser("GXT Context Menu Tree").Page("GXT Context Menu Tree").Link("Insert Item").Click
回复 6# 的帖子
最简单的方式,不考虑灵活性:Browser("GXT Context Menu Tree").Page("GXT Context Menu Tree").WebElement("Add Child 1").Click 1, 1,micRightBtn
Browser("GXT Context Menu Tree").Page("GXT Context Menu Tree").Link("Remove Selected").Click 在添加节点成功后,我尝试了添加一下检查点,很简单,对Add Child 1对象用Standard CheckPoint。
Browser("GXT Context Menu Tree").Page("GXT Context Menu Tree").WebElement("Add Child 1").Check CheckPoint("Add Child 1")
可是发现一个问题,不论在哪个父节点下添加Add Child 1,这个检查点都能通过。如果程序有bug,将Add Child 1分组错误的添加到另一个节点下,这样的检查点无法查出问题。这时候大家的方案有哪些? 还是我抛块砖吧。基本想法是验证父节点的innertext,这样能将每个节点的值已经顺序保留下来做验证。代码如下:
treeText = Browser("GXT Context Menu Tree").Page("GXT Context Menu Tree").WebElement("class:=my-root-item").Object.innertext
actualTreeArray = Split(treeText, VBCRLF& VBCRLF)
expectedTreeArray = Array("Beethoven", "Quartets", "Six String Quartets", "Three String Quartets", "Grosse Fugue for String Quartets", "Add Child 1", "Sonatas", "Concertos", "Symphonies", "Brahms", "Mozart")
For i = 0 to UBound(actualTreeArray)
actualTreeArray(i) = Trim(actualTreeArray(i))
Next
If StrComp(Join(actualTreeArray), Join(expectedTreeArray)) = 0 Then
Reporter.ReportEvent micPass, "插入节点", "PASS"
Else
Reporter.ReportEvent micFail, "插入节点", "expected: " & Join(expectedTreeArray) & " VS " & "actual: " & Join(actualTreeArray)
End If
当然这种方式也是有缺陷的。 其实这个例子包含了众多QTP实践时遇到的难题,包括技术难题和脚本设计难题,例如:
1. QTP录制脚本无法回放
2.QTP的检查点如何选取
3.如何参数化(上面的脚本的节点名称都是写死,如何对对象参数化,如何对检查点参数化)
4.脚本的数据清理如何进行
5.测试用例如何设计
6.在html id变动的情形下,如何用描述性编程识别对象
7.有没有更好的方式获取一个节点的路径
等等,很多细节问题会一一展现。 怎么没人接着说了?先顶一个。很受用。我想问下关于qtp录制脚本时,对ext-js的录制总是不成功,怎么办? 学习 顶!!!
页:
[1]