私はSelenium-Firefox-driverとSelenium-Chrome-Driverバージョン2.0a5(Web Driver API)、BASIC認証を備えたWebアプリをテストしようとしています(どのページ、ポップアップをヒットしてもユーザーを認証するポップアップが表示されます) HTMLの一部ではありません)。
次に、Firefoxでユーザーを認証する戦略が必要です。Chrome and IE(IEまもなくドライバー)。
たとえば、Firefoxプロファイルを設定できるいくつかの記事を読んでいました。
FirefoxProfile ffProfile = new FirefoxProfile();
ffProfile.setPreference("network.http.phishy-userpass-length", 255);
WebDriver driver = new FirefoxDriver(ffProfile);
driver.get("http://username:password@hostname");
しかし、それは私にはうまくいかないようです。誰もがそれらのブラウザ用の実用的なソリューションを持っていますか?
確かに、BASIC HTTP認証は現在サポートされていませんが、FFおよびChromeで動作するようになりました。
質問で書いたコードは、これらのドライバーで機能します。 FF4(まだサポートされていません)の代わりに、Firefoxのデフォルトブラウザ(Firefoxフォルダにインストールされている)としてFF3.6を使用してみました。 IEの場合、Windowsレジストリを介して認証を無効にしようとする場合があります。
このページ http://code.google.com/p/Selenium/issues/detail?id=34 が役立つ場合があります。
次の方法でFirefox Webdriverで動作するようにしました。
profile.SetPreference("network.automatic-ntlm-auth.trusted-uris", "google.com");
driver = new FirefoxDriver(profile);
driver.Navigate().GoToUrl("http://user:[email protected]");
この新しいFirefoxプロファイルをコードに追加します
ProfilesIni profile = new ProfilesIni();
FirefoxProfile myprofile = profile.getProfile("myProjectProfile"); //replace "myProjectProfile" with your profile"
WebDriver driver = new FirefoxDriver(myprofile);
Firefoxの構成設定
これは、次の設定を行うときに認証を求めることなく正常に機能します。
デフォルト/カスタムをロードChrome Selenium WebDriverを使用してテストを実行するプロファイル
Javaコードにこのスクリプトを追加します
DesiredCapabilities capability = DesiredCapabilities.chrome();
System.setProperty("webdriver.chrome.driver", "C:/chromedriver.exe");
capability.setCapability("chrome.switches", Arrays.asList("–disable-extensions"));
capability.setCapability("chrome.binary", "C:/Users/user_name/AppData/Local/Google/Chrome/Application/chrome.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("user-data-dir=C:/Users/user_name/AppData/Local/Google/Chrome/User Data/Default");
driver = new ChromeDriver(capability);
注:IEは、FirefoxとChromeがバイナリで動作する間にサーバーユーザーで実行されるため、テストを実行するためにプロファイルをセットアップする必要はありません。
移植性を高めるために、これはスタブAPIおよび Alert を使用して処理できます。
例Java code( sample ):
import org.openqa.Selenium.Alert;
import org.openqa.Selenium.security.Credentials;
public void authenticateUsing(Credentials credentials) {
private final Alert alert;
alert.authenticateUsing(credentials);
}
参照: auth_tests.py
または、次のようにキーを手動で送信します。
SendKeys("user");
SendKeys("{TAB}");
SendKeys("password");
SendKeys("~"); // Enter
次の機能リクエストも参照してください。 #453 GitHubでのポータブルBASIC認証
関連:
Internet Explorerでhttp認証を有効にするには、レジストリを編集してこれを追加する必要があります(キーが存在しない場合はキーを作成します)。
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
、DWORDを作成iexplore.exe
の値は0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
、DWORDを作成iexplore.exe
の値は0
Internet Explorerを閉じて再度開きます
X64 IEを使用している場合、パスは少し異なります。
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
Selenium 2とChrome(Chromeのバグによる)で基本認証を使用できなかったため、Chromeを送信する拡張機能を作成しました基本認証資格情報( https://chrome.google.com/webstore/detail/basic-authentication-auto/dgpgkkfheijbcgjklcbnokoleebmeokn を参照)。
http://mogotest.com/blog/2010/06/23/how-to-perform-basic-auth-inでHTTPヘッダーを手動で設定することにより、Selenium 1.xで認証を実行するためのソリューションがあります-Selenium しかし、ヘッダーにアクセスできないため、これがSelenium 2に転送できるとは思わない。
情報によると こちら 「Selenium 2の基本認証サポート」がSelenium 2 Beta 2に追加されましたが、ソースコードを見ると、匿名アクセスからリモートSeleniumサーバーを保護する方法として実装されていることがわかります。
答えは、BASIC HTTP認証が現在サポートされていないことだと思います。