SikuliXでGUI操作を自動化していると、イレギュラーな操作に対応しなければいけないことがあります。
例えば、ブラウザ操作でセキュリティ関連のダイアログがたまに表示されたり、認証ダイアログが表示されたりする場合です。
この場合、existsメソッドで対応することもできますがいつ表示されるかわらかない場合はあちこちにexists文を書かなくてはいけなくなり面倒です。
こんなときは、ある画像が表示されたときに操作を行うといったイベント処理を使うと便利です。
今回は、イベント処理を行う際に汎用的に使えるテンプレートを用意してみました。
SikuliXでイベント処理を行うテンプレート
1 | region_center = Region(79,7,1746,976) # 監視する画面範囲を設定 |
イベント処理(監視処理)とは別にメイン処理を行いたい場合、observeInBackground(10行目)メソッドを使いバックグラウンドで監視処理を行う必要があります。
イベント発生時に実行される関数(イベントハンドラ)内では、画像が表示されている間に連続でコールされないように次のような工夫を行っています。
- 最初にstopObserverで監視処理を一旦止めて、最後にobserveInBackgroundで監視処理を再開する。
- 最後に監視処理を再開するまでに2秒待機させて、短い間にイベント処理が連続実行されないようする。
今回は、「イベントが何回も発生することがある」「2秒以内に同じ処理を実行してほしくない」というケースを想定して実装しましたが、目的に応じてコーディングする必要があると思います。
参考になれば幸いです。