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バリアントのようなものをインストールすることを強くお勧めします。そうすれば、リモートマシンのデスクトップを常にログオンしてアクティブなままにしておくことができます。これはVMであるため、重大なセキュリティ問題も発生しません。スクリーンセーバーをオフにし、デスクトップも自動ロックしないようにしてください。そうすれば、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 に答える