Windows上のSeleniumからWebDriverで定期的にブラウザを立ち上げる
Windows7でSeleniumの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枚かませました。
利用したもの
- python2.7
- pythonのseleniumモジュール
# pip install selenium
- Chromeドライバ
http://code.google.com/p/selenium/wiki/ChromeDriver
ダウンロードしてパスを通しておく - Jenkins
Windowsのタスクスケジューラから定期的にJenkinsの起動を監視
http://ozzy2010.blogspot.jp/2012/05/5web-jenkins-x-selenium.html
ここの記載に従ってjenkins起動、ジョブの登録を行えばOK
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を立ち上げたとき挙動についても、どうなるのか把握できていないので今後の課題としておきます。