Windows上のSeleniumからWebDriverで定期的にブラウザを立ち上げる

Windows7SeleniumのWebDriver経由でChromeを定期的に立ちあげてテストする際に嵌ったのでメモっておきます。なおWindowsXPでも動作確認できました。

嵌りどころ

Windowsではサービスとしてcronなどのdaemonを起動させると、そのプロセスからはGUIアプリケーションを立ちあげて動作させることが出来ない制約があります。以下の記事では迂回する手段を紹介していますが、daemon自体に手を加える必要があるので断念しました。

http://owlsperspective.blogspot.jp/2010/01/start-gui-process-from-service.html

困っていたところ「タスクスケジューラからならGUI立ち上がるよ」と、cygwinのMLにアドバイスがありました。

http://cygwin.com/ml/cygwin/2012-08/msg00228.html

なのでちょっと荒いやり方ですが、タスクスケジューラにdaemonを監視させてプロセスを起動してやることで今回は対応しました。タスクスケジューラから直接ジョブをキックしても良かったんですが、設定UIが使いづらいので1枚かませました。

利用したもの

Jenkinsのジョブに登録しておくpythonスクリプトの例です。

from selenium import webdriver

url = “http://www.google.co.jp/”
d = webdriver.Chrome()
d.get(url);
location = d.execute_script(“return document.location+’’;”)
if location == url:
  print ’success’
d.close()

定期ジョブ管理にpycronやcron(cygwin)を使うことも検討しましたが、pycronでは文字エンコーディングが崩れたり、cronはcygwin経由が使いづらかったりで、結局Jenkinsが一番楽でした。

今後の課題

今回はWindows縛りだったのでこのような方法を取りましたが、Linuxの場合はどうなるのか試していません。またサービスからWebDriverを立ち上げたとき挙動についても、どうなるのか把握できていないので今後の課題としておきます。