WebDriver (IE) で Basic認証 を行う。

元ネタ:Chrome 及び IE の WebDriver で Basic 認証を突破する方法 - QA@IT


回答は、元ネタの方に書いたので詳細は省きます。下記サイトを参考に!
Alek's Blog: Selenium WebDriver tips
Internet Explorer does not support user names and passwords in Web site addresses (HTTP or HTTPS URLs)


というわけで、実際に動かしてみた。
NuGet で Selenium.WebDriver (Ver 2.29.1) を入れて…

using OpenQA.Selenium.IE;
using System;

class Program {
  static void Main(string[] args) {
    using (var d = new InternetExplorerDriver()) {
      d.Navigate().GoToUrl("http://<Basic認証のサイト>/");
      Console.ReadKey();
      d.Quit();
    }
  }
}

ダイアログが出て、先に進めません。

ちなみに、このダイアログは Modal ダイアログなので、Alert と同じ要領で取得出来ます。

var dialog = WebDriver.SwitchTo().Alert();

IAlert の SendKeys で入力可能でしたが、ユーザー名しか入力出来ません。{TAB} とか送っても パスワードText には、フォーカス移らず。
また、Accept や Dismiss でも OK ボタンやキャンセルボタンを押した扱いにならずお手上げ…。


ユーザー/パスワードを URL に設定すると、

using OpenQA.Selenium.IE;
using System;

class Program {
  static void Main(string[] args) {
    using (var d = new InternetExplorerDriver()) {
      d.Navigate().GoToUrl("http://<user>:<password>@<Basic認証のサイト>/");
      Console.ReadKey();
      d.Quit();
    }
  }
}


ダイアログは表示されなくなりましたが、ページも表示されません。
レジストリ設定後に同じコードでを実行すると、正常に認証後のページが表示されました。


というわけで、回避可能ですね!
ちなみに Chrome でも同じ様に実行出来ました。

using OpenQA.Selenium.Chrome;
using System;

class Program {
  static void Main(string[] args) {
    using (var d = new ChromeDriver()) {
      d.Navigate().GoToUrl("http://<user>:<password>@<Basic認証のサイト>/");
      Console.ReadKey();
      d.Quit();
    }
  }
}

そして久々に Selenium で IE 動かしたら、IEDriverServer.exe が必要になってた!
Downloads - selenium - Browser automation framework - Google Project Hosting
今回は、WebDriver のコンストラクタに IEDriverServer.exe や chromedriver.exe のパスを指定していないので、実行ファイルと同じ階層に配置して動かしました。


以前の資料Selenium webdriver使ってみようず UPDATE しないとなー。。