51Testing软件测试论坛

标题: QTP中使用 Exist 的问题 [打印本页]

作者: higkoo    时间: 2007-6-9 10:52
标题: QTP中使用 Exist 的问题
现在测一个Web程序,现在碰到一个很神奇的问题。sdlkfj4


    我上传一个文件,上传过程中有进度条。上传完成进度条就消失了。


我就用QTP去判断,直要有进度条就继续等待:

do Until 进度条.exist(1) = False
    wait(1)
loop

后来发现程序一直都在等待,上传完了还在等待。
Debug才发现   进度条.exist(1) = True 一直都成立。


原因:进度条和上面的文字只是一个动画,开始上传就为可见;上传完成即为不可见。但一直都是存在的!

所以,QTP简直太“智能”了!sdlkfj5

   但我使用 进度条.object 方法 来调用它的 Visible 属性 居然也一直都为True。
   获取运行时属性也为True。


不知是QTP自身的问题,还是我哪里思路有问题?sdlkfj8 sdlkfj8 sdlkfj8


   目前有办法可以解决:不去识别进度条,去识别上传列表。   
(可以解决部分问题,但列表数据多之后脚本就不好写)

   能识别到进度条 是最好的解决办法, 如何去识别进度条呢?
作者: sidneylover    时间: 2007-6-9 13:14
有没有用同步点试试
作者: higkoo    时间: 2007-6-9 14:29
标题: 同步点
原帖由 sidneylover 于 2007-6-9 13:14 发表
有没有用同步点试试



  sdlkfj1   你所说的同步点,指的是?

[ 本帖最后由 higkoo 于 2007-6-11 16:28 编辑 ]
作者: zhuyuancan    时间: 2007-6-9 16:36
进度条这个可以用同步点来解决的,不用那么麻烦的吧,,查阅一下同步点的相关知识吧
作者: zhuyuancan    时间: 2007-6-9 16:41
http://blog.51testing.com/?26649/action_viewspace_itemid_808.html
作者: winfood    时间: 2007-6-9 19:54
原帖由 higkoo 于 2007-6-9 10:52 发表
现在测一个Web程序,现在碰到一个很神奇的问题。sdlkfj4
do Until 进度条.exi ...

如果这个进度条一直存在于页面上,而且Visible属性也没有变化。可以再检查和对比一下它在可见和不可见状态时,本身的某项属性有没有发生变化的。
或者寻求一下开发人员的帮助,看看进度条的显示和隐藏是如何控制的。
如果存在这样的属性或者状态,把他们作为判断的条件就行了。
作者: wgx198302    时间: 2007-6-10 08:13
那进度条一直没关(在qtp中),程序都死循环了.
作者: yangkinki    时间: 2007-6-10 10:30
用SPY看一下这个对象的属性,包括运行时和运行后的属性值, 我想取属性值取错了,如果是运行完之后这个对象还存在的话,那就用visible这个属性试试
作者: higkoo    时间: 2007-6-10 13:54
标题: 回复
原帖由 wgx198302
发表
那进度条一直没关(在qtp中),程序都死循环了.


  是的,程序一直都等下去……   死循环!


原帖由 yangkinki
  发表
用SPY看一下这个对象的属性,包括运行时和运行后的属性值, 我想取属性值取错了,如果是运行完之后这个对象还存在的话,那就用visible这个属性试试
.


理论上是可行的,但我用Visible试过了,无论是否可见返回值都是True。

原帖由 winfood
发表
如果这个进度条一直存在于页面上,而且Visible属性也没有变化。可以再检查和对比一下它在可见和不可见状态时,本身的某项属性有没有发生变化的。
或者寻求一下开发人员的帮助,看看进度条的显示和隐藏是如何控制的。
如果存在这样的属性或者状态,把他们作为判断的条件就行了。


周一回公司用Spy试试,有想过用其它属性去试,但没想过去查看和比较他们的属性哪里不一样。

sdlkfj6

原帖由 yangkinki

发表

用SPY看一下这个对象的属性,包括运行时和运行后的属性值, 我想取属性值取错了,如果是运行完之后这个对象还存在的话,那就用visible这个属性试试.


Visible是不行的了,不过确实要用Spy试一下sdlkfj2
作者: gotolife    时间: 2007-6-10 16:28
sdlkfj5    可以用检查点来判断
作者: higkoo    时间: 2007-6-10 18:49
标题: 检查点不行
原帖由 gotolife 于 2007-6-10 16:28 发表
sdlkfj5    可以用检查点来判断



   检查点的结果和 上面使用 属性.exist + wait 的结果是一样的。

我专门用checkpoint 试过,不管是否出现进度条,Checkpoint都为Pass


还是要看看两者有何不同吧。
作者: gotolife    时间: 2007-6-10 21:33
原帖由 higkoo 于 2007-6-10 18:49 发表



   检查点的结果和 上面使用 属性.exist + wait 的结果是一样的。

我专门用checkpoint 试过,不管是否出现进度条,Checkpoint都为Pass


还是要看看两者有何不同吧。




用Bitmap检查点
作者: higkoo    时间: 2007-6-10 22:08
标题: 是个动画
原帖由 gotolife
发表

用Bitmap检查点





     那个进度条是个动画, 用图片检查点,应该是失败的吧……   sdlkfj7



  图片检查点只能检查静态图片的
作者: gotolife    时间: 2007-6-10 22:28
原帖由 higkoo 于 2007-6-10 22:08 发表





     那个进度条是个动画, 用图片检查点,应该是失败的吧……   sdlkfj7



  图片检查点只能检查静态图片的



sdlkfj8 不是image检查点,是Bitmap检查点

把正常情况下,即该动画不可见的时候,在动画位置进行截图
点击上传后,可以延迟1秒
然后进入循环监听,若该位置的动画不可见时,该位置的截图和检查点的截图是一致的,将返回True,否则,动画不消失,截图上会存在进度条,与检查点的截图不一致,将返回False
作者: henhenchen    时间: 2007-6-11 07:30
标题: 这种问题.只能用DOM 的方法来解决. 打开这
个页面的SOURCE CODE 看看有什么规律. 方便的话把SOURCE CODE 贴上来. 我帮你看看.





原帖由 higkoo 于 2007-6-9 10:52 发表
现在测一个Web程序,现在碰到一个很神奇的问题。sdlkfj4


    我上传一个文件,上传过程中有进度条。上传完成进度条就消失了。


我就用QTP去判断,直要有进度条就继续等待:

do Until 进度条.exi ...

作者: henhenchen    时间: 2007-6-11 08:34
标题: 回复 #15 henhenchen 的帖子
我认为这"进度条"肯定在一个TABLE 的CELL 中或什么地方. 去判断这个CELL或"什么地方" 的可见性. 应该可以.
作者: 金城月    时间: 2007-6-11 10:39
不是image检查点,是Bitmap检查点

把正常情况下,即该动画不可见的时候,在动画位置进行截图
点击上传后,可以延迟1秒
然后进入循环监听,若该位置的动画不可见时,该位置的截图和检查点的截图是一致的,将返回True,否则,动画不消失,截图上会存在进度条,与检查点的截图不一致,将返回False


'不好意思,请问怎样可以“循环监听”?
作者: kursk    时间: 2007-6-11 11:19
原帖由 gotolife 于 2007-6-10 22:28 发表



sdlkfj8 不是image检查点,是Bitmap检查点

把正常情况下,即该动画不可见的时候,在动画位置进行截图
点击上传后,可以延迟1秒
然后进入循环监听,若该位置的动画不可见时,该位置的截图和检查点的截 ...



这个方法真实绝了,俺太佩服你了
作者: kursk    时间: 2007-6-11 11:23
原帖由 higkoo 于 2007-6-9 14:29 发表



  sdlkfj1 请问大侠一个很 羞涩 的问题:  什么是同步点 啊?



同步点waitproprety 不能解决这个问题——如果网页元素的属性不发生改变

但是我有点想不通,等待图片从不显示到显示,那么它的visable的属性一定发生了改变,LZ是不是应该询问开发工程师这段代码的问题?

要不用上面说的BITMAP检查我想也可以啊

等着LZ的好消息
作者: higkoo    时间: 2007-6-11 11:53
标题: 被这个问题给征服了
我尝试了用SPY,发现属性都是一样的。
而且运行过程,我使用脚本记录它的属性:
*********************************************************************************
With .Page("Page").Frame("myFrame")
x="html tag"
y="html id"
z="innertext"
l="visible"
    a = .WebElement("WebTable").GetROProperty (""&x)
    b = .WebElement("WebTable").GetROProperty (""&y)
    c =  .WebElement("WebTable").GetROProperty (""&z)
    d =  .WebElement("WebTable").GetROProperty (""&l)
'在点击“上传”按钮前,把控件的属性显示在报告里
reporter.ReportEvent 0,"点击前", x&"="& a &chr(13)&y&"="& b & chr(13) &z &"="& c&chr(13)&l&"="& d
     .WebButton("上传").Click
   wait(1)
    a = .WebElement("WebTable").GetROProperty (""&x)
    b = .WebElement("WebTable").GetROProperty (""&y)
    c =  .WebElement("WebTable").GetROProperty (""&z)
    d =  .WebElement("WebTable").GetROProperty (""&l)
'在点击“上传”按钮后,把控件的属性显示在报告里
reporter.ReportEvent 0,"点击后", x&"="& a &chr(13)&y&"="& b & chr(13) &z &"="& c&chr(13)&l&"="& d  
End With
*********************************************************************************
运行完成,查看报告:

点击前 html tag=TD
html id=
innertext=正在上传请稍等...
visible=True
Passed 2007-6-11 - 11:27:35

点击后 html tag=TD
html id=
innertext=正在上传请稍等...
visible=True
Passed 2007-6-11 - 11:27:40

奇怪的是,点击前明明是看不见的,visible应该为false才对。偏偏为true,其它可识别的属性值完全一样。
真是没办法了……

[ 本帖最后由 higkoo 于 2007-6-11 13:03 编辑 ]
作者: higkoo    时间: 2007-6-11 11:56
标题: 其它属性我也试过了
GetTOProperty
属性名
描述
abs_x
对象相对于屏幕的绝对 X 坐标(左侧)(以像素为单位)。
abs_y
对象相对于屏幕的绝对 Y 坐标(顶部)(以像素为单位)。
class
对象的类(className 属性)。
height
对象的高度(以像素为单位)。
html id
对象的 HTML 标识符。
html tag
对象的 HTML 标记。
index
QuickTest 分配给对象的顺序标识符,用于指明对象在代码中显示时相对于带有另外的相同描述的其他对象的顺序。此属性不能与 GetROProperty 一起使用。
innerhtml
对象的开始标记和结束标记之间包含的 HTML 代码。
innertext
包含在对象的开始标记和结束标记之间的文本。
location
QuickTest 分配给对象的顺序标识符,用于指明对象在窗口、帧或对话框中的显示位置。按照从上到下、从左到右的顺序来分配值。此属性不能与 GetROProperty 一起使用。
outerhtml
对象的 HTML 代码及其内容。仅在 Internet Explorer 中受支持。
outertext
对象的文本。仅在 Internet Explorer 中受支持。
RepositoryName
对象存储在对象库中时的名称。
注意:此属性仅当在加载了 Siebel 加载项的 Siebel 测试自动化环境中工作时相关。
SiebelObjType
HTML 元素表示的对象类型。
注意:此属性仅当在加载了 Siebel 加载项的 Siebel 测试自动化环境中工作时相关。
UIName
对象显示在用户界面中的名称。
注意:此属性仅当在加载了 Siebel 加载项的 Siebel 测试自动化环境中工作时相关。
visible
指明此对象是否可见。
注意:只有 True 和 False 是该属性的有效值。1 和 0 是无效值。
width
对象的宽度(以像素为单位)。
x
对象相对于帧的 X 坐标(左侧)(以像素为单位)。
y
对象相对于帧的 Y 坐标(顶部)(以像素为单位)。

除了上面列出的属性,用其它属性,程序都报错“无效的过程调用或参数”。

   sdlkfj9  彻底被这个问题征服了……

作者: higkoo    时间: 2007-6-11 12:13
标题: 同步点也不行
原帖由 gotolife 于 2007-6-10 22:28 发表

把正常情况下,即该动画不可见的时候,在动画位置进行截图
点击上传后,可以延迟1秒
然后进入循环监听,若该位置的动画不可见时,该位置的截图和检查点的截 ...  


  这个图片是个动画,即使使用了wait(1),下次在wait(1)时,进度条的位置也不一定一样。

  和用图片检查点检查动画一样,


原帖由 kursk 于 2007-6-11 11:23 发表



同步点waitproprety 不能解决这个问题——如果网页元素的属性不发生改变

但是我有点想不通,等待图片从不显示到显示,那么它的visable的属性一定发生了改变,LZ是不是应该询问开发工程师这段代码的问题 ...


同步点结果和使用Wait做循环一样,唯一的好处就是有最长的时间限制,不会一直等下去。
郁闷的就是visible为什么不变???

开发工程师说 “只有一行代码,就是 点了上传就 可见,上传完成就 不可见。”
作者: higkoo    时间: 2007-6-11 12:16
QUOTE:
原帖由 gotolife 于 2007-6-10 22:28 发表

把正常情况下,即该动画不可见的时候,在动画位置进行截图
点击上传后,可以延迟1秒
然后进入循环监听,若该位置的动画不可见时,该位置的截图和检查点的截 ...  

现在的难点就是 不能确定 “若该位置的动画不可见时”, 不知它何时消失,

如果我知道它消失了(文件上传完了),就可以直接进行下一步操作了。

这个窗口是弹出式的,被禁用了右键,看不到源代码。sdlkfj7
作者: henhenchen    时间: 2007-6-11 12:39
标题: 回复 #23 higkoo 的帖子
被禁用了右键,看不到源代码. 是个大问题. 给你转个以前的贴子.希望有帮助

http://bbs.51testing.com/thread-73344-1-1.html
作者: higkoo    时间: 2007-6-11 13:11
标题: 很有启发
原帖由 henhenchen 于 2007-6-11 12:39 发表
Browser("Find Flights, Vacation").Page("Find Flights, Vacation").object.getElementById("returnDateRow").style.visibility



很有启发,我决定,想办法找他们要源代码。

[ 本帖最后由 higkoo 于 2007-6-11 13:16 编辑 ]
作者: higkoo    时间: 2007-6-11 15:00
标题: 回复 #25 higkoo 的帖子
document.all.process.style.display = 'block';//显示进度条


<%@ include file="/process.jsp" %> // 加载进度条

<div id='process' style="display:none">正在上传请稍等...<marquee direction="right"> //隐藏进度条
作者: higkoo    时间: 2007-6-11 15:08
msgbox   .WebElement("WebTable").Object.getElementsByTagName("TD").style.display


对象不支持此属性或方法
作者: higkoo    时间: 2007-6-11 16:08
标题: 哈哈
问题已解决:

With .Window("-- 网页对话框")
        With .Page("age").Frame("myFrame")

                .WebButton("上传").Click
                m=.WebElement("WebTable").Object.all.process.style.display

                        Do until m="none" ' else m="block'"
                                wait(1)
                                m=""& .WebElement("WebTable").Object.all.process.style.display
                        Loop
        End With
End With

多谢 “henhenchen”兄的提示!  顺腾摸到瓜   sdlkfj3
作者: yt1985cncn    时间: 2007-6-15 13:45
还是试试用SPY抓属性值比较下吧~~
作者: dyq    时间: 2007-7-16 14:29
exist 很有用的
作者: garyyes    时间: 2007-7-17 00:59
原帖由 higkoo 于 2007-6-9 10:52 发表
现在测一个Web程序,现在碰到一个很神奇的问题。sdlkfj4


    我上传一个文件,上传过程中有进度条。上传完成进度条就消失了。


我就用QTP去判断,直要有进度条就继续等待:

do Until 进度条.exi ...


很容易解决啊,只要改改代码就行:

do Until 进度条.exist(1) = true and 进度条.getRoproperty("visible") = true
           wait(1)
loop
作者: evergreenwang    时间: 2007-7-18 21:37
标题: 回复 #1 higkoo 的帖子
支持!!!!!!!!!!!!!!!!!!!!!!!!!!!
作者: higkoo    时间: 2007-7-28 11:13
标题: 回复 #31 garyyes 的帖子
这么简单我还用得着上来发贴吗?
作者: surlary    时间: 2007-7-30 10:33
用Browser("Browser").Page("Page").Sync试过吗
作者: higkoo    时间: 2007-7-30 13:03
原帖由 surlary 于 2007-7-30 10:33 发表
用Browser("Browser").Page("age").Sync试过吗



没有喔

下次再测试这个项目的时候再试试……     sdlkfj3
作者: anglix    时间: 2007-8-18 18:15
标题: 回复 #1 higkoo 的帖子
好贴! 收藏
作者: yabest    时间: 2007-8-18 21:19
这种问题遇到是很正常的,但是遇到后,就没必要跟自己过不去,想办法绕过去!搞自动化要讲究效率!

不是有文字“正在上传请稍等”嘛,判断这个文字是否存在和显示,应该就可以了!
作者: kenva    时间: 2010-4-6 14:40
我也遇到相同问题。先回复,再看看各位的回复。。。。




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