QTP+VM: почему команда Click не выполняется, когда я не подключен к виртуальной машине через удаленный рабочий стол?

Я использую QTP 10 вместе с VMWare для тестирования приложения Siebel. Я выполняю следующий код, чтобы нажать кнопку «Сохранить».

Browser("Siebel").Dialog("Filedownload").WinButton("Save").Click

Код отлично работает, когда я подключен к виртуальной машине через удаленный рабочий стол.

С другой стороны, когда я запускаю тест QTP через планировщик без подключения к удаленному рабочему столу, приведенный выше код завершается сбоем без какого-либо сообщения об ошибке. Кнопка WinButton просто не нажимается.

Любая идея?


person Federico Elles    schedule 09.11.2009    source источник


Ответы (2)


Просто добавлю из своего опыта.

В некоторых компаниях, в которых я работал, я не мог изменить настройки заставки или режима ожидания из-за политики безопасности. Компьютер вызывал заставку во время длительных периодов синхронизации (например, при создании действительно большого отчета), и выполнение прерывалось.

Чтобы избежать этого, я создал простую функцию "Антисон", которая слегка "двигает" мышь каждые 5 минут. http://automation-beyond.com/2009/08/18/anti-sleep-function/

Private Const SleepTime_Max = 300 ‘ 5 minutes
Public Function AntiSleep()
Dim iter
Dim objTimer
Dim objDeviceReplay
Dim intTimeElapsed

 Set objTimer = MercuryTimers(“AntiSleep”)
 intTimeElapsed = CInt(objTimer.ElapsedTime/1000)

 If intTimeElapsed = 0 Then
  MercuryTimers(“AntiSleep”).Start
  Exit Function
 End If

 If intTimeElapsed < SleepTime_Max Then
  Exit Function
 End If

Set objDeviceReplay = CreateObject(“Mercury.DeviceReplay”)

 For iter = 100 To 110
   objDeviceReplay.MouseMove iter,300
 Next

MercuryTimers(“AntiSleep”).Start

Set objDeviceReplay = Nothing

End Function

Пример использования в пользовательской функции синхронизации: http://automation-beyond.com/2009/08/20/gui-object-synchronization-custom-function/

Спасибо, Альберт Гареев

person Albert Gareev    schedule 09.11.2009
comment
Спасибо, это сработало для меня, но мне пришлось использовать objDeviceReplay.MouseClick 100, 200, 0, так как только MouseMove не поддерживал соединение с виртуальной машиной. - person Federico Elles; 17.11.2009
comment
О, да, это абсолютно правильно, если это при удаленном подключении, вы должны нажать тоже (если это на обычном рабочем столе, достаточно только перемещения). У меня просто нет щелчка в качестве действия по умолчанию в цикле синхронизации, потому что иногда щелчок может вызвать что-то, чего вы не хотели бы. Но в цикле синхронизации верхнего уровня у меня есть кодовая часть, периодически нажимающая на строку заголовка окна, которая генерирует отчет или выполняет какие-то другие мыслительные действия. Спасибо. - person Albert Gareev; 19.11.2009

QTP не может взаимодействовать с заблокированным рабочим столом, поэтому он будет работать для вас только при интерактивном входе в систему либо локально, либо через RDP. Это хорошо известное ограничение QTP, большинство инженеров по автоматизации в какой-то момент испытывают эту боль. :)

Чтобы быть более конкретным, он не может взаимодействовать с объектами Win32 (не могу придумать лучшего способа выразить это), поэтому он будет без проблем взаимодействовать с основными элементами управления браузера на заблокированном рабочем столе, но всплывающие окна браузера и приложения Windows могут не взаимодействовать с в этих обстоятельствах.

Я настоятельно рекомендую (если позволяет ваша системная политика) установить нечто вроде UltraVNC или другой вариант VNC для взаимодействия с вашим удаленные машины. Таким образом, вы можете оставить рабочий стол удаленной машины включенным и активным в любое время. Поскольку это виртуальная машина, она также не должна вызывать серьезных проблем с безопасностью. Убедитесь, что вы отключили все экранные заставки и не блокируете рабочий стол автоматически. QTP должен отлично работать для вас, если вы это сделаете.

person Xiaofu    schedule 09.11.2009