2016-05-26 4 views
0

У меня есть приложение, которое открывает некоторые новые вкладки. Я пытаюсь пройти через эти вкладки, посмотреть на них, а затем закрыть их.Window ("hwnd: =" & handle) .Restore вызывает ошибку объекта, не отображаемую

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

Восстановление работает для меня в прошлом, попробуйте использовать Activate-

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 

Если вы хотите, чтобы закрыть только определенную страницу, вы можете использовать GETROPREPERTY («Title») в цикле If - If oPage (n) .Exist (0)

+0

Ни один .Restore или .Activate на самом деле не позволяет сосредоточить нужную вкладку. Это то, что они должны делать? –

+0

Открываете ли вы новую вкладку в том же окне? – Harman

+0

Да каждая вкладка открывается в том же окне. –