51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3182|回复: 14
打印 上一主题 下一主题

[原创] 描述性编程,.Exist判断结果为假,应该为真

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2012-8-22 17:19:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
直接用录制的脚本回放结果为True,使用描述性编程之后就为:false了。
脚本如下:
'gtgt = Browser("中国移动网上商城-正品低价,货到付款,正规发票,安全省钱又放").Page("中国移动网上商城-正品低价,货到付款,正规发票,安全省钱又放").Image("liebiao%203").Exist
'msgbox gtgt////////这个是录制的脚本结果为True(是正确的)


JJJ = Browser("中国移动网上商城-正品低价,货到付款,正规发票,安全省钱又放").Page("中国移动网上商城-正品低价,货到付款,正规发票,安全省钱又放").Image("file name:="&str (0)).Exist
msgbox JJJ //////这边是描述性编程,结果为False

我取到str(0)结果为:liebiao%203
这个这个这个是什么原因啊???
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2012-8-22 19:20:18 | 只看该作者
找到了多个对象
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2012-8-22 22:22:52 | 只看该作者
这种只能自己慢慢debug
msgbox Browser("中国移动网上商城-正品低价,货到付款,正规发票,安全省钱又放").Page("中国移动网上商城-正品低价,货到付款,正规发票,安全省钱又放").Exist
如果为真,再试
msgbox Browser("中国移动网上商城-正品低价,货到付款,正规发票,安全省钱又放").Page("中国移动网上商城-正品低价,货到付款,正规发票,安全省钱又放").Image(这里找个其他的唯一属性看看).Exist

多试吧~
回复 支持 反对

使用道具 举报

  • TA的每日心情
    无聊
    2020-12-8 11:20
  • 签到天数: 605 天

    连续签到: 1 天

    [LV.9]测试副司令

    4#
    发表于 2012-8-23 09:17:41 | 只看该作者
    描述的有问题额。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-4-10 17:57
  • 签到天数: 35 天

    连续签到: 1 天

    [LV.5]测试团长

    5#
    发表于 2012-8-23 09:40:21 | 只看该作者
    如果要用描述性编程的话, 这里的file name的值是要用spy看到的那个值, 而不是为录制下来的Image的名称, LZ这里的str (0) = liebiao%203 看起来就是上面那段录制下来的名称吧, 这样写不对的啊, 去对象库里看看你录下来的 liebiao%203对象里的file name属性到底是啥
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
     楼主| 发表于 2012-8-23 22:25:33 | 只看该作者
    回复 5# shingo0109


        SPY下面的名字叫“liebiao%203.JPG”,是一个图片的链接
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-4-10 17:57
  • 签到天数: 35 天

    连续签到: 1 天

    [LV.5]测试团长

    7#
    发表于 2012-8-24 11:26:54 | 只看该作者
    回复 6# 魔力鸟


        那语句应该这么写吧:
    s = "liebiao%203.JPG"
    Browser("中国移动网上商城-正品低价,货到付款,正规发票,安全省钱又放").Page("中国移动网上商城-正品低价,货到付款,正规发票,安全省钱又放").Image("file name:="& s).Exist
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-4-10 17:57
  • 签到天数: 35 天

    连续签到: 1 天

    [LV.5]测试团长

    8#
    发表于 2012-8-24 11:28:36 | 只看该作者
    回复 6# 魔力鸟


        那语句应该这么写吧:
    s = "liebiao%203.JPG"
    Browser("xxx").Page("xxx").Image("file name:=" & s).Exist
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
     楼主| 发表于 2012-8-27 10:35:40 | 只看该作者
    回复 3# lantianwei


        ghgh = "http://img01.js.10086.cn/mall/userfiles/images/goods/wr78/liebiao%203.jpg"

    Browser("中国移动网上商城-正品低价,货到付款,正规发票,安全省钱又放").Page("中国移动网上商城-正品低价,货到付款,正规发票,安全省钱又放").Image("file name:="&str(0),"src:="&ghgh).Exist
    加了src属性还是不行,还是输出为false
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
     楼主| 发表于 2012-8-27 10:36:35 | 只看该作者
    回复 8# shingo0109


        加了JPG还是不行!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
     楼主| 发表于 2012-8-27 11:43:24 | 只看该作者
    回复 4# joykao


        什么问题啊?请明示!我是菜鸟,呵呵
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2012-8-27 13:51:36 | 只看该作者
    本帖最后由 xjwldlover 于 2012-8-27 13:52 编辑

    直接用录制的脚本回放结果为True,使用描述性编程之后就为:false了。

    obj.Exists()返回False一般有两种情况
    ①页面不存在不存在该对象
    ②根据描述找到多个对象
    根据楼主的说法应该是第②种。
    为什么直接回放就能是True,写描述性变成就是返回False呢?
    可能是因为对象在对象库中默认会被QTP封装上一个属性index,当直接使用对象时,QTP智能识别出该对象并使用。楼主可以注意一下该步骤前是否有个学士帽;当使用描述性编程的时候,就不会给对象默认增加一个index属性了,这时候就无法找到唯一对象,返回就是false。

    问题解决方法:
    ①给描述性的对象增加一个Index属性,我平时很少使用,可能index:=0就可以了
    ②将你的Image("file name:="&str (0))使用description方法修改成一个描述性对象imag。然后使用browser().Page().childObjects(imag)方法看得到几个对象,遍历输出对象的所有属性。然后找到可以唯一辨识你需要的这个对象的属性,把这个属性加入到imag对象中,这样你再使用描述性编程就能唯一找到那个image对象了,再obj.exists(),我相信应该就是True了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
     楼主| 发表于 2012-8-27 14:57:38 | 只看该作者
    回复 12# xjwldlover


        你好:
    Set  Mylink = Description.Create()
    Mylink("html tag").value="IMG"
    set yy =Browser("中国移动网上商城-正品低价,货到付款,正规发票,安全省钱又放").Page("中国移动网上商城-正品低价,货到付款,正规发票,安全省钱又放").ChildObjects(Mylink )
    For i = 0 to yy.count()-1
      z = yy(i).GetRoproperty("file name")
    If z= "liebiao%203.jpg" Then
      Reporter.ReportEvent micPass,"Link Pass","本次图片的名称为:" & z
      Reporter.ReportEvent micPass,"Link Pass","本次图片的位置为:" &i
      My_z=z
    '  msgbox "My_z的值为:" & My_z
    '此时取到的值存到t中
    t = i
    End If
    Next

    /////我是通过如上的脚本得到页面上的所有图片的链接的,其中名字为“liebiao%203.jpg”的图片只有一个
    你刚刚的解决方法我测试一下,第一个方法不行;
    第二个方法看不懂啥意思,是我脚本实现的那个意思不?
    谢过!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
    发表于 2012-8-27 15:51:02 | 只看该作者
    1. set desc = description.Create
    2. desc.Add "micClass", "Link"
    3. desc.Add "html tag" ,"A"
    4. set Objs = Browser("title:=百度一下,你就知道").page("title:=百度一下,你就知道").ChildObjects(desc)
    5. For i = 0 to Objs.Count -1
    6. set attrs = Objs(i).Object.Attributes
    7. For j = 0 to attrs.Length -1
    8. print j&"---"&attrs(j).Name&attrs(j).value
    9. Next
    10. Next
    复制代码

    假如你通过ChildObjects(desc)获得四个对象,那么你现在应该只需要其中一个,比如是‘新闻’这个link,但是你不知道他和其他三个对象的区别。
    通过输出对象的DOM属性(即集合Objs(i).Object.Attributes中的值对),来找到可以区分新闻link与图片linK的属性innerText,然后把innerText的属性添加到desc 中,再使用。
    我表达清楚了吗
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
     楼主| 发表于 2012-8-27 17:07:45 | 只看该作者
    回复 14# xjwldlover


        你好:
    Set  oMylink = Description.Create()
    oMylink("html tag").value="IMG"
    set oyy =Browser("").Page("").ChildObjects(oMylink )
    For ooi = 0 to  oyy.count()-1
    '        msgbox oyy.count()-1
    set mattrs = oyy(ooi).object.Attributes

    For ooj = 0 to mattrs.length-1
    '        msgbox "mattrs" & mattrs.length-1

    print ooj&"---"&mattrs(ooj).Name & "---------"&mattrs(ooj).value
    next
    next
    我是按照你的脚本意思修改了一下,其中oyy.count()-1值是52, mattrs.length-1的值为99,现在打印出来的日志中只有1001行,按照道理应该是52*99行,不知道怎么会少了一部分,我想找的应该是属性“file name” 值为“liebiao203”现在日志中没显示

    多谢,三鞠躬!
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-8 03:26 , Processed in 0.087983 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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