SeleniumRCでPreparing Firefox profile...で止まるときの対処法
Selenium RCで自動テストするとき、テストスイート実行前にFirefoxが 10回に一回くらい、停止してしまいテストができない状況があった。
調べても原因がいまいち分からずじまいだったが、ようやく対処法 を見つけたので、メモしておく。
といっても、状況は人それぞれなのだが、自分が遭遇したケースでは、 停止するときは、いつもここで止まる。
09:58:16.652 INFO - Version Jetty/5.1.x 09:58:16.652 INFO - Started HttpContext[/selenium-server/driver,/sel enium-server/driver] 09:58:16.652 INFO - Started HttpContext[/selenium-server,/selenium-s erver] 09:58:16.652 INFO - Started HttpContext[/,/] 09:58:16.652 INFO - Started SocketListener on 0.0.0.0:5560 09:58:16.652 INFO - Started org.mortbay.jetty.Server@1eae15f 09:58:29.118 INFO - Checking Resource aliases 09:58:29.118 INFO - Checking Resource aliases 09:58:29.118 INFO - Command request: getNewBrowserSession[*firefox, http://hoge.example.com/] on session null 09:58:29.134 INFO - creating new remote session 09:58:29.321 INFO - Allocated session 3c67617374474d1c98f449a724ecb9 68 for http://hoge.example.com/, launching... 09:58:31.024 INFO - Preparing Firefox profile...
この状態で停止するときのfirefoxのプロセスを確認したところ、"-silent" が付いていたまま、ゾンビ化していた。
$ ps aux | grep [f]irefox togashik 13222 12.8 6.0 723200 117152 pts/0 Sl 08:30 0:07 /usr/lib64/firefox/firefox -silent
そのため、直感でプロセスをkillしたところ、次のテストが起動し始めた。
対処が分かったところで、簡単なスクリプトにして、以下のような感じで 裏で回しておいたところ、自動テストが止まらず、ストレス無くテストすることができた。
- kill_zombie_firefox
#!/usr/bin/env bash # Author: Kenta Togashi INTERVAL=5 COUNT=0 while : do sleep $INTERVAL ZOMBIE_FIREFOX_PID=`ps aux | grep 'firefox' | grep '[-]silent' | awk '{print $2}'` if [ -n "$ZOMBIE_FIREFOX_PID" ];then COUNT=`expr $COUNT + 1` if [ $COUNT -eq 3 ];then kill -9 $ZOMBIE_FIREFOX_PID COUNT=0 fi fi done
$ nohup bash kill_zombie_firefox &
上記の解決法を試みる前にjavaによるSeleniumRC実行時にオプションで、 -firefoxProfileTemplateをつけるという方法もあるらしいが、うまくいかなかった。
また、仮想フレームバッファのXvfbを用いて行えば、停止せずにテスト可能らしいが ブラウザ内でページ遷移を確認する必要があったため、断念した。