51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3030|回复: 17
打印 上一主题 下一主题

[原创] 关于对象识别

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2006-7-4 20:46:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如下代码
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 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    2#
    发表于 2006-7-4 23:07:06 | 只看该作者

    请试试下面的方法

    楼主,你的脚本少了一个   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 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
    发表于 2006-7-5 09:21:28 | 只看该作者
    楼主那样也没有错误,你对照一下他跟你的写法.你可以查一下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运行的时候会提示语法有错误,直接停止不运行!而楼主可以运行,应该是其它的问题!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    4#
    发表于 2006-7-5 09:46:09 | 只看该作者
    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 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    [ 本帖最后由 qsj_shao 于 2006-7-5 09:50 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
    发表于 2006-7-5 09:51:05 | 只看该作者
    不好意思,我没有说你的代码有问题
    我说的是楼主的语法没有问题.让你误会了!

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

    [ 本帖最后由 QA_BAY 于 2006-7-5 09:56 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
     楼主| 发表于 2006-7-5 10:06:12 | 只看该作者
    我的逻辑是这样的
    if 条件1 then (满足条件1)执行语句1
    elseif 条件2 then (满足条件2)执行语句2
    else (不满足条件1与条件2)执行语句3
    现在我对象库里面有两个对象,当程序运行时,其中的一个对象肯定出现,如果对象1出现则满足条件1,如果对象2出现则满足条件2,但是现在无论出现哪一个对象,都跳到else语句,执行语句3了。
    不知道是不是我对象库里面的内容不对,还是其他原因
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    8#
    发表于 2006-7-5 10:08:57 | 只看该作者

    请试试下面的方法

    根据我的经验,我猜测是
        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 找不到。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    9#
    发表于 2006-7-5 10:11:20 | 只看该作者
    楼主,你的两个判断条件 怎么都是
    VbWindow("FrmMDI").VbWindow("FrmReceiveEx").VbLabel("text:="&strtext1).Exist  

    这不对吧?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    10#
    发表于 2006-7-5 10:12:42 | 只看该作者

    请试试下面的代码

    把判断部分改为下面的代码后,再去运行脚本

    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
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
    发表于 2006-7-5 10:13:00 | 只看该作者
    walker1020 提议非常的好!
    我也建议一个
    你可以先用 StrComp来比较两个串的内容是不是一样,不一样证明不是你想要的结果,用msgbox显示出来!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
     楼主| 发表于 2006-7-5 10:35:27 | 只看该作者
    原帖由 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 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2006-7-5 10:50:30 | 只看该作者
    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
    以上是我的意思.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
     楼主| 发表于 2006-7-5 11:15:03 | 只看该作者
    返回“这两个串相等“
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    15#
    发表于 2006-7-5 11:47:06 | 只看该作者

    试试下面的的方法(续)

    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
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
     楼主| 发表于 2006-7-5 12:18:55 | 只看该作者
    原帖由 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
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    17#
    发表于 2006-7-5 12:58:40 | 只看该作者
    根据你在第14楼的回复和上面的结果,我的结论是:经过QTP的判断,VbLabel("labStatus") 和VbLabel("labStatus_1")这两个对象是一样的,并且它们都存在于对象库中。具体原因你自己再仔细去查找吧
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18#
     楼主| 发表于 2006-7-7 23:32:54 | 只看该作者
    多谢两位了,那如果是同一个对象的话,就根本不能以该对象是否出现来做判断条件了,对吗?
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-26 05:33 , Processed in 0.078765 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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