Selenium使ってみた

viewのテストで先輩が使っているのを見て、色々教えてもらったので、
その後自宅でやってみたメモ。

他にもviewのテストに使ってたツール色々ひとつづつ検証していく
つもりです。というわけで最初はSelenium

Seleniumとは

ブラウザの操作を自動化してくれるツール。
firefoxのプラグインだったり、単体で動くサーバだったり
色々な形式で提供されている。

公式ドキュメントによると、Java,C#,Ruby,Python,Nodeから
利用できるライブラリも存在する

今回この記事で紹介するのはselenium webdriverのnode版です。
(言語は違ってもAPIはだいたい同じ感じです。)

インストール

単純にインストールするなら

でOK。カレントユーザのホームディレクトリ内のnode_moduleディレクトリに
インストールされます。

一応、理由は特にないですが、僕はnpmのプロジェクトとして
作成しました。

して

最後に

これでプロジェクトルートのnode_modulesディレクトリに
selenium-webdriverがインストールされます。

node_modules/selenium-webdriver/内を見る限りでは
これをインストールすれば、firefox,chrome,phantomjsに
対応してるっぽい。
(他の言語のパッケージはどうなってるか確認してないです)

※念のため、Seleniumが標準で対応しているのはFirefoxと
IEで、Opera,Chrome,Safari,PhantomJSは別途提供されている
driverを利用することでseleniumから操作することができるようです。
なのでFirefoxとIE以外はパッケージ作成者がつけてくれたもの、なのかな?

使ってみる

主な使い方として
Seleniumサーバ(chrome-driver等)を利用する場合と、ライブラリから
直接Seleniumサーバ起動する場合があります。

※SeleniumサーバとはHTTPの特定ポートで命令を受け取り、
それに応じてブラウザを操作するサーバです

外部で起動されているSeleniumサーバを利用する

外部で起動しているSeleniumサーバに対して
プログラム経由で色々させたいときはこちら

※chromedriverを利用している想定です

usingServerは起動したseleniumサーバのURLとポートに応じて
変えてください。

withCapabilitiesは、ソースコード中にあったドキュメントによると

Sets the desired capabilities when requesting a new session. This will
overwrite any previously set desired capabilities.

ということらしいんですが、んじゃdesired capabilitiesってなんだよ、ってこと
で、そちらはここ
にありました。

WebDriverのプロパティを設定してくれるもので、まぁ上記のような
指定をすると、これはChromeの基本的な設定がされているよー、ということを
インスタンスに設定しておくためのもの。っぽい。

chromedriverに対して、webDriver.Capabilities.ie()とかやっても
普通に動いたので、特定のブラウザに対応したwebdriverだと
ぶっちゃけなんでも関係ないかも。(ちゃんと全パターン検証できてはいないです)

driver.getでは引数に与えたURLにHTTP GETでリクエスト。
(ただpostしたいときにpost()っていうメソッドがあるわけではありません。)
driver.quitは処理を終了してブラウザを閉じます。

node_moduleに組み込まれたwebdriverを利用する

グーグルで”Kenta Komai”というキーワードを入力して検索。
結果をスクリーンショットしたものです。

click().then()の内部で2000m秒処理を止めています。
これはGoogleの検索結果が表示されるまで少し待つためです。
この処理を行わない場合は、検索結果に何も表示されていない画面が
スクリーンショットとして撮影される場合がありました。

driver.wait()というメソッドで、条件をつけて処理を待つこともできます。
この場合単純に2000m秒待つだけでよいのでこのようにしました。

findElementで指定したDOMを取得、click()で検索ボタンをクリックさせています。

ScreenShotの保存処理は、他の言語に比べてnodeだと少し面倒ですが、こんな感じで
動きました。

facebookにログインさせてみた

これでログインできました。
※ただsubmitボタンのidはロケーションによって変えてるっぽいので
そのままじゃ動かない場合もある、かも。

表示しているページのHTMLとか取れるともっと汎用性上がりそう。
と思ったらseleniumでAPIを提供しているわけじゃないけど、
一応方法あるっぽいです。

この方法についても実際にこの記事で紹介しようと思ったんですが、
ちょっと手こずっているので、別記事にします。

参考リンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です