Developer Channel の WebDriver API

WebDriver には、ブラウザーでユーザー シナリオのテストを自動化するための API が用意されています。このドキュメントでは、Internet Explorer Developer Channel で WebDriver を使う方法を詳しく説明します。

WebDriver とは

WebDriver を使うと、開発者は、ユーザーによる Web ページの操作をシミュレートして結果を報告する、自動化されたテストを作成できます。WebDriver は、ブラウザーで実行される JavaScript がアクセスできない機能と情報にアクセスでき、ユーザー イベントや OS レベルのイベントをより正確にシミュレートできるため、これは JavaScript 単体テストとは異なります。

複数の Windows、タブ、Web ページにまたがるテストを 1 つのテスト セッションで管理することもできます。

Internet Explorer Developer Channel の WebDriver のインストール

まず、Internet Explorer Developer Channel をダウンロードしてインストールします。

Internet Explorer 11 を実行している Windows 8.1 ユーザーと Windows 7 SP1 ユーザーがダウンロードを入手できます。

Internet Explorer Developer Channel と同時に WebDriver はインストールされますか。

はい。ただし、有効にはなりません。WebDriver を有効にすると、WebDriver へのアクセス方法を認識しているすべてのプログラムがブラウザーを制御できます。 ブラウザーが予想外の方法で制御されて驚くことがないように、現在のバージョンの WebDriver は手動で有効にする必要があります。そのためには、次の手順を実行します。

  • 管理者特権を使用して、コマンド プロンプトを起動します。最も簡単な方法は、Windows ロゴ キーを押しながら X キーを押して、[クイック リンク] メニューを開き、A キーを押して [コマンド プロンプト (管理者)] オプションを選ぶ方法です。

    [ユーザー アカウント制御] プロンプトで、コマンド プロンプトにコンピューターの変更を許可するかどうかの確認が求められます。変更を許可すると、コマンド プロンプト ウィンドウが開きます。

  • Internet Explorer Developer Channel インストーラーが WebDriver ライブラリを配置した場所に移動します。

    cd C:\Program Files\Common Files\IEDCWebDriver

  • IEDCWebDriver.dll ファイルを登録します。

    regsvr32 IEDCWebDriver.dll

  • Internet Explorer Developer Channel を開きます。[ツール] メニューの [インターネット オプション] を開いて、[セキュリティ] タブを選び、タブの下部にある [保護モードを有効にする] の横のチェック ボックスをオンにします。この操作を、[インターネット][ローカル イントラネット] の両方のゾーンに対して行います。新しい設定を適用します。

どうすれば Internet Explorer Developer Channel の WebDriver を無効にできますか。

上の手順に従いますが、[保護モードを有効にする] の横にあるボックスをオフにし、次のコマンドを使ってライブラリの登録を解除します。

regsvr32 /u IEDCWebDriver.dll

Internet Explorer Developer Channel を使った WebDriver アプリの実行

WebDriver をターゲットとするコンパイル済みアプリを実行する場合、実行時に特別な GUID と共に appvve フラグを指定し、Internet Explorer Developer Channel が正しくターゲットとなるようにします。

Internet Explorer Developer Channel の 32 ビット バージョンと 64 ビット バージョンでは GUID が異なります。

  • 32 ビットの GUID: 9BD02EED-6C11-4FF0-8A3E-0B4733EE86A1_681E2361-2C6F-4D47-A8B7-D3F7B288CB45
  • 64 ビットの GUID: 9BD02EED-6C11-4FF0-8A3E-0B4733EE86A1_6A0357B5-AB99-4856-8A59-CF2C38579E78

たとえば、アプリの名前が WDApp.exe で、32 ビットの Internet Explorer Developer Channel を実行している場合、次のコマンドを使ってコマンド ラインからアプリを実行する必要があります。

WDApp.exe /appvve 9BD02EED-6C11-4FF0-8A3E-0B4733EE86A1_681E2361-2C6F-4D47-A8B7-D3F7B288CB45

これを自動化するには、ファイル マネージャーでアプリを右クリックして [ショートカットの作成] をクリックし、生成されたショートカット項目を右クリックして [プロパティ] をクリックします。[プロパティ] ウィンドウの [ショートカット] を選びます。

[ターゲット] フィールドに、アプリへのパスが引用符で囲まれて表示されます。/appvve フラグと GUID を引用符で囲んで追加し、変更を適用します。ショートカットを使うと、毎回フラグが追加された状態でアプリが実行されます。

重要  

上に示した GUID は、Internet Explorer Developer Channel の初回リリース用です。GUID はリリースごとに変わるため、このリリースに対して記述されたアプリを新しいリリースでテストする場合は、そのバージョンのドキュメントで正しい GUID を確認してください。

重要  

フラグと GUID は、WebDriver C# サンプル プロジェクトの設定に組み込まれます。Visual Studio は、Visual Studio でデバッグ セッションを開始するときにそれらを自動的にランタイム フラグとして適用しますが、コンパイル済みアプリには組み込まれません。

重要  

WebDriver アプリケーションを実行するプラットフォームに適した GUID を使用する必要があるだけでなく、そのプラットフォーム向けにアプリをコンパイルする必要もあります。Windows 8.1 を実行しているほとんどのユーザーは 64 ビット アーキテクチャを実行しているため、以下で説明する WebDriver c# サンプル プロジェクトは 64 ビット用に構成されています。32 ビットに変更するには、Visual Studio の [ビルド] メニューの [構成マネージャー] を開き、[プラットフォーム] ドロップダウン メニューで [x86] を選びます。

WebDriver の使用

警告  この作業には、いくらかのプログラミングの知識が必要です。ここでは、Visual Studio を使った C# の手順のみ説明します。Visual Studio がない場合、無料の Microsoft Visual Studio Express 2013 for Windows Desktop を使ってサンプル プロジェクトを試し、一部のテストをビルドできます。

Internet Explorer Developer Channel で WebDriver を実装するには、コマンドの入力と結果の出力をマーシャ リングする COM オブジェクトをビルドする必要があります。コマンドと応答はどちらも JSON 形式になります。

まず、WebDriver C# サンプル プロジェクトをダウンロードします。これには、COM オブジェクトのサンプル実装が含まれており、WebDriver インターフェイスを通じてブラウザーと通信できるようになります。

Visual Studio で IEWebDriverExample.sln ファイルを開き、IEWebDriverSample.cs コード ファイルを開きます。

Visual Studio ソリューション エクスプ ローラーに表示された iewebdriversample.cs ファイル

デモを実行するには、[デバッグ] メニューから [デバッグなしで開始] (Ctrl + F5) を選びます。2 つの重要な処理が行われます。コンソール ウィンドウが開き、送信されたコマンドと受信した応答が表示されます。Internet Explorer ウィンドウが開き、コマンドが実行されます。

[デバッグの開始] (F5) を選ぶこともできますが、すべての処理に成功した場合、コンソール ウィンドウがすぐに消えるためコマンドと応答を確認できません。ただし、エラーによってスクリプトを完了できない場合は表示されたままです。

セッションの確立

一連の WebDriver コマンドは、newSession コマンドを使ってセッションを確立することで開始します。これによってブラウザー ウィンドウを開いてインターフェイスが確立され、セッション ハンドルが返されるため、多くのコマンドをそのセッションのターゲットとすることができます。それでは、この処理を行うコードを見てみましょう。

//Execute a "newSession" command
const string newSessionCommand = @"
{
  ""command"": {
    ""name"": ""newSession"",
    ""parameters"": {
      ""desiredCapabilities"": {},
      ""requiredCapabilities"": {}
    },
  ""sessionId"": null
  }
}";
strResponse = ExecuteCommand(newSessionCommand, null);

余分な引用符 (C# で複数行の文字列リテラルを定義する関数) がある点を除き、この JSON 形式は非常に似ています。

どのコマンドも、command オブジェクトを含む JavaScript オブジェクト リテラルを作成することで開始されます。command オブジェクトで、文字列として実行するコマンドの name、オブジェクトとして parameters、文字列として sessionId を指定します。この場合、sessionId がまだ設定されていないため、値は null になります。応答で次のような sessionId が返されます。

{
  "response":{
    "sessionId":"[session identifier]",
    "status":"success",
    "value":{
      "browserName":"Internet Explorer", 
      "browserVersion":"11",
      "platformName":"windows",
      "platformVersion":"8.1",
      "secureSsl":true,
      "takesElementScreenshot":true,
      "takesScreenshot":true,
      "-ms-requireWindowFocus":true
    }
  }
}

value オブジェクトは、システムがスクリーンショットを取得したり、SSL を処理したりできるかどうかなど、特定のブラウザー プロパティと特定の機能を表示します。Internet Explorer の WebDriver の開発におけるこの段階では、newSession コマンドで設定できる機能は -ms-requireWindowFocus だけです。true に設定すると、コマンドが実行されるたびに、デスクトップのフォーカスがセッションのブラウザー ウィンドウに置かれます。false に設定された場合、すべてのコマンドをブラウザーのバックグラウンドで実行できるようになります。

ブラウザーへのコマンドの送信

サンプル プロジェクトは、応答から sessionId を抽出します。これは、後続のすべてのコマンドで使われます。

  • Bing.com を読み込みます。
  • その検索用語の入力を探します。
  • 用語をキーボードから入力して Enter キー入力を行うことで、検索を実行します。

ブラウザーで新しい URL を読み込むコマンドは get です。

const string getCommand = @"
{
  ""command"": {
    ""name"": ""get"",
    ""parameters"": {
      ""url"": ""https://bing.com""
    },
    ""sessionId"": ""{sessionId}""
  }
}";

パラメーターは 1 つ (URL) です。書き込み時に、一時停止して WebDriver に組み込まれたページの読み込みを待機することはないため、サンプル スクリプトはときどき executeScript コマンドを使ってページを 20 秒間ポーリングし、続ける前にページが読み込まれたことを確認します (サンプルの WaitForPageToLoad() メソッドを参照)。

その後、スクリプトは Bing の入力フィールドで検索用語を探します。

const string findElementCommand = @"
{
  ""command"": {
    ""name"": ""findElement"",
    ""parameters"": {
      ""locator"": ""css selector"",
      ""value"": ""input[name=q]""
      },
    ""sessionId"": ""{sessionId}""
  }
}";

findElement コマンドは、パラメーターと一意の ID に一致する最初の要素を返します。その後のコマンドでは、それらのパラメーターと一意の ID によって要素をターゲットにできます。パラメーターに一致するすべての要素の配列が必要な場合は、findElements を使います。

findElementfindElements のパラメーターは、探す一致の種類を定義する locator と、一致の内容を定義する value です。この場合、CSS セレクターを使って、name が "q" に一致する input 要素を探しています。

現在利用可能な他のロケーターの種類は次のとおりです。

  • id: 要素の id 属性の完全一致です。
  • link text: value パラメーターのテキストに完全に一致するリンクです。
  • partial link text: テキスト value パラメーターを含むリンクです。

サンプル スクリプトが送信する最後のコマンドは sendKeys です。

const string sendKeysCommand = @"
{
  ""command"": {
    ""name"": ""sendKeys"",
    ""parameters"": {
      ""id"": ""{elementId}"",
      ""keysToSend"": [""W"", ""e"", ""b"", ""D"", ""r"", ""i"", ""v"", ""e"", ""r"", ""\uE007""]
      },
    ""sessionId"": ""{sessionId}""
  }
}";

このコマンドでは、id パラメーターが、findElement コマンドへの応答として返された値です。keysToSend パラメーターには 10 個のキー入力の配列が含まれています。"WebDriver" に加えて、Enter の文字の種類のコードです。

すべての処理が適切に実行された場合、newSession コマンドの結果として開いたブラウザー ウィンドウに、Bing.com での "WebDriver" の検索結果が表示されます。

サンプルはここで終了しますが、論理的な次の 2 つ手順として、takeScreenshot コマンドを使ってスクリーンショットを取得し、セッションの close を実行できます。

次にすること

ここまでで、WebDriver を使って Internet Explorer Developer Channel を制御する方法を理解し、サポートされる WebDriver コマンドの詳細な一覧を確認しました。これらを試したら、Microsoft Connect にアクセスしてフィードバックをお寄せください。バグ レポートも助かりますし、特に気に入った機能がありましたらぜひそちらもお知らせください。

関連トピック

WebDriver API リファレンス

IIEWebDriverManager

Windows 8.1 向け Internet Explorer Developer Channel のダウンロード

Windows 7 SP1 向け Internet Explorer Developer Channel のダウンロード