asoqa 发表于 2009-2-3 17:03:08

实战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 编辑 ]

jacksboy 发表于 2009-2-3 17:59:18

不能回放估计还是识别对象的问题,只要想办法知道对象是用什么语言写的,用相应的语言控件去录说不定就可以回放了。等下我来录录看。

Sayid 发表于 2009-2-3 18:13:39

看了下demo的源代码用了js,估计这个应该是用java插件来录制,还没操作过,胡乱猜测。:lol

jacksboy 发表于 2009-2-3 18:35:50

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了。

jacksboy 发表于 2009-2-3 18:37:17

一般界面最难录的就是用JS,ACTIVEX,FLEX一类写的程序.

录鼠标点击一个什么WEB组件,然后弹出一个什么,都可以用FIREEVENT这个方法来考虑分解操作步骤

[ 本帖最后由 jacksboy 于 2009-2-3 18:39 编辑 ]

jacksboy 发表于 2009-2-3 23:22:46

我再进一步,完成上诉操作后要删除'右键在Quartets分组中新建的子分组‘如何删除

asoqa 发表于 2009-2-4 09:45:36

回复 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

asoqa 发表于 2009-2-4 09:50:23

回复 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

asoqa 发表于 2009-2-4 09:53:22

在添加节点成功后,我尝试了添加一下检查点,很简单,对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分组错误的添加到另一个节点下,这样的检查点无法查出问题。这时候大家的方案有哪些?

asoqa 发表于 2009-2-4 17:57:22

还是我抛块砖吧。基本想法是验证父节点的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
当然这种方式也是有缺陷的。

asoqa 发表于 2009-2-10 09:28:59

其实这个例子包含了众多QTP实践时遇到的难题,包括技术难题和脚本设计难题,例如:
1. QTP录制脚本无法回放
2.QTP的检查点如何选取
3.如何参数化(上面的脚本的节点名称都是写死,如何对对象参数化,如何对检查点参数化)
4.脚本的数据清理如何进行
5.测试用例如何设计
6.在html id变动的情形下,如何用描述性编程识别对象
7.有没有更好的方式获取一个节点的路径
等等,很多细节问题会一一展现。

夭夭旭 发表于 2009-8-21 14:13:56

怎么没人接着说了?先顶一个。很受用。我想问下关于qtp录制脚本时,对ext-js的录制总是不成功,怎么办?

borisman 发表于 2009-8-21 15:24:08

学习

vera023 发表于 2009-9-17 11:28:32

顶!!!
页: [1]
查看完整版本: 实战QTP-一起测试EXT Context Menu