При работе с данным компонентом появилась проблема следующего характера. Пункты меню нажимаются четыре раза, а потом 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


