51Testing软件测试论坛

标题: QTP虚拟对象的设置 [打印本页]

作者: kittychen20    时间: 2006-8-28 17:07
标题: QTP虚拟对象的设置
各位XDJM们好。
想问大家2个问题。
问题1:
我现在测试的网页上有个FLASH对象,
想把它设置成虚拟对象,不知道怎么就是无法选择这个区域。


问题2:
怎么在qtp的代码中,写if -end  等语句,
用来测试当某个测试成功时,执行哪些程序,
失败时又要执行哪些程序.
作者: walker1020    时间: 2006-8-28 17:17
标题: 我来回答第二个问题
一个典型的判断结构是:
   If *** Then
    *******
  Else
   **********
  End If

打开 QTP后,你按下F1, 搜索If 就可以看到关于判断的帮助了。
作者: kittychen20    时间: 2006-8-30 17:31
这个我是知道的.
但是我根据检测点来进行判断时,有时输入参数的时候.哪个检测点检测不到数据.
例如:如果我是要检测一个错误的出现.但当我输入的参数本身是正确的话,那样检测
点是检测不到预期结果的.这是程序就运行不下去了.虽然我写过if(a=false) then  .....
但是,程序只执行到检测点就不再执行下去了,直接报运行时出错.

想咨询下各位.这种情况下.应该怎么写代码让程序继续下去.
先谢过!
作者: yangkinki    时间: 2006-8-30 17:55
on error resume next
或者on error goto  ... 等
具体查看QTP帮助文件
作者: walker1020    时间: 2006-8-30 17:59
回楼主,根据你的描述,我猜测可以用 下面的函数满足你的要求:
  Reporter.ReportEvent EventStatus, ReportStepName, Details [, in]

Reporter.ReportEvent的具体用法 以在QTP的帮助里面有相信的说明。我另外给你举一个例子,这是我根据测试的需要用Reporter.ReportEvent写的一个函数:

   Sub HtmlCompare(runHtml, expectedHtml)

       Index = Instr(runHtml,expectedHtml)
         If  Index = "0" Then
                 Reporter.ReportEvent  micFail," HTML compared","Trouble"
          Else
               Reporter.ReportEvent  micPass," HTML compared","OK"
       End If
               
  End Sub

  这样你可以控制 测试结果什么时候 是Pass(如果实际的运行结果与预期结果相同),什么时候是 Fail(如果实际的运行结果与预期结果不同)。

[ 本帖最后由 walker1020 于 2006-8-30 18:16 编辑 ]
作者: kittychen20    时间: 2006-8-31 16:26
怎么没有哪位同志对于我的第一个问题给出任何建议呢?
难到大家都没有碰到过.
作者: walker1020    时间: 2006-8-31 16:35
原帖由 kittychen20 于 2006-8-31 16:26 发表
怎么没有哪位同志对于我的第一个问题给出任何建议呢?
难到大家都没有碰到过.


请阅读下面的帖子: http://bbs.51testing.com/thread-42574-1-1.html
作者: kittychen20    时间: 2006-8-31 18:32
原帖由 walker1020 于 2006-8-31 16:35 发表


请阅读下面的帖子: http://bbs.51testing.com/thread-42574-1-1.html


我现在是想用设置虚拟对象的这个办法,但是用鼠标怎么也选不中那个flash所在一大快区域.
作者: kittychen20    时间: 2006-8-31 18:47
原帖由 walker1020 于 2006-8-30 17:59 发表
回楼主,根据你的描述,我猜测可以用 下面的函数满足你的要求:
  Reporter.ReportEvent EventStatus, ReportStepName, Details

Reporter.ReportEvent的具体用法 以在QTP的帮助里面有相信的说明。我另外给你 ...


斑竹可能理解错了我的意思.现在我不是要看是正确还是错误.而是希望能够继续运行下去.

我的代码如下:



Browser("办理").Page("照办理").WebEdit("zjhm").Set "12215222"
Browser("办理").Page("办理").WebEdit("zjyxqYear").Set "2006"
Browser("办理").Page("办理").WebEdit("zjyxqMonth").Set "12"
Browser("办理").Page("办理").WebEdit("zjyxqDay").Set "02"
Browser("办理").Page("办理").WebEdit("sfzhm").Set DataTable("sfzhm", dtGlobalSheet)
Browser("办理").Page("办理").WebEdit("lxdh").Set "1212525236"
Browser("办理").Page("办理").WebEdit("bgjzxm").Set "PO"
Browser("办理").Page("办理").WebButton("提   交").Click
a=Browser("办理").Dialog("Microsoft Internet Explorer").Static("您已经申请了此业务,业务编号是8000000484").Check(CheckPoint("您已经申请了此业务"))
on error resume next
if(a=false)  then
      Browser("办理_2").Page("办理").WebButton("确   认").Click
      Browser("办理_2").Page("系统").Sync
      Browser("办理_2").Close
      Browser("办理").Page("办理_2").Sync
else
      Browser("办理").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
      Browser("办理").Page("办理").WebButton("放   弃").Click
      Browser("办理").Close
end if

我的目的是检测 Browser("办理").Dialog("Microsoft Internet Explorer").Static("您已经申请了此业务,业务编号是8000000484").Check(CheckPoint("您已经申请了此业务")),,是否会出现,

现在的状况是,如过检测到了就顺利的执行下去.但是如果没有检测到,就报如下错误, 程序光标就定位在a=Browser("护照办理").Dialog......语句前面.
本来想把图片贴上的,好象没有办法贴,那我就描述一下,

RUNNER ERROR
   can not find the "您已经申请了此业务,业务编号是8000000484" object's parents

"Microsoft Internet Explorer"(class dialog)  verify that parent properties match an object
currently display in ypur application

目前程序就是弹出这样一个对话框后,程序就停止了运行

[ 本帖最后由 kittychen20 于 2006-9-1 16:55 编辑 ]
作者: kittychen20    时间: 2006-8-31 18:49
原帖由 yangkinki 于 2006-8-30 17:55 发表
on error resume next
或者on error goto  ... 等
具体查看QTP帮助文件



我用过这个语句,但不知道是用得不对,还是怎么拉,就是过不去
作者: walker1020    时间: 2006-8-31 19:45
根据你的描述和错误信息,你把

  1. a=Browser("护照办理").Dialog("Microsoft Internet Explorer").Static("您已经申请了此业务,业务编号是8000000484").Check(CheckPoint("您已经申请了此业务"))
  2. on error resume next
  3. if(a=false)  then
  4.       Browser("护照办理_2").Page("护照办理").WebButton("确   认").Click
  5.       Browser("护照办理_2").Page("上海出入境电子政务平台系统").Sync
  6.       Browser("护照办理_2").Close
  7.       Browser("护照办理").Page("护照办理_2").Sync
  8. else
  9.       Browser("护照办理").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
  10.       Browser("护照办理").Page("护照办理").WebButton("放   弃").Click
  11.       Browser("护照办理").Close
  12. end if
复制代码


改为下面的代码试试:

  1. a= Browser("护照办理").Dialog("Microsoft Internet Explorer").Static("您已经申请了此业务,业务编号是8000000484").Exist
  2. If (a)   then
  3.        Browser("护照办理_2").Page("护照办理").WebButton("确   认").Click
  4.        Browser("护照办理_2").Page("上海出入境电子政务平台系统").Sync
  5.        Browser("护照办理_2").Close
  6.        Browser("护照办理").Page("护照办理_2").Sync
  7. Else
  8.       Browser("护照办理").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
  9.       Browser("护照办理").Page("护照办理").WebButton("放   弃").Click
  10.       Browser("护照办理").Close
  11. End if
复制代码

[ 本帖最后由 walker1020 于 2006-8-31 19:47 编辑 ]
作者: walker1020    时间: 2006-8-31 19:51
标题: 说明
Browser("护照办理").Dialog("Microsoft Internet Explorer").Static("您已经申请了此业务,业务编号是8000000484").Check(CheckPoint("您已经申请了此业务")) 是 QTP 增加 check point 自动生成的代码,它会把检查的结果 (Pass or Fail) 直接发送到 Test Report 里的。它检查的结果你是无法控制的,你也不能把这作为判断条件的。
作者: kittychen20    时间: 2006-9-1 16:52
原帖由 walker1020 于 2006-8-31 19:51 发表
Browser("护照办理").Dialog("Microsoft Internet Explorer").Static("您已经申请了此业务,业务编号是8000000484").Check(CheckPoint("您已经申请了此业务")) 是 QTP 增 ...



呵呵.我看QTP的帮助是, 检测点返回是true 和 false,
是可以根据他的返回值来判断做其他的操作的.
不知道是不是理解有误.

对于上面的问题已经解决,在此谢谢walker1020的大力支持.

另外想问下:就是一个B/s的测试,页面上那么多的输入项,
如果每个输入项都得检测输入的值正确与否,做这样的测试
应该是一个怎样的思路呢?

目前我是把每个输入框的检测单独录制下来,作为一个单独的action,再作些必要的代码修改,
然后.依次调用这些ACTION,想问下,各位用了这么久有没有什么其他好的方式可以向我推荐.
自己先谢谢了
作者: walker1020    时间: 2006-9-1 17:41
标题: 回复 kittychen20
你在 #13 提到的问题要设计到测试用例。我以QTP做登陆测试为例来回答你吧。

假如输入的用户名和密码有七种情况,就是测试计划中有这7个测试用例:

   1, 用户名和密码都是正确输入;
   2, 用户名和密码都为空
   3, 有用户名,无密码;
   4, 无用户名,有密码
   5, 正确用户名,不正确密码;
   6, 不正确的用户名,正确密码;
   7,  用户名包含非法字符;
   8,  密码中包含非法字符。

当然,你还可以举出别的测试用例来。如果用QTP 进行测试,那么可以有两种处理方法:

1, 对于每个测试用例,你输入测试用例中的数据,然后录制一个Action;然后修改 每个 Action的属性,让它成为 Reusable Action; 最后 写一个大的脚本, 它调用这 7个 Action。 以后 你只运行 这个大的脚本就可以了。
  这种方法的优点是思路清晰、简单,方便添加检查点;优点是简单,缺点是 太烦了,可能有许多重复操作。

2, 对一个测试用例录制一个Action 后, 对这个Action 中用到的用户名和密码进行参数化。这样 这7个测试用例中的数据都被用到了。 这需要你写判断语句来处理 用户名和密码是非正常输入时的情况。需要注意的是 你要把 用户名和密码是非正常输入时出现 的错误信息要在对象库里面。这种方法的优点: 代码少,利于以后的维护;缺点是:实现此思路有一定的难度,需要你对QTP有深入的了解。

  具体操作 还是你自己去完成吧。

[ 本帖最后由 walker1020 于 2006-9-13 10:53 编辑 ]
作者: QA_BAY    时间: 2006-9-1 17:48
原帖由 walker1020 于 2006-8-31 19:51 发表
Browser("护照办理").Dialog("Microsoft Internet Explorer").Static("您已经申请了此业务,业务编号是8000000484").Check(CheckPoint("您已经申请了此业务")) 是 QTP 增 ...

qtp 中的检查点是可以作为判断条件的,walker1020 可以试一下!
作者: walker1020    时间: 2006-9-1 18:06
原帖由 QA_BAY 于 2006-9-1 17:48 发表

qtp 中的检查点是可以作为判断条件的,walker1020 可以试一下!


谢谢! 我回去试试!
作者: walker1020    时间: 2006-9-1 18:38
原帖由 QA_BAY 于 2006-9-1 17:48 发表

qtp 中的检查点是可以作为判断条件的,walker1020 可以试一下!


报告斑竹,俺已经试验了, 的确就像你说的那样,是可以 QTP 中的检查点是可以作为判断条件的。
作者: walker1020    时间: 2006-9-1 18:40
标题: To kittychen20
我说的“qtp 中的检查点是不可以作为判断条件的” 是错误的。 本斑竹在此作深刻检讨,罚自己回去把 QTP Manual 看三遍。 呵呵!

[ 本帖最后由 walker1020 于 2006-9-1 19:56 编辑 ]
作者: kittychen20    时间: 2006-9-2 09:43
原帖由 walker1020 于 2006-9-1 18:40 发表
我说的“qtp 中的检查点是不可以作为判断条件的” 是错误的。 本斑竹在此作深刻检讨,罚自己回去把 QTP Manual 看三遍。 呵呵!



呵呵.人非圣贤,熟能无过,
既然可以做为检测点的话,我又想请问你了,为什么当要检测的内容没有出现的时候,
程序无法执行下去呢?  
是我的设置上有问题,还是有其他的办法可以解决.

另外对于那个exist的语句,当不存在的时候,好象执行得比较慢.速度不如存在的时候快.
作者: yangkinki    时间: 2006-9-2 11:54
那要看你的条件是如何设置的了,
if 检测成功 then
     ...
     else
     ...
end if

另外对于那个exist的语句,当不存在的时候,好象执行得比较慢.速度不如存在的时候快.
这个是运行的问题,与存在不存在时运行的脚本有关系,如果脚本正确,那是正常的
作者: skyzhu    时间: 2006-9-3 21:26
exist(秒数)    帮助里好像有
作者: kittychen20    时间: 2006-9-8 10:52
谢谢21#的.是可以设置参数的.但是我用参数
exist(0),好象也没有快到哪里去.
作者: gyn    时间: 2006-9-15 11:40
认真看了以上各位的讨论,也解决了我的一些疑惑,我现在想问问我的理解正确吗。

就是一个B/s的测试,页面上那么多的输入项,
如果每个输入项都得检测输入的值正确与否,做这样的测试
应该是一个怎样的思路呢?

这个问题我也一直有疑惑,一个基本资料录入页面,可能就有30左右各输入项。

目前我是把每个输入框的检测单独录制下来,作为一个单独的action,再作些必要的代码修改,
然后.依次调用这些ACTION,想问下,各位用了这么久有没有什么其他好的方式可以向我推荐.
自己先谢谢了

难道是就这个页面的输入项,就录30多个action吗

14#楼wolker1020的举例,是就2个输入项,用户名和密码作的举例,在第一种方法说录7个action(因为有7个案例),第二种是参数化的方法,思想应该一样的

可是那么30多个输入项每个输入项比方说有3个案列,那么是不是要录制100多个action吗

才开始学习,可能问题比较幼稚,可笑,请大家不要见笑,谢谢
作者: walker1020    时间: 2006-9-29 10:26
如果完全按照我说的第二种方法,确实是需要录制100多个action 的。但刚才我想到了一种折中的方法: 先把每组数据都输入到这30多个输入项里,根据出现的错误信息分组,然后根据分组的数量进行录制。 举例来说,如果你有90组数据(每组数据都对于着一个测试用例),你先手工把着90组数据输入到这30个输入项里,先看看出现的系统提示信息有多少种情况。一般来说,尽管输入的数据不同,但总有一些会出现相同的提示信息。例如,如果是密码错误,系统就会提示“密码有误”。我想不会有90种系统提示信息吧? 如果有10种提示信息,那么你只录制10组数据,输入每组数据后都出现一种提示信息就可以了。当然,你还需要自己写判断语句,如果脚本运行到第1到9行的数据,那么出现的错误提示信息是 第一种等。

这种方法综合了我在#14说的那两种方法的优点,又尽量克服了它们的缺点。具体由你自己去实现吧。

测试人员要善于思考,要用于创新,发挥你的主观能动性,我相信你一定会想出合适的解决方案!

[ 本帖最后由 walker1020 于 2006-9-29 10:28 编辑 ]
作者: gyn    时间: 2006-10-16 15:30
标题: 谢谢,walker的耐心解答
虽然动手还是有一段距离,不过让我大概了解了起原理
作者: mailtowy    时间: 2007-1-29 11:58
受益非浅,顶了。
作者: Lola1123    时间: 2007-3-14 14:49
标题: 请帮忙
Browser("TenantList").Page("TenantDef").WebList("lstKAM").Select "Chen Xin Li"
Browser("TenantList").Page("TenantDef").WebList("lstConsultant").Select "Chen Xin Li"
Browser("TenantList").Page("TenantDef").Image("HyperLink").Click
Browser("TenantList").Window("DialogFrame -- WebPage").Page("DialogFrame").Frame("Frame").Image("HyperLink").Click  

Browser("TenantList").Window("DialogFrame -- Web Page").Window("DialogFrame -- Web Page").Page("DialogFrame").Frame("Frame").WebList("lstBUCD").Select "A&D"        ‘问题所在

Browser("TenantList").Window("DialogFrame -- Web Page").Window("DialogFrame -- Web Page").Page("DialogFrame").Frame("Frame").WebList("lstCostCenter").Select "P1201010"
Browser("TenantList").Window("DialogFrame -- Web Page").Window("DialogFrame -- Web Page").Page("DialogFrame").Frame("Frame").WebButton("OK").Click
Browser("TenantList").Window("DialogFrame -- Web Page").Page("DialogFrame").Frame("Frame").WebEdit("WebEdit").Set "2000"
Browser("TenantList").Window("DialogFrame -- Web Page").Page("DialogFrame").Frame("Frame").WebButton("OK").Click

在选择“WebList("lstBUCD").Select "A&D"” 之前,通过object spy 和object repository 添加对点击按钮的识别,但录制完毕后,添加的对象仍然不能被识别;曾尝试使用添加virtual object来解决此问题,仍不能成功;请高手们帮忙!
作者: handle    时间: 2007-4-8 21:29
顶下下
作者: FLY000    时间: 2007-7-11 21:37
sdlkfj2
作者: 飞天侠    时间: 2007-8-5 16:45
好东西
作者: hdgx    时间: 2007-9-24 11:47
顶一下先
作者: hdgx    时间: 2007-9-24 11:47
顶一下先顶一下先
作者: kankan520    时间: 2007-9-25 15:35
好东西啊
作者: pxwcypx    时间: 2007-10-26 16:49
学习学习
作者: timfung    时间: 2010-12-14 10:47

作者: sophiashan07    时间: 2010-12-17 11:32
我公司2010年6月份刚在纳斯达克上市,现在要找一名自动化测试组长,薪资福利良好:

我们项目组需要招聘自动化测试组组长,职位信息如下:
1.计算机相关专业本科以上学历,熟悉软件工程师学原理;
2.软件测试相关经验3年以上,其中至少包括2年功能自动化测试经验;
3.熟悉QTP工具的使用,了解QTP原理和对象识别机制;
4.熟悉VBScript脚本语言,能进行相关自动化脚本函数的编写;
5.较强的语言表达和文档编写能力及良好的沟通技巧;
6.有金融银行基础业务知识经验、有网银业务经验为佳;
7.有自动化框架编写、设计经验和软件开发经验有团队管理经验为佳;
8.熟悉Java、J2EE 、WebSphere 、Application Serve、DB2、Oracle等为佳
9.有Unix平台的使用经验(AIX/Solaris/HPUX/Linux)为佳;
欢迎各专业人士来信探讨,谢谢:
shanjing1983@163.com
sophiashan07@hotmail.com




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2