memo.log

技術情報の雑なメモ

Capybara, systemspec, webdriver, rspec, selenium 等などの整理

色々なシステムがごたまぜでよく分からなかったので、自分なりに調べたメモ。間違ってたら指摘ください・・。


まず、 ブラウザをプログラムから動かすためにはそのブラウザ用のドライバが必要。 昔は、それぞれのブラウザが独自実装していたらしいが、 Selenium が Webdriver という名前でそれらを吸収するHTTP APIを提供した。開発者は各ブラウザドライバの仕様を知らなくてもそのHTTP APIを用いれば各種ブラウザを扱うことが可能になる。それが後にW3Cで Webdriver として標準化された、という流れのようだ。つまり、

クライアント(開発者のプログラム)→(HTTP )→Selenium → 各ブラウザのドライバ → 各ブラウザ

という流れ。

そして、現在では各ブラウザのドライバは WebDriver のAPIを提供している。したがって、各ドライバを実行するとそれが、HTTPサーバーとして立ち上がり、curl 等でそれらを叩けば、ブラウザの操作が可能になる。

i-beam.org

そして、現在では Selenium ドライバはクライアントプログラムのSDKとしての役割が主なようだ。

zenn.dev

Capybaraはさらにそれらをラップするためにライブラリで、 rspec 等のテストのフレームワークから WebDriver 経由でブラウザを操作し、テストを作成するのをサポートする。

ただし、Capybaraは必ずしもWebDriverを扱うわけではない。「Capybaraの」ドライバとしてSelenium等のWebDriverを扱うシステムも指定できるが、 rack_test も指定できる。 rack_test はRackアプリケーションをテストするためのフレームワーク。 CapybaraはRSpec経由で実行される際、対象のプログラムをWebサーバから起動する処理も行う。Webサーバがなければ、ブラウザを操作したところで、対象のプログラムにつなげられない。このときのWebサーバはPUMAやWebrickが使われるらしい(このあたりちゃんとしたドキュメントが見つけられなかった)

rack_test の場合は、Webサーバの立ち上げがなく、Rackアプリケーションのフォーマットにそって、擬似的にリクエストを送信・受信する。そのため、高速だが、JavaScriptの動作確認はできない。

その他参考

speakerdeck.com

qiita.com