0-9
なぜSeleniumIDEを作ってるのか

この記事はFrontrend Advent Calendar 2014 - Qiita 1日目です。

今年の中頃から一人でSeleniumIDEのChrome版のようなものを作ってる。

kyo-ago/chrome-autopilot-tool

これはほぼ趣味の活動だけど、せっかくなので目的とかを書いておこうと思う。

SeleniumIDEとは何か

その前にSeleniumの説明がいるか。。。

Seleniumとは何か

SeleniumとはオープンソースのE2Eテストフレームワークで、主に実ブラウザを動かしてWebサイトの検証を行うために使われる。

歴史は結構古くて2004年くらいに現Sauce Labs CTOのJason Hugginsが開発したらしい。

WebDriverとは何か

Seleniumを語る上で外せないのがWebDriverだ。

WebDriverとはブラウザをリモートから共通のAPIで操作するためのドライバのようなもので、Selenium2はこのWebDriverをベースに構築されている。

WebDriverが無い頃のSelenium(Selenium1)はLocalProxyと外部から操作を受け付けるJavaScriptライブラリで構築されており、テストが不安定だったりJSから操作できないテストは実行できなかったりした。

その後、SeleniumにWebDriverが組み込まれたSelenium2ができることで、テストの安定性やこれまで不可能だったテストの実行ができるようになった。

WebDriverはもともとGoogleが開発していたものなので、特にChromeで安定して高速に動くが、Firefoxもかなり動きがいい。 (IEは安定してるけど遅い。Safariは大抵なかったことにされる)

SeleniumIDEとは何か

元の話に戻ってSeleniumIDEに関して。

SeleniumIDEとは上記のSeleniumのFirefox plugin版で、Firefox上でユーザが行ったクリックなどの動作を記録し、再生することができる。

開発は2006年ごろでShinya Kasatani(@shinya)がSeleniumチームに寄贈したらしい。

で、今これのChrome版を作ってる。

なんで個人で作ってるのか

リポジトリ名でもわかるけど、今開発しているものはSeleniumの名前を入れていない。

kyo-ago/chrome-autopilot-tool

実は前にそのものずばりのkyo-ago/selenium-ide-for-chromeを開発していたけど、これは作っていた段階で間違いに気づいてやめてしまた。 (一応動く)

「間違い」とは何かというと、「自分が欲しかったのはE2Eテストフレームワークではなくブラウザの自動操作ツール」ということだ。

前回は「Selenium」の名前を入れることでE2Eテストフレームワークの方向に向かってしまったので、今回は「autopilot-tool」という名前にした。 (それ以外にも色々失敗はあるけど。。。)

また、これは「テストツール」ではないのでSeleniumの中で開発しないほうがいいと思った。

SeleniumIDEではだめなのか

SeleniumIDEは歴史も古くて安定してるけど、Chrome版がない。

これはSeleniumIDEのコードベースが古くて移行が難しいことと、そもそもSeleniumIDE自体がSeleniumグループから見て主流から外れていっている事が大きい。

本来SeleniumとはちゃんとしたE2Eテストツールで、簡単に使えることが売りのSeleniumIDEはメインにはなりえなかった。

また、「E2Eテストツール」であるならテストの「記述」にFirefoxを使うかChromeを使うかは些細な話で、テストの「実行」が各種環境で行われれば問題ない。

ただ、「ブラウザの自動操作ツール」としてみるとChromeで「記述」ができるのは大きな点で、「ブラウザの自動操作を行うために別のブラウザを立ち上げる」と言うのはありえないことだ。

また、Seleniumは今後、WebDriverベースのSelenium2に一本化するため、Selenium1のコードが残るSeleniumIDEはメンテされなくなるだろう。

しかし、Selenium2は「ブラウザの自動操作ツール」としてみると非常に使い勝手が悪く、「毎回新しいプロセスでクリーンなブラウザが立ち上がる」、「インストールにJavaとWebDriverのダウンロード、インストール、起動が必要」という点で実用的ではない。 (もちろんこれは「E2Eテストツール」としてみると当然の動作で、これができなければ話にならない)

今後、SeleniumチームがWebDriverベースのSelenium2に一本化するのは当然のことだと思うし、E2Eテストツールとしてみると発展だと思うが、SeleniumIDEの自動操作ツールとしての受け口は必要だと思った。

一応SeleniumIDEの次の移行先としてSelenium BuilderというWebDriverベースの新しいツールが開発されているので、SeleniumIDEは今後大きく改修されることはないだろう。
(Selenium BuilderもChrome対応は予定されているようだが、優先度は低いっぽい)

今後どうするのか

一応単体で記録、再生はできるようになったので、これからコードを整えてUIを直していこうと思う。
(今は結構大きくコード書き換えてるから動かないけど。。。)

SeleniumIDEの後継ではないけど、個人的にもSeleniumIDEのUIには慣れているのである程度は似せていきたい。

内部実装

上で「E2Eテストツールではない」と書いてるけど、実は内部的にはSeleniumIDE(Selenium1)のコードをベースに作っている。

これは前回(selenium-ide-for-chrome)の失敗から学んだことの一つで、操作の記録、再生周りはやはり枯れたコードをベースにしないと実用性が低い。 (前回はUIはかなりSeleniumIDEっぽくしたけど、ユーザの操作の記録、再生周りは独自に実装してしまったため再現性が低かった)

基本は「ブラウザの自動操作ツール」にしても、ある程度は「E2Eテストツール」として使えるんじゃないかと思ってる。

  1. ab-sn5 reblogged this from 0-9
  2. compozz-blog reblogged this from 0-9
  3. act2012bl reblogged this from atm09td
  4. atm09td reblogged this from 0-9
  5. 0-9 posted this