QTP + VM:当我没有通过远程桌面连接到VM时,为什么没有执行Click命令?

时间:2009-11-09 11:06:25

标签: vmware scheduling qtp siebel

我正在使用QTP 10和VMWare来测试Siebel应用程序。 我正在执行以下代码以单击“保存”按钮。

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

当我通过远程桌面连接到VM时,代码完全正常。

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

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

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

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

我强烈建议(如果您的系统策略允许)安装UltraVNC或其他VNC版本之类的内容以与远程计算机进行交互。这样,您可以随时保持远程计算机的桌面登录并处于活动状态。因为它是一个不会给你带来任何重大安全问题的虚拟机。确保关闭所有屏幕保护程序,也不要自动锁定桌面。如果你这样做,QTP应该对你有用。

答案 1 :(得分:3)

只是添加我的经验。

在我工作的一些公司中,由于安全策略,我无法更改屏幕保护程序或待机设置。一台PC在长时间的同步期间(如生成非常大的报告)提出了屏幕保护程序,并且执行被打破了。

为了避免这种情况,我创建了简单的“防睡眠”功能,每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/

谢谢你, Albert Gareev