selenium と ruby を使ってブラウザ GUI 操作を自動化する。
selenium は、Web アプリケーションの自動テストのためのツール。 レグレッションテストによく使われているようだ。
selenium は、ブラウザ操作シナリオを事前に設定して、シナリオ通りに実行してくれる。 シナリオ設定といっても、Firefoxプラグインの Selenium IDE などを使うと操作を 記録してくれる機能があるのでそこまで大変ではない。 詳細は、Ruby アソシエーション – selenium の “1.2 テストの作成” あたりを参照してほしい
selenium は、クロスブラウザのツールで、IE を使って IE限定みたいなサイトでも使える。 IE や Chrome で使うには各 Selenium WebDriver が必要となる。
テスト用と言いつつ、使い道はいろいろとある。
- 社内のもろもろの web 申請は、入力項目が多いのに、毎回ほぼ同じ内容を入力させるので フォーム入力の省力化として利用している。
- hp さんの iLO や日立さんストレージ、F5 さんのBIG-IP みたいな web 画面から設定変更するような機器の
自動構築なんかもできそう。
- スクリーンショットも撮れるので、エビデンスもついでに取得可能。
- vCenter とかも操作できないかという思惑はある。
- AWS とかも操作できるけど、そもそも API が豊富に備わっているから不要か。
- あえて selenium を使わなくてもいいけど、クローリングやスクレイピングとかもできる
この selenium は、Java や Python, Ruby などのプログラミング言語からシナリオ操作が可能で ループ処理などするにはめちゃくちゃ便利。
いままでは Firefox プラグインだけで利用していたが、Ruby と絡めると便利すぎて感謝しかなかった。 ここでは、サンプルとして、はてなブックマークのホットエントリトップ5を一括で開くことを やってみたい。
ちなみに似たツールに iMacro がある。
関連記事: seleniumノウハウ
環境は、以下。
モノ | バージョン |
---|---|
OS | Windows 8.1 Pro |
ブラウザ | Firefox ESR 38.6.1 |
Selenium IDE | 2.9.0 |
Ruby | 2.2.4p230 (2015-12-16 revision 53155) [x64-mingw32] |
gem | selenium-webdriver (2.52.0) |
準備
Windows に Rubyをインストールする。
RubyInstaller の RubyInstallers からインストーラをダウンロードし、実行する。 インストール時、 PATH を通すチェックボックスにチェックを入れる。
続いてDevelopment Kitをインストールする。この辺を参考に。
これも RubyInstaller の Development Kit からダウンロードして、解凍する。
解答したファイルに dk.rb
があるのでコマンドプロンプトから以下のように実行する。
1 2 3 |
|
次に、selenium-webdriver
をインストールする。
Ruby をインストールしたことで、一緒に gem も使えるようになっているはずなので、
コマンドプロンプトから以下を打鍵。
1
|
|
インストールの確認。irb (もしくは pry) とかで require できることを確認する。
1 2 3 |
|
はてなホットエントリのトップ5エントリーを開く
ここではサンプルとして、はてなブックマークのホットエントリからトップ5 をブラウザで
次々に開くよう hatena.rb
を書く。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
コマンドプロンプトからこのスクリプトを実行すると次々とブラウザが起動してくる。
1
|
|
こんな感じ。
find_element
メソッドは、CSSセレクタやxpath、タグ名、タグのID、class名などを指定できる。
フォームになにか値を突っ込みたいときは、@driver.find_element(~~~~~).send_keys "VALUE"
みたいな感じで
要素を特定したあと、send_keys
で文字列を渡してあげればよい。
POST は、ボタンを find_element してあげて.click
(.submit
でも良さ気) でOK。
スクリーンショットを撮るときは、@driver.save_screenshot "./screenshot.png"
みたいな感じ。