shaofei19820625 发表于 2010-1-6 17:14:51

qtp执行中为什么某两个page会同时都exist


以上脚本是用来测试某个登录功能的。
Browser("登录我的空间 - 金******").Page("登录我的空间 - 金******")这个是登陆页面
Browser("登录我的空间 - 金手杖商城系统").Page("个人空间 -_2")这个是登陆成功后进入的页面。
用户名、密码和登录后的文本检查,都是用datatable来实现的。

程序里我这里用了一个IF else想实现的是:如果登录页面存在,那么表示登录错误,文本检查点在登录页面Browser("登录我的空间 - 金******").Page("登录我的空间 - 金******")进行检查,否则到Browser("登录我的空间 - 金手杖商城系统").Page("个人空间 -_2")这个登录成功后的页面进行登录成功的文本检查。

问题是:
图1中进行debug的时候,才开始第一次循环,应该是登陆不成功的,那么我的想法是Browser("登录我的空间 - 金******").Page("登录我的空间 - 金******").exist是true的,另外一个应该是false的,但是看上图1中,两个都为true。哪位高手能帮忙解释一下?

shaofei19820625 发表于 2010-1-7 09:14:29

有没有人能给回答一下的。万分感谢了

souchy 发表于 2010-1-7 09:32:06

这个问题我也很想知道答案!
因为我之前也常碰到类似的问题,明明页面上没有显示,但用exist、visible去判断,得到的结果却都是True。

onlonely 发表于 2010-1-7 10:01:34

这是你对QTP对象的EXIST方法不熟悉造成的
exist方法,判断选择的对象是否实际存在,判断使用的规则来源于你在对象库中该对象的属性.
Browser("登录我的空间 - 金******").Page("登录我的空间 - 金******") 这个对象
那么你是否实际确定了,对象库中
Browser("登录我的空间 - 金******").Page("登录我的空间 - 金******")
这个对象所记录的属性,实际是否存在呢,
据我了解,page页面一般只记录URL这样一个属性,如果你登陆后URL不改变,那么这个判断永远都会成立

shaofei19820625 发表于 2010-1-8 10:14:25

原帖由 onlonely 于 2010-1-7 10:01 发表 http://bbs.51testing.com/images/common/back.gif
这是你对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:17

高手们欢迎来解答......hoho

wugecat 发表于 2010-1-8 11:35:09

打开你的对象库,将对象的"Enable Smart Identification"选项置为"False"

shaofei19820625 发表于 2010-1-11 11:23:20

原帖由 wugecat 于 2010-1-8 11:35 发表 http://bbs.51testing.com/images/common/back.gif
打开你的对象库,将对象的"Enable Smart Identification"选项置为"False"
我刚刚试了一下,即便我去设置为false,以上说的两个page在exist判断的时候,还是同时为true的呢。

borisman 发表于 2010-1-15 10:16:56

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:01

给我看看你的PAGE是使用什么属性来识别的?!建议你使用 title 属性来识别。

风雪夜归人 发表于 2010-1-18 10:40:26

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:38

建议一般不用整个页面存在的方法来作为判断标准,最好是用页面中的某个子对象作为判断标准。例如:点了登录之后如果登录button仍然存在,就是不成功。如果成功,就那登录后的页面中某个对象是存在的。例如:
if Browser("登录我的空间 - 金******").Page("登录我的空间 - 金******").webbutton("Login").getproperty("visible")=false then
   msgbox "success"
else
msgbox "failure"
end if
页: [1]
查看完整版本: qtp执行中为什么某两个page会同时都exist