При работе с данным компонентом появилась проблема следующего характера. Пункты меню нажимаются четыре раза, а потом TC просто перестает видеть менюшку и соответственно нажимать ее.
Пробовал метод найденный на просторах интернета, где предлагается искать объект, а потом кликать по координатам, пробовал метод предложенный в самом ТС, когда генерится путь к меню и вызывается метод Click. Результат одинаков в обоих случаях (написал выше).
Нашел выход, перезапускать приложение для каждого теста, но не очень красиво и иногда внутри теста надо несколько раз нажать менюху (например, обновить экран).
TC 7.52.678.3
.Net Framework 3.5SP1
Версия приложения, которая работала без проблем была скомпилирована с версией .Net FW 2.0, сейчас новая версия скомпилирована с .Net FW 3.5SP1
На тестовом стенде версия .Net не менялась, всегда была 3.5SP1.
Очень похоже на какой-то дефект в TC, но как обойти корректно не очень понимаю.
Так не работает:
sMenuItem = obj.FullName For i = LBound(items) To UBound(items) if i = 0 then sMenuItem = sMenuItem & ".wItems.Item(" & Chr(34) & items(i) & Chr(34) & ")" else sMenuItem = sMenuItem & ".Items.Item(" & Chr(34) & items(i) & Chr(34) & ")" end if Next Call oLogManager.Report(DEBUG_LEVEL, sCurrModule, "Menu: " & sMenuItem) Execute "Set menuObj = " & sMenuItem if IsEmpty(menuObj) then Call oLogManager.Report(ERROR_LEVEL, sCurrModule, "Can't click menu item: " & aqString.GetListItem(sMPath, 0)) selectMenu = -1 Exit Function else menuObj.Click end if
и вот так не работает:
Set bar = oMenu.Bar x = oMenu.ScreenLeft y = oMenu.ScreenTop items = Split(sItemName, "|") For i = LBound(items) To UBound(items) Set item = Nothing For j = 0 To bar.ItemLinks.Count - 1 If SameText(bar.ItemLinks.get_Item(j).Caption, items(i)) Then Set item = bar.ItemLinks.get_Item(j) Exit For End If Next If item Is Nothing Then SelectXtraBarsMainMenuItem = -1 Exit Function End If ' Clicks the item xx = x + item.Bounds.Left + item.Bounds.Width / 2 yy = y + item.Bounds.Top + item.Bounds.Height / 2 Call Sys.Desktop.MouseDown(VK_LBUTTON, xx, yy) Call Sys.Desktop.MouseUp(VK_LBUTTON, xx, yy) If i = 0 Then x = x + item.Bounds.Left y = y + item.Bounds.Bottom Else x = x + item.Bounds.Right y = y + item.Bounds.Top End If Set bar = item.item Next