51Testing软件测试论坛

标题: 描述性编程,.Exist判断结果为假,应该为真 [打印本页]

作者: 魔力鸟    时间: 2012-8-22 17:19
标题: 描述性编程,.Exist判断结果为假,应该为真
直接用录制的脚本回放结果为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
这个这个这个是什么原因啊???
作者: xjwldlover    时间: 2012-8-22 19:20
找到了多个对象
作者: lantianwei    时间: 2012-8-22 22:22
这种只能自己慢慢debug
msgbox Browser("中国移动网上商城-正品低价,货到付款,正规发票,安全省钱又放").Page("中国移动网上商城-正品低价,货到付款,正规发票,安全省钱又放").Exist
如果为真,再试
msgbox Browser("中国移动网上商城-正品低价,货到付款,正规发票,安全省钱又放").Page("中国移动网上商城-正品低价,货到付款,正规发票,安全省钱又放").Image(这里找个其他的唯一属性看看).Exist

多试吧~
作者: joykao    时间: 2012-8-23 09:17
描述的有问题额。
作者: shingo0109    时间: 2012-8-23 09:40
如果要用描述性编程的话, 这里的file name的值是要用spy看到的那个值, 而不是为录制下来的Image的名称, LZ这里的str (0) = liebiao%203 看起来就是上面那段录制下来的名称吧, 这样写不对的啊, 去对象库里看看你录下来的 liebiao%203对象里的file name属性到底是啥
作者: 魔力鸟    时间: 2012-8-23 22:25
回复 5# shingo0109


    SPY下面的名字叫“liebiao%203.JPG”,是一个图片的链接
作者: shingo0109    时间: 2012-8-24 11:26
回复 6# 魔力鸟


    那语句应该这么写吧:
s = "liebiao%203.JPG"
Browser("中国移动网上商城-正品低价,货到付款,正规发票,安全省钱又放").Page("中国移动网上商城-正品低价,货到付款,正规发票,安全省钱又放").Image("file name:="& s).Exist
作者: shingo0109    时间: 2012-8-24 11:28
回复 6# 魔力鸟


    那语句应该这么写吧:
s = "liebiao%203.JPG"
Browser("xxx").Page("xxx").Image("file name:=" & s).Exist
作者: 魔力鸟    时间: 2012-8-27 10:35
回复 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
作者: 魔力鸟    时间: 2012-8-27 10:36
回复 8# shingo0109


    加了JPG还是不行!
作者: 魔力鸟    时间: 2012-8-27 11:43
回复 4# joykao


    什么问题啊?请明示!我是菜鸟,呵呵
作者: xjwldlover    时间: 2012-8-27 13:51
本帖最后由 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了
作者: 魔力鸟    时间: 2012-8-27 14:57
回复 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”的图片只有一个
你刚刚的解决方法我测试一下,第一个方法不行;
第二个方法看不懂啥意思,是我脚本实现的那个意思不?
谢过!
作者: xjwldlover    时间: 2012-8-27 15:51
  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 中,再使用。
我表达清楚了吗
作者: 魔力鸟    时间: 2012-8-27 17:07
回复 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”现在日志中没显示

多谢,三鞠躬!




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