C# から Selenium Web Driver を利用してみる
「単調な Web の試験を自動化したい」と思うことは良くあります。こういった場合は Selenium が便利です。
Selenium の種類¶
Selenium には歴史的経緯から、以下のような種類があります。今回は Selenium WebDriver を使います。
- Selenium 1(通称、「Selenium Remote Control」または「Selenium RC」)
- JavaScript として実装されている
- ブラウザ毎に共通実装なので、「あるブラウザでは動作するが、別のブラウザでは動作しない」という、ブラウザ毎の JavaScript 実装差異の影響を受ける可能性がある
- ブラウザのサンドボックスにロードされ、実行される。つまり、サンドボックスの制限を受ける
- Selenium 2(通称、「Selenium WebDriver」または「WebDriver」)
- ブラウザ毎にドライバーが提供される
- ドライバーを経由し、外部からブラウザを制御する
- Selenium RC のように、サンドボックスの影響は受けない
前提条件¶
今回は以下の環境でテストしました。
- Windows 8.1 (64bit)
- Selenium Web Driver 2.44.0
- Chrome 39.0.2171.95 m
- Firefox 34.0.5
- IE 11.0.9600.17498
- Visual Studio 2013 (C#)
新規プロジェクトの作成¶
最初に Visual Studio で新規プロジェクトを作成します。Visual Studio を起動し、「ファイル → 新規作成 → プロジェクト」を選択します。
「新しいウインドウ」が開くので、Visual C# テンプレートから「コンソール アプリケーション」を選択後、プロジェクト名を入力します。今回は "MyFirstSelenium" としました。
「新しいウインドウ」が開くので、Visual C# テンプレートから「コンソール アプリケーション」を選択後、プロジェクト名を入力します。今回は "MyFirstSelenium" としました。
参照の追加¶
Selenium Web Driver を Visual Studio のプロジェクトから利用出来るよう、参照の追加を行います。まず、Selenium Web Driver を ダウンロードページ からダウンロードし、展開します。次に Visual Studio のメニューから「プロジェクト → 参照の追加」を選択します。
「参照マネージャ」ダイアログが開くので、展開したファイルのうち、以下をまとめて参照します。
- Selenium.WebDriverBackedSelenium.dll
- ThoughtWorks.Selenium.Core.dll
- WebDriver.dll
- WebDriver.Support.dll
参照設定が完了するとソリューションエクスプローラに該当 .dll が表示されます。
Driver のダウンロード¶
Selenium WebDriver から FireFox だけを利用する場合は追加のドライバーは不要です。しかし、Chrome や IE を利用する場合は以下から Driver を追加ダウンロードする必要があります。
ダウンロードしたファイルは展開し、サンプルの実行ファイルと同じディレクトリに配置しておきます。
サンプルコード¶
以下のようなサンプルコードを用意しました。Chrome, FireFox, IE が次々に起動され、Google で「Cheese!」というキーワードを検索します。
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 28 29 30 31 32 33 34 35 36 |
|
IE で「NoSuchElementException」エラーになってしまう場合¶
IEDriverServer を正しい位置に配置し、サンプルコードにも問題が無いのに IE でのみ、「NoSuchElementException」が発生する場合があります。この場合は IE のインターネットオプションからセキュリティタブを選択し、全てのセキュリティゾーンに対して「保護モードを有効にする」へチェックしておきます。
64bit 版 IEDriverServer で SendKeys での文字送信が遅い場合¶
64bit 版の IEDriverServer を利用した場合、SendKeys で文字送信した場合、一文字送信する度に 2 〜 5 秒程度と非常に長い時間がかかります。これは既知の問題だそうです。
32bit 版の IEDriverServer を利用することで回避出来、文字送信をスムーズに行うことが出来ます。
FireFox が「Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms」エラーで起動しない場合¶
ユーザフォルダに 2 バイト文字が含まれていると FireFox が上手く起動しませんでした。
ユーザフォルダに 2 バイト文字を含まなければ FireFox が問題無く、起動します。Microsoft アカウントでユーザ名に 2 バイト文字を登録した状態で、Windows 8/8.1 の初回ログイン時のユーザ作成に Microsoft アカウントを使ってしまうと、ユーザフォルダ名が Microsoft アカウントの名前が利用されてしまい、2 バイト文字になってしまうので要注意です。
Windows の初回ログイン時は(2 バイト文字を含まない)ローカルアカウントを作成し、後でそのローカルアカウントに Microsoft アカウントを紐付ければ OK です。
参考書籍¶
Satya Avasarala の著作であり、Sky 株式会社の玉川竜司さんが翻訳された 実践 Selenium WebDriver が非常に参考になります。