アプリケーションのテストを自動化しようとしていますが、トラブルシューティングに苦労している問題に悩まされています。
アプリケーションには標準のWindowsボタンがあり、AutoITとUser32dllの両方でこれらのボタンのいくつかをクリックしてみました。ボタンが適切にクリックされることもあれば(イェーイ!)、失敗することもあります(ブー!)-しかし、さらに悪いことに、AutoITはボタンをクリックした(ダブルブー!)と誤検知(トリプルブー!)を生成すると確信しています。納得しているのを見たとき、クリックが成功しなかったのに成功したということです。
Win Server 2K8でアプリケーションを実行していますが、このアプリケーションにはMDIウィンドウを使用する以外に特別なことはなく、一部のボタンはMDIウィンドウに含まれています。ただし、一部はMDIウィンドウ内にありません(たとえば、親ウィンドウが作成される前のログインウィンドウ)。
コマンドの順序は次のとおりです。
ウィンドウ内のボタンを見つける(成功、常に)ウィンドウを前面に移動する(成功)ウィンドウをアクティブにする(成功)ボタンをアクティブにする(成功)ボタンにフォーカスする(成功)ボタンにフォーカスがあり、ボタンが有効になっている場合は、クリックして。(成功/失敗、予測できない動作。なぜ成功するのか、なぜ失敗するのかを絞り込むことはできません...)
その他の情報:
注文でボタンがクリックされている場合があります。これにより、別のウィンドウが開きます。そのウィンドウを閉じてから、ボタンをもう一度クリックします。今回は何も起こりません。それ以外の場合は、期待どおりに機能します。
管理者として実行していますが、UACは完全に無効になっています。
私の知る限り、これはタイミングの問題ではありません。ボタンをクリックする前に、ボタンがフォーカスされ、有効になっていることを確認し、ボタンの周りにフォーカスされたハイライトが表示されることを確認します。
また、前述したように、単純なUser32 / SendMessage呼び出しだけでこれを試しましたが、これも失敗します。
最後になりましたが、これは、アプリケーションを手動で操作した場合には発生しません。私はいつも実際のボタンクリックを機能させてきました。
何かご意見は?
アップデート
これが私が言及すべき方程式の別の変数です-これはVMで起こっています(それは私がそれを実行する必要がある場所だからです)。自分のマシンで限定的なテストを行うことはできますが、実際のテストを行うには、VM上にある必要があります。私自身の開発ボックスをクリックすることは信頼できるようであり、これはさらに不可解なものになります。
私はこれを別のVMで試してきましたが、そこでも機能しているようです。2つのVMは、同じバージョンのWindows、同じバージョンのアプリケーション、同じバージョンのAutoITなどを実行しています。
私はそれを1つの詳細に減らしました-運が良ければ、私は自分自身を構成することができず、構成を変更するためにチケットを入れる必要があります。構成の違いは次のとおりです。
動作していないVMで、デバイスマネージャーはvmwareマウスであるマウスを表示します。動作しているVMで、デバイスマネージャはPS/2マウスであるマウスを表示します。明らかにどちらもソフトウェアマウスですが、VMWareマウスの動作が異なり、ボタンのクリックが常に機能するとは限らないのではないかと思います。私の理解では、User32 SendMessage呼び出しを使用しても実際にはマウスは使用されず、代わりにマウスが送信したのと同じメッセージが送信されるため、これが解決策としてどの程度可能性があるかはわかりませんが、一見の価値があります。 ..。。