web-dev-qa-db-ja.com

FirefoxのURL経由のHTTP基本認証が機能しませんか?

私は通常、URLでユーザー名とパスワードを渡すことにより、SeleniumでのHTTP基本認証を必要とするサイトにログインできることを知っています。例:

Selenium.open("http://myusername:[email protected]/mypath");

Firefox 2または3でSeleniumテストを実行していても、「認証が必要です」ダイアログウィンドウが表示されますか?

更新:Seleniumの問題ではなく、Firefoxの問題のようです。 FF内で手動でURLを入力すると認証ダイアログが表示されますが、OperaでURLを入力すると、認証ダイアログが表示されずにページが表示されます。

18
Peter

Druskaの回答に貢献して、Selenium 2 APIを使用して同じ構成を行うことができます。

FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("network.http.phishy-userpass-length", 255);
profile.setPreference("network.automatic-ntlm-auth.trusted-uris","yourDomain");
new FirefoxDriver(profile);

このアプローチはより簡単で、Firefoxの設定を変更するようにすべての開発者に依頼する必要はありません。私はFirefoxドライバーでのみテストしました。

[〜#〜]更新[〜#〜]

何らかの理由で(多分 https://stackoverflow.com/a/14348701/256245 で説明されているもの)、上記のソリューションは新しいバージョンのFirefoxでは機能しません。これが私にとって今うまくいくものです(Firefox 19.0.2でテスト済み):

  1. インストール AutoAuth Firefoxプラグイン;
  2. 認証が必要なサイトにアクセスします。ユーザー名とパスワードを入力し、資格情報の保存を選択してください。
  3. AutoAuthインストールファイルをハードドライブに保存します。プラグインページで、[Firefoxに追加]を右クリックし、[名前を付けてリンクを保存]をクリックします。
  4. 次のようにFirefox Webdriverをインスタンス化します。

    FirefoxProfile firefoxProfile = new ProfilesIni().getProfile("default");
    File pluginAutoAuth = new File("src/test/resources/autoauth-2.1-fx+fn.xpi");
    firefoxProfile.addExtension(pluginAutoAuth);
    return new FirefoxDriver(firefoxProfile);
    

プラグインのインストールを保存した正しいパスでpluginAutoAuthファイルを必ずインスタンス化してください。デフォルトのプロファイルを使いたくない場合は、Firefoxプロファイルマネージャを使用して、テストに固有のプロファイルを作成できます。

この新しいソリューションへの参照: http://watirmelon.com/2012/06/27/automatic-firefox-authentication-when-using-Selenium-webdriver-with-autoauth/

11
Fabricio Lemos

FirefoxとInternet Explorerのソリューションがあります。

Firefoxの場合、about:configに移動して、長さ255の整数network.http.phishy-userpass-lengthを作成する必要があります。これはユーザー名とパスワードが255文字未満の場合、認証ボックスをポップアップしないようにFirefoxに指示します。これで、認証に http:// user:[email protected] を使用できます。

Internet Explorerの場合、レジストリを編集する必要があります。キーHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLEで、DWORD値を作成しますiexplore.exeおよびExplorer.exeそして、それらの値がであることを確認します。

NTLM認証もオーバーライドする必要がありました。 FirefoxでHTTP基本認証構文を使用してNTLM認証を行うには、Firefox構成文字列network.automatic-ntlm-auth.trusted-uris(最初の構成オプションに付属)で使用されているドメインを指定するだけです。これはIEで、レジストリの編集だけで機能します。

10
Druska

コンテキストルートの後にスラッシュを追加します。

代わりに:Selenium.open("http://myusername:[email protected]/mypath");

使用:Selenium.open("http://myusername:[email protected]/mypath/");

これは、コンテキストルートの最後にスラッシュを追加することで、世界のすべての違いを生みます。スラッシュがないと、ポップアップが開き、スラッシュが期待どおりに認証されます。

注:これはSeleniumのバグではありませんまたは何でもないが、Firefoxのものです。コマンドラインを使用して、自分の目で確かめることもできます。

 C:\Program Files\Mozilla Firefox>firefox http://myusername:[email protected]/mypath/

私にとっては、ネットワークURIを設定しなくても機能します。

FirefoxProfile profile = new FirefoxProfile();
//profile.setPreference("network.automatic-ntlm-auth.trusted-uris", "mydomain.com");
//profile.setPreference("network.negotiate-auth.trusteduris", "mydomain.com");

WebDriver driver = new FirefoxDriver(profile);

driver.navigate().to("http://myusername:[email protected]/mypath/");


バージョン
Firefox 19.0、
Selenium-Java 2.31.0

FireFoxドライバーを使用している場合... FireFoxプロファイルを作成し、ユーザー名/パスをパスワードマネージャーに保存し、アドオンを使用して自動ログインできます。 FireFoxまたはChromeドライバーを作成する場合、デフォルトでは匿名のプロファイルが使用されます。そのため、通常の拡張機能/アドオンなどは使用されません。したがって、作成するのが最善です。ソース管理で配布および保存できるプロファイル。

1)Windowsでは、実行/スタートメニューから「firefox.exe -p」と入力してプロファイルマネージャーを起動し、カスタムマネージャーを作成して、コードの残りの場所に保存します。

2)起動時に確認しないがチェックされている

3)AutoAuthアドオンをダウンロード https://addons.mozilla.org/en-US/firefox/addon/autoauth/

4)HTTP基本認証を必要とするサイトにアクセスし、資格情報を保存します

次回サイトにアクセスしたとき、AutoAuthは認証を要求せずにログインします。プロンプトは表示されません。

NTLMを使用している場合は、構成設定を変更してホスト名を含めることができます。network.automatic-ntlm-auth.trusted-uris

5
Joey V.

次のようにヘッダーを直接操作することができます。

最初に、Selenium ti操作ヘッダーを有効にする必要があります。

Selenium.start("addCustomRequestHeader=true");

次に、次のような基本的なエンコーディングとヘッダー操作を使用する必要があります。

    String authHeader = "";
    try {
    BASE64Encoder coder = new BASE64Encoder();
    authHeader = coder.encode("developers:Str492ight".getBytes());
    }
    catch (Exception e)
    {
    e.printStackTrace();
    }
    setUpSelenium();
    startSelenium();
    Selenium.addCustomRequestHeader("Authorization", "Basic " + authHeader);
    Selenium.open("/");
    Selenium.waitForPageToLoad("10000");

Basic以降のスペースが必要です。基本的なHTTP認証ヘッダーは次のようになります。

さらに、いくつかのHttp Watcherを使用して、リクエストに認証リクエストが含まれているかどうかを確認できます。

Wiresharkを使用するか、FiddlerまたはCharles Proxyを使用してください。

お役に立てば幸いです。ジェルジ。

2
Hannibal

前述のように、addCustomRequestHeaderソリューションはプロキシインジェクションモードでのみ機能します。しかし、それを実装しようとしたときに、そのプロキシインジェクションモードに関連する他の問題に遭遇しました。

Javaクライアントを使用している場合にプロキシインジェクションがまったく機能するかどうかは明確ではありません。open()を呼び出すといつでも、 "this.onXhrStateChange.bind is not 「関数」。私が見つけた唯一の解決策は、open()メソッドに値「true」のパラメーターを追加する必要があることを示唆していますが、JavaクライアントAPIは単一のパラメーターしか受け入れません。

そのため、ベンダーがソリューションをサポートするかどうかに依存しているため、私は上で説明したブラウザー構成ソリューションに満足する必要がありました。

テストをSelenium 2に移植すること(現時点ではまだアルファ版)の方が良い見通しかもしれませんが、私の場合、Selenium GridがSelenium 2をサポートするまで不可能です。

誰もが助けてくれることを願っています、セバスチャン

0
Sebastien B.

まあ、Sikuliスクリプトを使用して、このFirefox認証ポップアップをWindowsおよびLinux環境で処理することができます。

  • Windows/LinuxでのSikuliのダウンロードとセットアップ(依存関係のインストールが必要)
  • 次のSikuliスクリプトを使用してポップアップを処理します。Authentilcat1.pngはポップアップ画像で、100個のポップアップを処理します

for i in range (100): while exists(Pattern("Authentlcatl.png").similar(0.99)): print("Found Authentication Popup") wait(2) type("admin" + Key.TAB) type("admin" + Key.ENTER)

  • 次のコードを使用して、JavaコードからSikuliスクリプトをトリガーおよび終了します。

Sikuliスクリプトをトリガーするには

String[] lincmd = { "bash", "-c", "Sudo Java -jar Sikuli-X/Sikuli-IDE/sikuli-script.jar Sikuli-X/Sikuli-IDE/new1.sikuli/" };

Java.lang.Runtime.getRuntime()。exec(lincmd);

Sikuliスクリプトを終了するには

String[] lincmd = { "bash", "-c", "Sudo kill $(ps aux | grep '[s]ikuli' | awk '{print $2}')" };

Java.lang.Runtime.getRuntime()。exec(lincmd);

  • JavaコードからSikuliスクリプトをトリガーした後、Sikuliスクリプトは別のプロセスとして個別に実行されるため、最後にJavaコードでSikuliスクリプトを終了します。

  • したがって、ポップアップが画面に表示されるたびに、Sikuliスクリプトが処理します。

0
Ramkumar

Firefox 17 'username:password'(RFC1738)処理は、Firefoxではデフォルトで許可されていません(以前は機能していました)。ただし、次の方法で再度有効にできることがわかりました。

FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("network.negotiate-auth.trusteduris", hostname);
driver = new FirefoxDriver(profile);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
Selenium = new WebDriverBackedSelenium(driver, "http:// + username + ":"
    + password + "@"
    + hostname + ":" + port + baseUrl);

Selenium 2.28.0、Firefox 17で動作します。 DigestAuthログインに使用されます。

0
MitchSundt