我正在使用QTP 10和VMWare来测试Siebel应用程序。 我正在执行以下代码以单击“保存”按钮。
Browser("Siebel").Dialog("Filedownload").WinButton("Save").Click
当我通过远程桌面连接到VM时,代码完全正常。
另一方面,当我通过调度程序启动QTP测试时,没有远程桌面连接,上面的代码失败,没有任何错误消息。只是没有点击WinButton。
有什么想法吗?
答案 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