Sikuli - 起動しているInternet Exploreを全て終了する方法

起動しているIEを全て終了する必要があったので実装してみました。

まずAppクラスにIEのウィンドウタイトルを設定しAppインスタンスを作成します。
(ウィンドウタイトルは一部が合致していればAppインスタンスを作成してくれるようです。)

そして生成したAppインスタンスのisRunningメソッドをコールしてIEが起動しているかどうかをチェックします。

IEが起動している場合は、closeByKeyメソッドで順次IEを終了させる・・・・といった感じで簡単に実装できるはずでした。。。

1
2
3
4
5
6
7
# coding:utf-8
chkApp = App(u"Internet")
while chkApp.isRunning():
chkApp.focus()
#chkApp.closeByKey() # 終了しないことがある
#chkApp.close() # 次回のIE起動時にクラッシュしたと表示される
type('w', Key.CTRL) # 比較的平和に全て終了する

ここからいろいろ問題が発生します。

まずcloseByKeyメソッドだとIEが終了せず無限ループになることが分かりました。原因は分からなかったのですが、IEが複数ウィンドウ起動していると1つめのウィンドウが落ちてその次のウィンドウが落ちないという現象です。

仕方ないのでcloseメソッドを使うことにしました。この方法ですと問題なく全てのIEウィンドウが閉じるのですが、次回IEを起動したときに「前回のブラウズセッションは予期せずに終了しました」と表示されてしまいます。

最終的には[CTRL + w]というショートカットキーを使ってIEを終了することにしました。
この方法であればIEのウィンドウは問題なく全て閉じますし、気持ち悪いメッセージが表示されることもありません。めでたし、めでたし。