One of the areas where TestPartner 6.1.x is challenged in controlling application under test (AUT) is Popup Menus. It handles it one time but sometimes it complains that the menu is not detected but it is clearly infront of the screen. Though it is working ~80% of the time but Murphy's law has it that if anything can go wrong, it will. What I have come up so far is to handle popup menus manually. See below for the code, so far it seems to meet my needs.
Option Explicit Private Declare Function SetCursorPos Lib "user32" _ (ByVal x As Long, ByVal y As Long) As Long Sub Main() 'open Windows Explorer in "My Computer" Window("Desktop Window").Attach ListView("Index=1").Select "CD Drive (E:)", tpMouseRight PopupMenuEx2 "Properties" Window("Application=Explorer.exe Classname='#32770'").Attach Button("Caption=OK").Click End Sub Private Function PopupMenuEx2(sMenuPath As String) As Boolean Dim iMenuCount As Integer Dim sMenuSplit As Variant Dim iMenuPos As Integer SetCursorPos 1, 1 Window.MouseMove 1, 1 'Note that this is important. This is to minimize code in SelectMenuItem SendKeys "{DOWN}", True sMenuSplit = Split(sMenuPath, "~") For iMenuCount = 0 To UBound(sMenuSplit) SelectMenuItem sMenuSplit(iMenuCount), iMenuCount > 0 If iMenuCount = UBound(sMenuSplit) Then SendKeys "{ENTER}", True Exit For Else SendKeys "{RIGHT}", True End If Next End Function Private Function SelectMenuItem(ByVal sMenuStr As String, isSubMenu As Boolean) As Integer Dim mnu As TMenu Dim ti As TMenuItem Dim i As Integer Dim sAttachName As String Const DELAY = 100 sAttachName = Window.Application sAttachName = "Application=" & sAttachName & " ClassName='#32768'" If isSubMenu = False Then Set mnu = Window(sAttachName).GetMenu(tpPopupMenu) Else Set mnu = Window(sAttachName).GetMenu(tpMenu) End If For i = 1 To mnu.Count Set ti = mnu.GetItem(i) If ti.Text = sMenuStr Then Sleep DELAY, tpPauseMilliSeconds Exit Function End If If Not (ti.IsSeparator) Then Sleep DELAY, tpPauseMilliSeconds SendKeys "{DOWN}", True End If Next End Function~ts
Comments