Vmware QTP&x2B;VM:为什么在I';m未通过远程桌面连接到VM?

Vmware QTP&x2B;VM:为什么在I';m未通过远程桌面连接到VM?,vmware,scheduling,qtp,siebel,Vmware,Scheduling,Qtp,Siebel,我正在使用QTP10与VMWare一起测试Siebel应用程序。 我正在执行下面的代码来单击Save按钮 Browser("Siebel").Dialog("Filedownload").WinButton("Save").Click 当我通过远程桌面连接到VM时,代码工作得非常好 另一方面,当我通过调度器启动QTP测试时,没有远程桌面连接,上面的代码失败,没有任何错误消息。WinButton只是没有被点击 有什么想法吗?QTP不能与锁定的桌面交互,这就是为什么它只能在本地或通过RDP以交互方

我正在使用QTP10与VMWare一起测试Siebel应用程序。 我正在执行下面的代码来单击Save按钮

Browser("Siebel").Dialog("Filedownload").WinButton("Save").Click
当我通过远程桌面连接到VM时,代码工作得非常好

另一方面,当我通过调度器启动QTP测试时,没有远程桌面连接,上面的代码失败,没有任何错误消息。WinButton只是没有被点击


有什么想法吗?

QTP不能与锁定的桌面交互,这就是为什么它只能在本地或通过RDP以交互方式登录时对您有效。这是众所周知的QTP限制,大多数自动化工程师在某个时候都会经历这种痛苦。:)

更具体地说,它无法与Win32对象交互(想不出更好的方式来放置它),因此它将与锁定桌面上的基本浏览器控件交互没有问题,但浏览器弹出窗口和Windows应用程序在这些情况下无法交互


我强烈建议(如果您的系统策略允许的话)您安装类似或另一个VNC变体的东西来与远程机器交互。这样,您就可以让远程计算机的桌面始终处于登录和活动状态。因为它是一个虚拟机,不应该给你带来任何重大的安全问题。确保关闭所有屏幕保护程序,不要自动锁定桌面。如果你这样做的话,QTP对你来说应该很好。

根据我的经验补充一下

在我工作过的一些公司,由于安全策略,我无法更改屏幕保护程序或待机设置。一台电脑在长时间的同步过程中启动了屏幕保护程序(比如生成非常大的报告),执行被中断

为了避免这种情况,我创建了简单的“反睡眠”功能,每5分钟轻微“移动”鼠标。

Private Const睡眠时间\u Max=300'5分钟
公共功能反睡眠()
暗iter
模糊对象计时器
昏暗的夜幕剧
时间流逝
Set objTimer=MercuryTimers(“抗睡眠”)
inttimeappeased=CInt(objTimer.ElapsedTime/1000)
如果inttimeappeased=0,则
美曲霉素(“安眠药”)。开始
退出功能
如果结束
如果INTTIMEASED<睡眠时间\u最大值,则
退出功能
如果结束
设置objDeviceReplay=CreateObject(“Mercury.DeviceReplay”)
对于iter=100至110
objDeviceReplay.MouseMove iter,300
下一个
美曲霉素(“安眠药”)。开始
设置objDeviceReplay=Nothing
端函数
在自定义同步功能中使用它的示例:

谢谢,,
Albert Gareev

谢谢,这对我来说很有效,但我不得不使用“objDeviceReplay.MouseClick 100、200、0”,因为MouseMove只能保持VM连接处于唤醒状态。哦,是的,这是绝对正确的,如果是远程连接,你也必须单击(如果是在常规桌面上,只移动就足够了)。我只是没有将单击作为同步循环中的默认操作,因为有时单击可能会触发您不想要的东西。但在一个更高级别的同步循环中,我有一个代码段周期性地点击窗口的标题栏,它正在生成报告或做一些其他思考的事情。谢谢
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