我有一个应用程序可以打开一些新选项卡。我试图循环浏览这些标签,查看它们,然后关闭它们。
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。
我正在考虑的潜在工作: 应用程序打开新选项卡后,最后打开的选项卡具有焦点。如果我们关闭那个,倒数第二个有焦点,一直到原始应用程序的选项卡。也许有一种方法可以利用这些信息。
答案 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)