2

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

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

当我通过远程桌面连接到 VM 时,代码运行良好。

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

任何的想法?

4

2 回答 2

3

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

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

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

于 2009-11-09T14:17:05.943 回答
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/

谢谢你,阿尔伯特加里耶夫

于 2009-11-09T14:50:22.950 回答