51Testing软件测试论坛

标题: 关于对象识别 [打印本页]

作者: qsj_shao    时间: 2006-7-4 20:46
标题: 关于对象识别
如下代码
strtext1 = "没有可接收非报关货物审批信息"
strtext2 = "接收非报关货物审批信息成功"
str = VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("labStatus").GetTOProperty("text")
str1= VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("labStatus_1").GetTOProperty("text")
If  VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("text:="&strtext1).Exist Then
     msgbox “1”
elseif VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("text:="&strtext2).Exist then
     msgbox "2"
else
     msgbox "3"
End If
调试过程中变量str的值为"接收非报关货物审批信息成功",str1的值为"没有可接收非报关货物审批信息"
对象库中在VbWindow("FrmReceiveEx")下有两个VbLabel,如调试中的变量所示这两个vblabel(labStatus与labStatus_1)的text属性分别"接收非报关货物审批信息成功"以及"没有可接收非报关货物审批信息"
在if语句中判断当前是否存在一个vblabel,其text属性等于strtext1或strtext2,但当脚本运行时,无论被测试的程序中出现的vblabel的text是等于strtext1还是等于strtext2,都不满足条件而运行到else中的msgbox“3”
不知道是什么原因,请大家指点一下。

[ 本帖最后由 qsj_shao 于 2006-7-5 10:02 编辑 ]
作者: walker1020    时间: 2006-7-4 23:07
标题: 请试试下面的方法
楼主,你的脚本少了一个   End If,你把判断语句改为下面的语句看看:
  
If  VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("text:="&strtext1).Exist Then
      msgbox “1”

Else
      
        If VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("text:="&strtext1).Exist then
              msgbox "2"
       Else
            msgbox "3"
      End If

End If

建议:你自己写脚本时,注意格式的对齐,最好能像我上面的语句一样,同一个逻辑层里面的If、Else 和 End If 对齐。这样就不会发生少了一个End If,同时逻辑关系也比较明确。

[ 本帖最后由 walker1020 于 2006-7-4 23:09 编辑 ]
作者: QA_BAY    时间: 2006-7-5 09:21
楼主那样也没有错误,你对照一下他跟你的写法.你可以查一下HELP
这是楼主的写法:
If value = 1 Then
msgbox "one"
ElseIf value = 2 Then
msgbox "two"
Else
msgbox "not one or two"
End If
这是你的写法
If value = 1 Then
      msgbox "one"
      If value = 2 Then
        msgbox "two"
    Else
       msgbox "three"
     endif
End If


还有一个,如果语法有错,QTP运行的时候会提示语法有错误,直接停止不运行!而楼主可以运行,应该是其它的问题!
作者: walker1020    时间: 2006-7-5 09:46
QA_BAY  版主 ,你好,谢谢你的指点。看来我对VBscript 还不是很熟悉,回去后还要继续学习。
我有一个问题,根据楼主的代码和你的代码我写了下面的代码:

Function  Condition(index )
     index = Cstr(index)
     If   index  = "1" Then
            msgbox "one"
    ElseIf  index  =" 2" Then
          msgbox "two"
    Else
        msgbox "not one or two"
    End If
       
End Function

   index = 1
   Condition(index)

  index = 2
  Condition(index)

   index = 3
  Condition(index)

运行结果是 : QTP依次输出   one ; not one or two ;  not  one or two
按照我写的代码运行后,QTP依次输出   one;   two ; not  one or two   我想这才是楼主想要的结果吧。

  因此楼主的代码还是有问题的, 我写的代码是对的。

[ 本帖最后由 walker1020 于 2006-7-5 09:47 编辑 ]
作者: qsj_shao    时间: 2006-7-5 09:47
反正语法应该没有问题,只是不明白为什么在被测试的程序运行时明确有个vblabel,其text为strtext1或strtext2,但是在if判断后,总到了最后的else语句里,说明运行时就是没有符合条件的vblabel,我已经把对象库中两个vblabel的内容的截图发上来了

[ 本帖最后由 qsj_shao 于 2006-7-5 09:50 编辑 ]
作者: QA_BAY    时间: 2006-7-5 09:51
不好意思,我没有说你的代码有问题
我说的是楼主的语法没有问题.让你误会了!

楼主的脚本当第一个条件成立才可以执行第二句脚本
而你是当脚本一不成功再检查第二句脚本.意思不一样!
看楼主想要什么.
我觉得应该是条件上面可能有问题.

[ 本帖最后由 QA_BAY 于 2006-7-5 09:56 编辑 ]
作者: qsj_shao    时间: 2006-7-5 10:06
我的逻辑是这样的
if 条件1 then (满足条件1)执行语句1
elseif 条件2 then (满足条件2)执行语句2
else (不满足条件1与条件2)执行语句3
现在我对象库里面有两个对象,当程序运行时,其中的一个对象肯定出现,如果对象1出现则满足条件1,如果对象2出现则满足条件2,但是现在无论出现哪一个对象,都跳到else语句,执行语句3了。
不知道是不是我对象库里面的内容不对,还是其他原因
作者: walker1020    时间: 2006-7-5 10:08
标题: 请试试下面的方法
根据我的经验,我猜测是
    VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("text:="&strtext1) 是从来就没有找到过。
    为了定位问题的错误,你可以把判断语句改为下面的语句:

   If  VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("text:="&strtext1).Exist Then
      msgbox “1”
  End If
      
  If VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("text:="&strtext2).Exist then
              msgbox "2"
  End If

然后,在确认 VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("text:="&strtext1) 存在的情况下,运行脚本,看是否有输出 1;在确认 VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("text:="&strtext2) 存在的情况下,运行脚本,看是否有输出 2。  
如果没有,那么 就是 对象存在,可是 QTP 找不到。
作者: walker1020    时间: 2006-7-5 10:11
楼主,你的两个判断条件 怎么都是
VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("text:="&strtext1).Exist  

这不对吧?
作者: walker1020    时间: 2006-7-5 10:12
标题: 请试试下面的代码
把判断部分改为下面的代码后,再去运行脚本

If  VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("text:="&strtext1).Exist Then
      msgbox “1”

Else
      
        If  VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("text:="&strtext2).Exist then
              msgbox "2"
       Else
            msgbox "3"
      End If

End If
作者: QA_BAY    时间: 2006-7-5 10:13
walker1020 提议非常的好!
我也建议一个
你可以先用 StrComp来比较两个串的内容是不是一样,不一样证明不是你想要的结果,用msgbox显示出来!
作者: qsj_shao    时间: 2006-7-5 10:35
原帖由 walker1020 于 2006-7-5 10:12 发表
把判断部分改为下面的代码后,再去运行脚本

If  VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("text:="&strtext1).Exist Then
      msgbox “1”

Else
   ...

按照这些代码修改后,就是跳到最后的else中,说明没有text等于strtext1或strtext2的对象,那意思就是运行时没有这个对象咯?可是如果我将某个条件从vblabel("text:="&strtext1)变成vblabel("labStatus"),labStatus为对象的属性vbname的值,并在对象库中添加该属性,则无论出现的text是strtext1还是strtext2,判断都通过。
用StrComp来比较什么呢?

[ 本帖最后由 qsj_shao 于 2006-7-5 10:46 编辑 ]
作者: QA_BAY    时间: 2006-7-5 10:50
dim strtext1,strtext2,str ,str1,comp1
strtext1 = "没有可接收非报关货物审批信息"
strtext2 = "接收非报关货物审批信息成功"
str = VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("labStatus").GetTOProperty("text")
str1= VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("labStatus_1").GetTOProperty("text")
comp1=strcomp(strtext1,str,0)
If  comp=0 Then
     msgbox “这两个串相等”
else
msgbox str
End If
以上是我的意思.
作者: qsj_shao    时间: 2006-7-5 11:15
返回“这两个串相等“
作者: walker1020    时间: 2006-7-5 11:47
标题: 试试下面的的方法(续)
If  VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("labStatus").Exist Then
      msgbox “1”

Else
      
        If  VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("labStatus_1").Exist then
              msgbox "2"
       Else
            msgbox "3"
      End If

End If
作者: qsj_shao    时间: 2006-7-5 12:18
原帖由 walker1020 于 2006-7-5 11:47 发表
If  VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("labStatus").Exist Then
      msgbox “1”

Else
      
        If  VbWindow("FrmMDI").VbWindo ...

这样就每次都msgbox ”1“了,如果将上面的判断,变成两个if。。。then 。。。end if的话(代码如下),则都满足条件,先执行msgbox ”1“,再执行msgbox ”2“ ,所以是不是我对象库中已识别对象的问题呢
If  VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("labStatus").Exist Then
      msgbox “1”

end if
      
If  VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("labStatus_1").Exist then
            msgbox "2"
Else
            msgbox "3"
End If
作者: walker1020    时间: 2006-7-5 12:58
根据你在第14楼的回复和上面的结果,我的结论是:经过QTP的判断,VbLabel("labStatus") 和VbLabel("labStatus_1")这两个对象是一样的,并且它们都存在于对象库中。具体原因你自己再仔细去查找吧
作者: qsj_shao    时间: 2006-7-7 23:32
多谢两位了,那如果是同一个对象的话,就根本不能以该对象是否出现来做判断条件了,对吗?




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