51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 8186|回复: 13
打印 上一主题 下一主题

[讨论] 实战QTP-一起测试EXT Context Menu

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-2-3 17:03:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
可能不少人已经浸淫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 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2009-2-3 17:59:18 | 只看该作者
不能回放估计还是识别对象的问题,只要想办法知道对象是用什么语言写的,用相应的语言控件去录说不定就可以回放了。等下我来录录看。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2016-4-7 10:29
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    3#
    发表于 2009-2-3 18:13:39 | 只看该作者
    看了下demo的源代码用了js,估计这个应该是用java插件来录制,还没操作过,胡乱猜测。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
    发表于 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了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2009-2-3 18:37:17 | 只看该作者
    一般界面最难录的就是用JS,ACTIVEX,FLEX一类写的程序.

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

    [ 本帖最后由 jacksboy 于 2009-2-3 18:39 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
    发表于 2009-2-3 23:22:46 | 只看该作者
    我再进一步,完成上诉操作后要删除'右键在Quartets分组中新建的子分组‘如何删除
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
     楼主| 发表于 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
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
     楼主| 发表于 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
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
     楼主| 发表于 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分组错误的添加到另一个节点下,这样的检查点无法查出问题。这时候大家的方案有哪些?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
     楼主| 发表于 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
    当然这种方式也是有缺陷的。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

    12#
    发表于 2009-8-21 14:13:56 | 只看该作者
    怎么没人接着说了?先顶一个。很受用。我想问下关于qtp录制脚本时,对ext-js的录制总是不成功,怎么办?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2009-8-21 15:24:08 | 只看该作者
    学习
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
    发表于 2009-9-17 11:28:32 | 只看该作者
    顶!!!
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-8 00:05 , Processed in 0.076477 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表