窗口(" hwnd:="& handle).Restore导致对象不可见错误

时间:2016-05-26 15:12:57

标签: vbscript qtp hp-uft

我有一个应用程序可以打开一些新选项卡。我试图循环浏览这些标签,查看它们,然后关闭它们。

Dim tab_children, oDesc
Set oDesc = Description.Create
oDesc("micclass").value = "Browser"
Set tab_children = Desktop.ChildObjects(oDesc)

Dim title, handle, cTime
For i = 0 To tab_children.Count-1 Step 1
    title = tab_children(i).GetROProperty("title")
    handle = tab_children(i).GetROProperty("hwnd")
    Window("hwnd:=" & handle).Restore
    msgbox title & ": " & handle    
Next

当我们尝试执行.Restore时,我收到一个"对象不可见"错误。我们尝试恢复的标签不是具有焦点的标签,可能是问题,如果是,我们如何解决?我的印象是.Restore会根据这个帖子将该标签置于焦点,http://www.advancedqtp.com/old_forums/viewtopic.php?t=1970

我使用的IDE是QTP,浏览器是IE。

我正在考虑的潜在工作: 应用程序打开新选项卡后,最后打开的选项卡具有焦点。如果我们关闭那个,倒数第二个有焦点,一直到原始应用程序的选项卡。也许有一种方法可以利用这些信息。

1 个答案:

答案 0 :(得分:1)

过去恢复对我有用,尝试使用激活 -

Window("hwnd:=" & handle).Activate

编辑:刚刚测试了以下内容并在我的机器上进行了测试 -

'Create Browser Descriptor 
 Set oBrowser=Description.Create
 oBrowser("micclass").Value="Browser"
 'Get the child objects 
 Set oBrowser=Desktop.ChildObjects(oBrowser)
 totalcount = oBrowser.Count-1
 For i=0 to totalcount
 If Browser("micclass:=Browser", "index:="&i).Exist(0) Then 
 'get the hwnd everytime there's an iteration
 ohwnd= Browser("micclass:=Browser", "index:=" & i).GetROProperty("hwnd")

 'For debugging purposes 
 name = Browser("hwnd:="&ohwnd).GetROProperty("title")
  msgbox name

 Set oBrowser=Browser("hwnd:="&ohwnd)
 'Page descriptor 
 Set oPage=Description.Create
 oPage("micclass").Value="Page"
 Set oPage=Browser("hwnd:="&ohwnd).ChildObjects(oPage)
 For n=0 to oPage.Count-1
 If oPage(n).Exist(0) Then
 oBrowser.Close
 Exit For
 End If
 Next

 End If
 Next 

如果您只想关闭某个特定页面,可以在If循环中使用GETROPREPERTY(" Title") - 如果是oPage(n).Exist(0)