Selenium のドキュメントに書かれてない事・・・

Selenium IDE, Selenium-RC + RSpec を使って規模の大きなテストを書いてみて経験したドキュメントに書かれてない事をいくつか書きます。

http://seleniumhq.org/images/big-logo.png

1. Speed Control

これは、ドキュメント に書かれてますが、何に使うのかが今一つ不明な機能です。

1つは Ajaxを使ったサイトのテストを手抜きで行うのに使えます。しかし、まあこれは邪道ですね。

今回経験したのはSeleniumIDEによるテストを、ネットがやや遅く、IDEを動かすPCのパワーが低い環境で動かすと時たまテストがエラーになってしまうような場合は、この Speed Control を設定して少しテストの動作を遅くするとエラーが発生しなくなります。

2. Proxy

Selenium-RC を使ったテストで テストを動かすマシン(PC)とサーバーの間に Proxy がある場合ですが、これも ドキュメント に書かれているように、

Selenium-RCサーバーに http.proxyHost, http.proxyPort 等にオプションを指定すれば良い事になっていますが、私のつかっている Mac(Snow Leopard), Windows 7 + FireFox3.6 ではなぜか動作しましせでした。Proxyの設定が無視されてしまいます、ただし、Linux(Ubuntu)ではこの設定で動きました。


ところで、Selenium-RCを使うコード(今回は RSpec + selenium-client)でテストで使うブラウザーを指定するのですが、指定ミス等で表示される サポートされているブラウザーの一覧は 下のようになっています。

Supported browsers include:
 *firefox
 *mock
 *firefoxproxy
 *pifirefox
 *chrome
 *iexploreproxy
 *iexplore
 *firefox3
 *safariproxy
 *googlechrome
 *konqueror
 *firefox2
 *safari
 *piiexplore
 *firefoxchrome
 *opera
 *iehta
 *custom

ここにある、firefoxproxy, pifirefox とはなんでしょうか? これは ドキュメントにはありません、 Google先生に聞いてもわかりません !! (なので、この記事を書いてるのですが)
Seleniumオープンソースなので、ソースを読め ということで見てみると。

  • firefoxproxy は FirefoxCustomProfileLauncher (extends AbstractBrowserLauncher )クラス
  • pifirefox は ProxyInjectionFirefoxCustomProfileLauncher (extends FirefoxCustomProfileLauncher) クラス

に対応しています。名前と実態の対応が今一つ謎ですが・・・


FirefoxCustomProfileLauncher は firefoxのプロファイル(設定情報など)をオプションで指定出来る firexfox です。通常の firefox指定の場合は、ブラウザー起動毎に新規プロファイルを作ってからfirefoxを起動するので、独自のSSL証明書の設定などを使いたい場合は、これを使います。
また、ブラウザーに対してのProxyの設定もこのFirefoxCustomProfileLauncherでは行われます
pifirefoxも FirefoxCustomProfileLauncherを継承してるので、ブラウザーに対しProxyの設定が行われます。

というわけで、Proxyを使う場合は ブラウザーを *firefox ではなく*firefoxproxy か *pifirefox にします。これで MacでもWindowsでも Proxyが有効になりました。

3. Speed Control API

1. で書いた Speed Control を RSpec で設定するには、 Driverの set_speed メソッドを使います。これは selenium-client の RDocに書かれてますね。

こんな感じで使います。

  before(:all) do
    @verification_errors = []
    @selenium_driver = Selenium::Client::Driver.new \
      :host => "localhost",
      :port => 4444,
      :browser => "*chrome",
      :url => "http://localhost:3000/",
      :timeout_in_second => 60
    @selenium_driver.set_speed(500)   # 0.5秒のdelay
  end

4. テスト中に残ったブラウザーを一度に閉じる方法

テストを作っている際には、テストのバグでテストが途中で終わってしまい close_current_browser_session() が実行されずに ブラウザーのウインドウが残ってしまいまいます。テスト開発中に気か付くと Dock に大量の firefox アイコンが並んでいたります ^^;
私は地道に手動でクローズしたり、ps ax で firefox を見つけ kill したりしていましたが、テストを使っているお客様が良い方法を教えてくれました


Selenium-RCサーバーを^Cで終了すれば良いのです! 瞬時に残っていたブラウザーが消えます。その後Selenium-RCサーバーを再起動します。

お客さま、ありがとうございます !!