51Testing软件测试论坛

标题: 求教:Browser("hwnd:=" & hwnd).Navigate [打印本页]

作者: 紫藤萝mary    时间: 2012-8-14 11:06
标题: 求教:Browser("hwnd:=" & hwnd).Navigate
我在【51Testing丛书连载:(五十一)精通QTP——自动化测试技术领航】中“获取当前窗口的句柄”的实例运行中报以下错误:
******************************************************************************
无法标识对象 "[ Browser ]" (属于类 Browser)。验证此对象的属性与当前显示在应用程序中的对象是否匹配。

第 (11) 行: "Browser("hwnd:=" & hwnd).Navigate "http://www.baidu.com""。

提示: 如果应用程序中的对象已更改,维护运行模式可以
帮助您识别和更新库中的步骤和/或对象。
******************************************************************************

请问这个问题怎么解决呢?

源代码如下:


'#######启动浏览器########
systemutil.Run "iexplore.exe"
'#######创建API  Extern对象##########
Extern.Declare micHWnd,  _
"GetForegroundWindow", "user32.dll", "GetForegroundWindow"
'######使用WIN32 API获取窗口的句柄######
hwnd = Extern.GetForegroundWindow()

'########通过获取的句柄控制浏览器窗口并跳转百度#####
Browser("hwnd:=" & hwnd).Navigate "http://www.baidu.com"   '这句报错!!!!!!!!
作者: shingo0109    时间: 2012-8-14 11:26
我也试了下貌似是不行, LZ最好去问作者吧, 论坛上有一个专门解答该书问题的帖子:
"2012年给力新作《精通QTP——自动化测试技术领航》试读以及答疑专用贴 "
链接为:http://bbs.51testing.com/viewthr ... p;extra=&page=1
作者: joykao    时间: 2012-8-14 12:50
'#######启动浏览器########
systemutil.Run "iexplore.exe"

'######取到当前页面的句柄######
HWND = Browser("XXXXX").GetROProperty("hwnd")

'########通过获取的句柄控制浏览器窗口并跳转百度#####
Browser("hwnd:=" & HWND ).Navigate "http://www.baidu.com"
作者: 紫藤萝mary    时间: 2012-8-14 13:41
回复 3# joykao


    我用你的方法试了,程序时能跑通,但是没有跳转到百度页面,浏览器还是停留在blank。
作者: cellule    时间: 2012-8-14 13:59
'#######启动浏览器########
systemutil.Run "iexplore.exe"
'#######创建API  Extern对象##########
Extern.Declare micHWnd,  _
"GetForegroundWindow", "user32.dll", "GetForegroundWindow"
'######使用WIN32 API获取窗口的句柄######
hwnd = Extern.GetForegroundWindow()

print hwnd

'########通过获取的句柄控制浏览器窗口并跳转百度#####
a=Browser("micClass:=Browser").GetROProperty ("hwnd")
print a
Browser("hwnd:=" & hwnd).Navigate "http://www.baidu.com"

你看下 2个打印信息 就知道2个hwnd 不一样
作者: louqqson008    时间: 2012-8-14 14:13
学习下
作者: 紫藤萝mary    时间: 2012-8-14 14:32
回复 5# cellule


    是不一样,所以这个问题还是没解决到。你有解决办法么?
作者: cellule    时间: 2012-8-14 15:26
回复 7# 紫藤萝mary

你用我的打印看看 是不是每次,取Dll的hwnd 是唯一固定的,然后后面取web的是不固定的
作者: 紫藤萝mary    时间: 2012-8-14 15:54
回复 8# cellule


    嗯,正如你所说,dll打印的每次都不变,web的每次都在变。但是用web的hwnd程序不会报错,但是也打不开百度页面。这是什么原因呢?
作者: joykao    时间: 2012-8-14 17:08
回复 4# 紫藤萝mary
你的句柄取错了吧。。能把你的代码贴一下吗?

如果你想哪个页面跳转就取哪个页面的句柄,按你说的应该是这样写
HWND = Browser("name:=New Tab").GetROProperty("hwnd")
作者: 紫藤萝mary    时间: 2012-8-14 18:24
回复 10# joykao


    还是报错:
无法标识对象 "[ Browser ]" (属于类 Browser)。验证此对象的属性与当前显示在应用程序中的对象是否匹配。

第 (9) 行: "hwnd = Browser("name:=Browser").GetROProperty("hwnd")"。


我的代码:
'#######启动浏览器########
systemutil.Run "iexplore.exe"
'#######创建API  Extern对象##########
'Extern.Declare micHWnd,  "GetForegroundWindow", "user32.dll", "GetForegroundWindow"
'########通过获取的句柄控制浏览器窗口并跳转百度#####
'hwnd = Extern.GetForegroundWindow()
hwnd = Browser("name:=Browser").GetROProperty("hwnd")
Browser("hwnd:=" & hwnd).Navigate "http://www.baidu.com"
作者: 紫藤萝mary    时间: 2012-8-14 18:26
回复 10# joykao


还是报错:
无法标识对象 "[ Browser ]" (属于类 Browser)。验证此对象的属性与当前显示在应用程序中的对象是否匹配。
第 (9) 行: "hwnd = Browser("name:=Browser").GetROProperty("hwnd")"。

我的代码:
'#######启动浏览器########
systemutil.Run "iexplore.exe"
'#######创建API  Extern对象##########
'Extern.Declare micHWnd,  "GetForegroundWindow", "user32.dll", "GetForegroundWindow"
'########通过获取的句柄控制浏览器窗口并跳转百度#####
'hwnd = Extern.GetForegroundWindow()
hwnd = Browser("name:=Browser").GetROProperty("hwnd")
Browser("hwnd:=" & hwnd).Navigate "http://www.baidu.com"
作者: joykao    时间: 2012-8-14 20:25
肯定错啊。。。必须的。。。
'你打开的一个的页面应该是你设置的主页,或者空页面
我试了下没问题
Systemutil.Run "iexplore.exe"
Browser("micClass:=Browser").OpenNewTab
HWND = Browser("name:=New Tab").GetROProperty("hwnd")
Browser("micClass:=Browser","hwnd:=" &HWND ).Navigate "http://www.baidu.com"
作者: 紫藤萝mary    时间: 2012-8-15 09:39
回复 13# joykao


    常规运行错误。

"Browser("micClass:=Browser").OpenNewTab"。
作者: joykao    时间: 2012-8-15 10:10
回复 14# 紫藤萝mary
是你IE设置有问题,你可以重装下你的IE, 装完记得把BHO manager class 启动下 再执行脚本
作者: 紫藤萝mary    时间: 2012-8-15 11:14
回复 15# joykao


    ok咯。万分感谢!!!
作者: joykao    时间: 2012-8-15 11:16
回复 15# joykao

不是吧,我也是IE8 啊。英文版的,那段脚本真心没问题哇我跑了N遍了。。
你的IE 默认打开的是什么页面是不是有问题啊?[attach]80600[/attach]
作者: jacksboy    时间: 2012-8-15 12:50
我也是ie,使用一切正常,肯定是好的,首页为空,也执行不了这段话,录其它web都是好的,所以不可能是bhomanager有问题。这个怎么看
作者: joykao    时间: 2012-8-16 09:39
回复 18# jacksboy


哎。。。。还是去问书的作者吧。。。。。QTP 论坛的一位斑竹就是你们用的书的作者

Systemutil.Run "iexplore.exe"
Browser("micClass:=Browser").OpenNewTab
HWND = Browser("name:=New Tab").GetROProperty("hwnd")
Browser("micClass:=Browser","hwnd:=" &HWND ).Navigate "http://www.baidu.com"
这个执行的是没问题的吧?
作者: robinpipi    时间: 2012-8-16 09:51
嗯,我是win7+ie8+qtp11,也是执行有问题
作者: AntonioNikki    时间: 2012-8-20 14:20
顶一下 去试一试
作者: jqd111    时间: 2012-12-20 13:59
本帖最后由 jqd111 于 2012-12-20 14:01 编辑

回复5#:
1、通过SPY探测器可以看到对于IE窗口
   hwnd=Extern.GetForegroundWindow()  '取到的是Native Properties中hwnd的值
   a=Browser("micClass:=Browser").GetROProperty ("hwnd") '取到的是Identification  Properties中hwnd的值。

在执行脚本时,QTP识别对象时使用的是Identification  Properties中hwnd的值,所以执行Browser("hwnd:=" & hwnd).Navigate "http://www.baidu.com" 时会报对象无法识别,而执行Browser("hwnd:=" & a).Navigate "http://www.baidu.com"时就能够顺利通过。

2、按<F1>查看QTP的帮助,发现关于Extern的示例,使用的测试对象是记事本(notepad.exe)。通过SPY探测器可以看到对于“无标题- 记事本”窗口没有Native Properties,只有Identification  Properties,所以取到的就是Identification  Properties中的hwnd的值,因此在执行脚本时就不会遇到对象无法识别的情况了。




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