51Testing软件测试论坛

标题: qtp执行中为什么某两个page会同时都exist [打印本页]

作者: shaofei19820625    时间: 2010-1-6 17:14
标题: qtp执行中为什么某两个page会同时都exist
[attach]58714[/attach]
以上脚本是用来测试某个登录功能的。
Browser("登录我的空间 - 金******").Page("登录我的空间 - 金******")这个是登陆页面
Browser("登录我的空间 - 金手杖商城系统").Page("个人空间 -_2")这个是登陆成功后进入的页面。
用户名、密码和登录后的文本检查,都是用datatable来实现的。
[attach]58715[/attach]
程序里我这里用了一个IF else想实现的是:如果登录页面存在,那么表示登录错误,文本检查点在登录页面Browser("登录我的空间 - 金******").Page("登录我的空间 - 金******")进行检查,否则到Browser("登录我的空间 - 金手杖商城系统").Page("个人空间 -_2")这个登录成功后的页面进行登录成功的文本检查。

问题是:
图1中进行debug的时候,才开始第一次循环,应该是登陆不成功的,那么我的想法是Browser("登录我的空间 - 金******").Page("登录我的空间 - 金******").exist是true的,另外一个应该是false的,但是看上图1中,两个都为true。哪位高手能帮忙解释一下?
作者: shaofei19820625    时间: 2010-1-7 09:14
有没有人能给回答一下的。万分感谢了
作者: souchy    时间: 2010-1-7 09:32
这个问题我也很想知道答案!
因为我之前也常碰到类似的问题,明明页面上没有显示,但用exist、visible去判断,得到的结果却都是True。
作者: onlonely    时间: 2010-1-7 10:01
这是你对QTP对象的EXIST方法不熟悉造成的
exist方法,判断选择的对象是否实际存在,判断使用的规则来源于你在对象库中该对象的属性.
Browser("登录我的空间 - 金******").Page("登录我的空间 - 金******") 这个对象
那么你是否实际确定了,对象库中
Browser("登录我的空间 - 金******").Page("登录我的空间 - 金******")
这个对象所记录的属性,实际是否存在呢,
据我了解,page页面一般只记录URL这样一个属性,如果你登陆后URL不改变,那么这个判断永远都会成立
作者: shaofei19820625    时间: 2010-1-8 10:14
原帖由 onlonely 于 2010-1-7 10:01 发表
这是你对QTP对象的EXIST方法不熟悉造成的
exist方法,判断选择的对象是否实际存在,判断使用的规则来源于你在对象库中该对象的属性.
Browser("登录我的空间 - 金******").Page("登录我的空间 - 金******") 这个对象
...

我的理解:qtp对象分测试对象(录制时记住对象)和运行时对象(在运行会话过程中标识对象)
所以我的理解是对象库中的都是测试对象,录制时就记住的。那么exist应该是用来判断运行时是否存在的才对啊;如果是判断对象库里是否存在的话,那是肯定存在的啊,如果不存在运行的时候直接就提示对象找不到了的。
以上两个page保存的值里,属性分别都保存了url和title。而且name,url和title的值都是不同的呢

[ 本帖最后由 shaofei19820625 于 2010-1-8 10:20 编辑 ]
作者: shaofei19820625    时间: 2010-1-8 11:16
高手们欢迎来解答......hoho
作者: wugecat    时间: 2010-1-8 11:35
打开你的对象库,将对象的"Enable Smart Identification"选项置为"False"
作者: shaofei19820625    时间: 2010-1-11 11:23
原帖由 wugecat 于 2010-1-8 11:35 发表
打开你的对象库,将对象的"Enable Smart Identification"选项置为"False"

我刚刚试了一下,即便我去设置为false,以上说的两个page在exist判断的时候,还是同时为true的呢。
作者: borisman    时间: 2010-1-15 10:16
Browser("登录我的空间 - 金******").Page("登录我的空间 - 金******").WinEdit("username").Set DataTable("D", dtGlobalSheet)
Browser("登录我的空间 - 金******").Page("登录我的空间 - 金******").WinEdit("password").SetSecure DataTable("C", dtGlobalSheet)
Browser("登录我的空间 - 金******").Page("登录我的空间 - 金******").WinButton("OK").Click
if Browser("登录我的空间 - 金******").Page("登录我的空间 - 金******").Check (Checkpoirt("LoginOK"))
   Browser("登录我的空间 - 金******").Page("登录我的空间 - 金******").WebElement("退出系统").Click
   Browser("登录我的空间 - 金******").Page("登录我的空间 - 金******").WebButton("是").Click
   reporter.ReportEvent micPass,"登陆成功","登陆成功"
else
   Browser("登录我的空间 - 金******").Dialog("Windows Internet Explorer").WinButton("确定").Click
   reporter.ReportEvent micFail,"登陆失败","用户名或密码错误"

[ 本帖最后由 borisman 于 2010-1-15 10:18 编辑 ]
作者: garyyes    时间: 2010-1-16 19:31
给我看看你的PAGE是使用什么属性来识别的?!建议你使用 title 属性来识别。
作者: 风雪夜归人    时间: 2010-1-18 10:40
Browser("登录我的空间 - 金手杖商城系统").....还是露底了。

我也经常遇到这种情况,有时它就是存在的,不管是frame还是page,还是Button,都一样,我建议在两个页面分别执行以下脚本:
MsgBox Browser("登录我的空间 - 金******").Page("登录我的空间 - 金******").GetRoProperty("height")
MsgBox Browser("登录我的空间 - 金******").Page("登录我的空间 - 金******").GetRoProperty("width")
MsgBox Browser("登录我的空间 - 金手杖商城系统").Page("个人空间 -_2").GetRoProperty("height")
MsgBox Browser("登录我的空间 - 金手杖商城系统").Page("个人空间 -_2").GetRoProperty("width")

分别看下它们的大小,估计另外的页面,高和宽都是为0的。。可以试试
作者: zchtest    时间: 2010-1-19 16:40
建议一般不用整个页面存在的方法来作为判断标准,最好是用页面中的某个子对象作为判断标准。例如:点了登录之后如果登录button仍然存在,就是不成功。如果成功,就那登录后的页面中某个对象是存在的。例如:
if Browser("登录我的空间 - 金******").Page("登录我的空间 - 金******").webbutton("Login").getproperty("visible")=false then
   msgbox "success"
else
  msgbox "failure"
end if




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