目次
Seleniumとは
ブラウザの操作を自動化するライブラリです。
プログラムを介してブラウザ上で行う操作を指定し、自動操作を行います。
ブラウザ上の操作とは、
- 指定したボタン・リンクをクリックする
- テキストボックスに文字を入力する
- ラジオボタンを選択する
- チェックボックスをチェックする
- selectメニューを選択する
- 画面をスクロールする
- 画面キャプチャを撮影する
などなど、おおよそブラウザ上で行えることは自動化できる、と考えて差し支えありません。
またセッションが特別な設定なしに使えます。
そのためログインを要する機能も自動化を行うことが可能です。
「メールフォーム」や、「会員登録機能」の自動化も問題なく行えるので、一般的なWebサイトの自動操作は、Seleniumで大抵はカバーできます。
この記事について
この記事はSeleniumの入門記事として作成しました。
「ブラウザを自動で動かしたい!」
「Seleniumってモノがあるのは知ってるがどんなものか知りたい!」
という方に、サクッと概要を把握できるようにまとめているつもりですので、Seleniumを使う第一歩として役立ててもらえれば幸いです。
Seleniumを紹介するにあたり、下記のような利用シーンを想定して記事を書いています。
ブラウザのテストが面倒なプログラマーの方
主にWebプログラマー向け。
例えばお問い合わせフォームを作るとして、「必須項目が入力されてないとエラーするか」、「必須項目が入力されていれば次の画面に遷移できるか」などをテストする必要があります。
僕も何度も問い合わせフォームを作ってはテストをしているわけですが、
とてつもなく面倒ッ!!!
これを自動化できるとしたら、かなりテンション上がりません?
ブラウザの入力事務を自動化したい方
なんらかのブラウザを介した入力作業を記録しておくことで、同じ入力作業を自動化できます。
条件分岐させることもできるため、不測の事態でも対応可能!
スクレイピングで情報収集したい方
Webサイトに掲載されている情報を効率よく収集することができます。
でも!
スクレイピングは対象のサイトに負荷がかかります。
負荷を低減しようとしても、バグで大量のアクセスを短時間で発生させるかもしれませんので、あまりオススメはできませんが。。。
Seleniumの種類
この記事では大きく2つのSeleniumについてご紹介します。
Selenium IDE
「ブラウザの自動操作をサクッと試してみたい」、「プログラムが書けない」方向け。
ブラウザのプラグインで簡単に試せます。
ブラウザを手動で操作して操作履歴を保存し、実行ボタンを押すことで、操作履歴をもとにブラウザが自動操作されます。
各種ブラウザのアドオン、プラグインという形で利用することが可能です。
【メリット】
なんといってもSelenium IDEのいいところは、
「プログラムを書けなくても使える!」
という点ですね、プログラマーでなくても簡単に使えます。
【デメリット】
複雑な命令や条件分岐を再現することが難しいことが挙げられます。
基本的に「ブラウザの操作を履歴に残し再現させる」というものですので、エラーしたらどうなるかをチェックするようなWebテスト目的では使いづらいと思います。
また繰り返しの実行もしづらいため、連続して実行させづらいですね。
↓下記の記事で使い方については紹介しているので、併せてご確認してもらえればと思います。
Selenium + プログラミング言語
「プログラムは書けるんで複雑な自動操作に使いたい」方向け。
Seleniumを各種プログラミング言語で取り扱うことで、その真価を発揮します。
プログラミング言語はいくつか候補がありますが、ググるとPythonの参考記事が多く見られるので、特に理由がなければPythonでいいと思います。
※過去PHPでSeleniumを使ったときは、わからないことを調べてもPythonの情報しか出てこず、辛かった覚えがあります。。
from selenium import webdriver
from selenium.webdriver.chrome import service as cs
#WebDriverの指定
chrome_service = cs.Service(executable_path=os.getcwd() + "\\webdriver\\chromedriver.exe")
driver = webdriver.Chrome(service=chrome_service)
#ページタイトルを取得したいURLにアクセス
driver.get("http://holiday-programmer.net/form_check/")
#ページタイトルを取得して出力
print(driver.title)
上記はPythonで書かれたプログラムで、ページのタイトルを取得してコンソール上に表示します。
プログラミング言語でSeleniumを使う場合、「WebDriver」を用意する必要があります。
「WebDriver」はブラウザごとに異なり、ChromeならChromeの、FireFoxならFireFoxの「WebDriver」が必要になります。
「WebDriver」ファイルは”ブラウザ名 WebDrvier”などで検索すればすぐに見つかるはずです。
※ブラウザのバージョンに沿ったWebDriverのバージョンが必要になることだけ面倒です
【メリット】
Selenium IDEでは難しかった複雑な操作、繰り返し実行が可能です。
そのため主に「Webシステムの動作テスト目的」に使ったり、「Webサイトのスクレイピング目的」で使うことに適しています。
前者の場合は、外部ファイルに大量のテストパターンを用意してガンガン回すことができますし、後者はスクレイピングして得た情報を外部ファイルに書き出したり、データベースに登録させることもできますので、Selenium IDEと比べると大幅に応用が利くようになります。
【デメリット】
学習コストがかかる点でしょうか。
お世辞にもSeleniumは親切な参考書があるとは言えません。
存在する参考書も、最新でないとインストール・導入まで進めなかったり、使えない書式に出くわすなど、「軽く触ってみようかな・・・」という気持ちを挫きかねません。。。
↓Seleniumの使い方については下記でご紹介しているのでご参考になればと思います。
1.Windowsのローカル環境での利用
2.Linuxサーバー上での利用
Seleniumの弱点
Webブラウザ上で実現できない操作は実行できません。
これは自動操作の特性上そこまでデメリット扱いすることではないかもしれませんが、「割と現実的な操作しかできない」というのは念頭に置く必要があります。
またWebページのインターフェースが変わるとエラーする可能性があります。
これはSeleniumがHTMLやJavaScriptを解析して実行する為、その構造が変わってしまうと、参照すべき情報が見つからず、操作が行えなくなるためです。
※例えば「id="top"」というタグをクリックするプログラムを書いたとき、インターフェース変更でこのタグが無くなってしまうと、該当の操作箇所でエラーします。
Webサイトリニューアルなどがあった場合は要注意です。
まとめ
SeleniumはWebサイトのテストに大きく貢献できると考えています。
大量のテストパターンを自動化し、継続的に実行することでシステムの品質が底上げされるはずです。
これをGitやJenkinsと組み合わせることで、会社から帰るときテストを実行し、翌朝確認するというのもできたりしますので、ぜひ試しに触ってみてもらい、テストをプログラミングする楽しさを実感してもらえればと思います。